@tuwaio/pulsar-evm 0.2.4 → 0.3.0
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.d.mts +8 -8
- package/dist/index.d.ts +8 -8
- package/dist/index.js +2 -2
- package/dist/index.mjs +2 -2
- package/package.json +8 -8
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Transaction, TxAdapter, ITxTrackingStore,
|
|
1
|
+
import { Transaction, TxAdapter, ITxTrackingStore, TrackerCallbacks, PollingTrackerConfig, ActionTxKey, GelatoTxKey, TransactionTracker } from '@tuwaio/pulsar-core';
|
|
2
2
|
import { Config } from '@wagmi/core';
|
|
3
3
|
import { Chain, GetTransactionReturnType, TransactionReceipt, Client, ReplacementReturnType, WaitForTransactionReceiptParameters, Hex } from 'viem';
|
|
4
4
|
|
|
@@ -60,7 +60,7 @@ declare function evmTracker(params: EVMTrackerParams): Promise<void>;
|
|
|
60
60
|
*/
|
|
61
61
|
declare function evmTrackerForStore<T extends Transaction>(params: Pick<EVMTrackerParams, 'config'> & Pick<ITxTrackingStore<T>, 'updateTxParams' | 'transactionsPool'> & {
|
|
62
62
|
tx: T;
|
|
63
|
-
} &
|
|
63
|
+
} & TrackerCallbacks<T>): Promise<void>;
|
|
64
64
|
|
|
65
65
|
/**
|
|
66
66
|
* @file This file implements the transaction tracking logic for meta-transactions relayed via the Gelato Network.
|
|
@@ -112,9 +112,9 @@ declare const gelatoFetcher: PollingTrackerConfig<GelatoTaskStatusResponse, Tran
|
|
|
112
112
|
*
|
|
113
113
|
* @template T - The application-specific transaction type.
|
|
114
114
|
*/
|
|
115
|
-
declare function gelatoTrackerForStore<T extends Transaction>({ tx, updateTxParams, removeTxFromPool, transactionsPool,
|
|
115
|
+
declare function gelatoTrackerForStore<T extends Transaction>({ tx, updateTxParams, removeTxFromPool, transactionsPool, onSuccess, onError, }: Pick<ITxTrackingStore<T>, 'updateTxParams' | 'removeTxFromPool' | 'transactionsPool'> & {
|
|
116
116
|
tx: T;
|
|
117
|
-
} &
|
|
117
|
+
} & TrackerCallbacks<T>): void;
|
|
118
118
|
|
|
119
119
|
/**
|
|
120
120
|
* @file This file implements the transaction tracking logic for Safe (formerly Gnosis Safe) multisig transactions.
|
|
@@ -145,9 +145,9 @@ declare const safeFetcher: PollingTrackerConfig<SafeTxStatusResponse, Transactio
|
|
|
145
145
|
*
|
|
146
146
|
* @template T - The application-specific transaction type.
|
|
147
147
|
*/
|
|
148
|
-
declare function safeTrackerForStore<T extends Transaction>({ tx, updateTxParams, removeTxFromPool, transactionsPool,
|
|
148
|
+
declare function safeTrackerForStore<T extends Transaction>({ tx, updateTxParams, removeTxFromPool, transactionsPool, onSuccess, onError, onReplaced, }: Pick<ITxTrackingStore<T>, 'updateTxParams' | 'removeTxFromPool' | 'transactionsPool'> & {
|
|
149
149
|
tx: T;
|
|
150
|
-
} &
|
|
150
|
+
} & TrackerCallbacks<T>): void;
|
|
151
151
|
|
|
152
152
|
/**
|
|
153
153
|
* @file This file contains a utility function for canceling a pending EVM transaction.
|
|
@@ -206,7 +206,7 @@ type InitializeTrackerParams<T extends Transaction> = Pick<ITxTrackingStore<T>,
|
|
|
206
206
|
config: Config;
|
|
207
207
|
tx: T;
|
|
208
208
|
tracker: TransactionTracker;
|
|
209
|
-
} &
|
|
209
|
+
} & TrackerCallbacks<T>;
|
|
210
210
|
/**
|
|
211
211
|
* Initializes the appropriate tracker for a given transaction based on its `tracker` type.
|
|
212
212
|
* This function acts as a central router, delegating to the specific tracker implementation
|
|
@@ -216,7 +216,7 @@ type InitializeTrackerParams<T extends Transaction> = Pick<ITxTrackingStore<T>,
|
|
|
216
216
|
* @param {InitializeTrackerParams<T>} params - The parameters for initializing the tracker.
|
|
217
217
|
* @returns {Promise<void>} A promise that resolves once the tracking process has been successfully initiated.
|
|
218
218
|
*/
|
|
219
|
-
declare function checkAndInitializeTrackerInStore<T extends Transaction>({ tracker, tx, config, transactionsPool,
|
|
219
|
+
declare function checkAndInitializeTrackerInStore<T extends Transaction>({ tracker, tx, config, transactionsPool, onSuccess, onError, onReplaced, ...rest }: InitializeTrackerParams<T>): Promise<void>;
|
|
220
220
|
|
|
221
221
|
/**
|
|
222
222
|
* @file This file contains a utility to check if the Gelato Relay service is available for a specific chain.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Transaction, TxAdapter, ITxTrackingStore,
|
|
1
|
+
import { Transaction, TxAdapter, ITxTrackingStore, TrackerCallbacks, PollingTrackerConfig, ActionTxKey, GelatoTxKey, TransactionTracker } from '@tuwaio/pulsar-core';
|
|
2
2
|
import { Config } from '@wagmi/core';
|
|
3
3
|
import { Chain, GetTransactionReturnType, TransactionReceipt, Client, ReplacementReturnType, WaitForTransactionReceiptParameters, Hex } from 'viem';
|
|
4
4
|
|
|
@@ -60,7 +60,7 @@ declare function evmTracker(params: EVMTrackerParams): Promise<void>;
|
|
|
60
60
|
*/
|
|
61
61
|
declare function evmTrackerForStore<T extends Transaction>(params: Pick<EVMTrackerParams, 'config'> & Pick<ITxTrackingStore<T>, 'updateTxParams' | 'transactionsPool'> & {
|
|
62
62
|
tx: T;
|
|
63
|
-
} &
|
|
63
|
+
} & TrackerCallbacks<T>): Promise<void>;
|
|
64
64
|
|
|
65
65
|
/**
|
|
66
66
|
* @file This file implements the transaction tracking logic for meta-transactions relayed via the Gelato Network.
|
|
@@ -112,9 +112,9 @@ declare const gelatoFetcher: PollingTrackerConfig<GelatoTaskStatusResponse, Tran
|
|
|
112
112
|
*
|
|
113
113
|
* @template T - The application-specific transaction type.
|
|
114
114
|
*/
|
|
115
|
-
declare function gelatoTrackerForStore<T extends Transaction>({ tx, updateTxParams, removeTxFromPool, transactionsPool,
|
|
115
|
+
declare function gelatoTrackerForStore<T extends Transaction>({ tx, updateTxParams, removeTxFromPool, transactionsPool, onSuccess, onError, }: Pick<ITxTrackingStore<T>, 'updateTxParams' | 'removeTxFromPool' | 'transactionsPool'> & {
|
|
116
116
|
tx: T;
|
|
117
|
-
} &
|
|
117
|
+
} & TrackerCallbacks<T>): void;
|
|
118
118
|
|
|
119
119
|
/**
|
|
120
120
|
* @file This file implements the transaction tracking logic for Safe (formerly Gnosis Safe) multisig transactions.
|
|
@@ -145,9 +145,9 @@ declare const safeFetcher: PollingTrackerConfig<SafeTxStatusResponse, Transactio
|
|
|
145
145
|
*
|
|
146
146
|
* @template T - The application-specific transaction type.
|
|
147
147
|
*/
|
|
148
|
-
declare function safeTrackerForStore<T extends Transaction>({ tx, updateTxParams, removeTxFromPool, transactionsPool,
|
|
148
|
+
declare function safeTrackerForStore<T extends Transaction>({ tx, updateTxParams, removeTxFromPool, transactionsPool, onSuccess, onError, onReplaced, }: Pick<ITxTrackingStore<T>, 'updateTxParams' | 'removeTxFromPool' | 'transactionsPool'> & {
|
|
149
149
|
tx: T;
|
|
150
|
-
} &
|
|
150
|
+
} & TrackerCallbacks<T>): void;
|
|
151
151
|
|
|
152
152
|
/**
|
|
153
153
|
* @file This file contains a utility function for canceling a pending EVM transaction.
|
|
@@ -206,7 +206,7 @@ type InitializeTrackerParams<T extends Transaction> = Pick<ITxTrackingStore<T>,
|
|
|
206
206
|
config: Config;
|
|
207
207
|
tx: T;
|
|
208
208
|
tracker: TransactionTracker;
|
|
209
|
-
} &
|
|
209
|
+
} & TrackerCallbacks<T>;
|
|
210
210
|
/**
|
|
211
211
|
* Initializes the appropriate tracker for a given transaction based on its `tracker` type.
|
|
212
212
|
* This function acts as a central router, delegating to the specific tracker implementation
|
|
@@ -216,7 +216,7 @@ type InitializeTrackerParams<T extends Transaction> = Pick<ITxTrackingStore<T>,
|
|
|
216
216
|
* @param {InitializeTrackerParams<T>} params - The parameters for initializing the tracker.
|
|
217
217
|
* @returns {Promise<void>} A promise that resolves once the tracking process has been successfully initiated.
|
|
218
218
|
*/
|
|
219
|
-
declare function checkAndInitializeTrackerInStore<T extends Transaction>({ tracker, tx, config, transactionsPool,
|
|
219
|
+
declare function checkAndInitializeTrackerInStore<T extends Transaction>({ tracker, tx, config, transactionsPool, onSuccess, onError, onReplaced, ...rest }: InitializeTrackerParams<T>): Promise<void>;
|
|
220
220
|
|
|
221
221
|
/**
|
|
222
222
|
* @file This file contains a utility to check if the Gelato Relay service is available for a specific chain.
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
'use strict';var orbitCore=require('@tuwaio/orbit-core'),orbitEvm=require('@tuwaio/orbit-evm'),pulsarCore=require('@tuwaio/pulsar-core'),core=require('@wagmi/core'),viem=require('viem'),actions=require('viem/actions'),m=require('dayjs'),chains=require('viem/chains');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var m__default=/*#__PURE__*/_interopDefault(m);var v=1.15;async function C({config:t,tx:e}){if(e.adapter!==orbitCore.OrbitAdapter.EVM)throw new Error(`Cancellation is only available for EVM transactions. Received adapter type: '${e.adapter}'.`);let{nonce:r,maxFeePerGas:o,maxPriorityFeePerGas:s,chainId:a}=e;if(r===void 0||!o||!s)throw new Error("Transaction is missing required fields for cancellation (nonce, maxFeePerGas, maxPriorityFeePerGas).");try{if(!t)throw new Error("Wagmi config is not provided.");let n=core.getAccount(t);if(!n.address)throw new Error("No connected account found.");let i=BigInt(Math.ceil(Number(s)*v)),c=BigInt(Math.ceil(Number(o)*v));return await core.sendTransaction(t,{to:n.address,value:0n,chainId:a,nonce:r,maxFeePerGas:c,maxPriorityFeePerGas:i})}catch(n){let i=n instanceof Error?n.message:String(n);throw new Error(`Failed to cancel transaction: ${i}`)}}var de=10,ue=3e3;async function me(t){let{tx:e,config:r,onInitialize:o,onTxDetailsFetched:s,onSuccess:a,onFailure:n,onReplaced:i,retryCount:c=de,retryTimeout:p=ue,waitForTransactionReceiptParams:d}=t;if(o?.(),e.txKey===viem.zeroHash)return n(new Error("Transaction hash cannot be the zero hash."));let l=core.getClient(r,{chainId:e.chainId});if(!l)return n(new Error(`Could not create a viem client for chainId: ${e.chainId}`));let f=null;for(let u=0;u<c;u++)try{f=await actions.getTransaction(l,{hash:e.txKey}),s(f);break}catch(T){if(u===c-1)return console.error(`EVM tracker failed to fetch tx ${e.txKey} after ${c} retries:`,T),n(T);await new Promise(b=>setTimeout(b,p));}if(!f)return n(new Error("Transaction details could not be fetched."));try{let u=!1,T=await actions.waitForTransactionReceipt(l,{hash:f.hash,onReplaced:b=>{u=!0,i(b);},...d});if(u)return;await a(f,T,l);}catch(u){console.error(`Error waiting for receipt for tx ${e.txKey}:`,u),n(u);}}async function y(t){let{tx:e,config:r,updateTxParams:o,transactionsPool:s,onSuccessCallback:a}=t;return me({tx:e,config:r,onInitialize:()=>{o(e.txKey,{hash:e.txKey});},onTxDetailsFetched:n=>{o(e.txKey,{to:n.to??void 0,input:n.input,value:n.value?.toString(),nonce:n.nonce,maxFeePerGas:n.maxFeePerGas?.toString(),maxPriorityFeePerGas:n.maxPriorityFeePerGas?.toString()});},onSuccess:async(n,i,c)=>{let p=await actions.getBlock(c,{blockNumber:i.blockNumber}),d=Number(p.timestamp),l=i.status==="success";o(e.txKey,{status:l?pulsarCore.TransactionStatus.Success:pulsarCore.TransactionStatus.Failed,isError:!l,pending:false,finishedTimestamp:d});let f=s[e.txKey];l&&a&&f&&a(f);},onReplaced:n=>{o(e.txKey,{status:pulsarCore.TransactionStatus.Replaced,replacedTxHash:n.transaction.hash,pending:false});},onFailure:n=>{o(e.txKey,{status:pulsarCore.TransactionStatus.Failed,pending:false,isError:true,errorMessage:n instanceof Error?n.message:"Transaction failed or could not be tracked."});}})}function R(t){return typeof t=="object"&&t!==null&&"taskId"in t}var he=(i=>(i.CheckPending="CheckPending",i.ExecPending="ExecPending",i.WaitingForConfirmation="WaitingForConfirmation",i.ExecSuccess="ExecSuccess",i.ExecReverted="ExecReverted",i.Cancelled="Cancelled",i.NotFound="NotFound",i))(he||{}),xe="https://api.gelato.digital/tasks/status/",F=new Set(["ExecReverted","Cancelled","NotFound"]);function ge(t){return t!=="ExecSuccess"&&!F.has(t)}var ke=async({tx:t,stopPolling:e,onSuccess:r,onFailure:o,onIntervalTick:s})=>{let a=await fetch(`${xe}${t.txKey}`);if(!a.ok){if(a.status===404){o(),e();return}throw new Error(`Gelato API responded with status: ${a.status}`)}let n=await a.json(),{taskState:i,creationDate:c}=n.task;if(s?.(n),c&&m__default.default().diff(m__default.default(c),"hour")>=1&&ge(i)){e();return}i==="ExecSuccess"?(r(n),e({withoutRemoving:true})):F.has(i)&&(o(n),e({withoutRemoving:true}));};function I({tx:t,updateTxParams:e,removeTxFromPool:r,transactionsPool:o,onSuccessCallback:s}){return pulsarCore.initializePollingTracker({tx:t,fetcher:ke,removeTxFromPool:r,onSuccess:a=>{e(t.txKey,{status:pulsarCore.TransactionStatus.Success,pending:false,isError:false,hash:a.task.transactionHash,finishedTimestamp:a.task.executionDate?m__default.default(a.task.executionDate).unix():void 0});let n=o[t.txKey];s&&n&&s(n);},onIntervalTick:a=>{e(t.txKey,{hash:a.task.transactionHash});},onFailure:a=>{e(t.txKey,{status:pulsarCore.TransactionStatus.Failed,pending:false,isError:true,hash:a?.task.transactionHash,errorMessage:a?.task.lastCheckMessage??"Transaction failed or was not found.",finishedTimestamp:a?.task.executionDate?m__default.default(a.task.executionDate).unix():void 0});}})}var ft={allowedDomains:[/gnosis-safe.io$/,/app.safe.global$/,/metissafe.tech$/],debug:false},B={[chains.mainnet.id]:"https://app.safe.global/eth:",[chains.goerli.id]:"https://app.safe.global/gor:",[chains.sepolia.id]:"https://app.safe.global/sep:",[chains.polygon.id]:"https://app.safe.global/matic:",[chains.arbitrum.id]:"https://app.safe.global/arb1:",[chains.aurora.id]:"https://app.safe.global/aurora:",[chains.avalanche.id]:"https://app.safe.global/avax:",[chains.base.id]:"https://app.safe.global/base:",[chains.boba.id]:"https://app.safe.global/boba:",[chains.bsc.id]:"https://app.safe.global/bnb:",[chains.celo.id]:"https://app.safe.global/celo:",[chains.gnosis.id]:"https://app.safe.global/gno:",[chains.optimism.id]:"https://app.safe.global/oeth:",[chains.polygonZkEvm.id]:"https://app.safe.global/zkevm:",[chains.zksync.id]:"https://app.safe.global/zksync:"},W={[chains.mainnet.id]:"https://safe-transaction-mainnet.safe.global/api/v1",[chains.goerli.id]:"https://safe-transaction-goerli.safe.global/api/v1",[chains.sepolia.id]:"https://safe-transaction-sepolia.safe.global/api/v1",[chains.polygon.id]:"https://safe-transaction-polygon.safe.global/api/v1",[chains.arbitrum.id]:"https://safe-transaction-arbitrum.safe.global/api/v1",[chains.aurora.id]:"https://safe-transaction-aurora.safe.global/api/v1",[chains.avalanche.id]:"https://safe-transaction-avalanche.safe.global/api/v1",[chains.base.id]:"https://safe-transaction-base.safe.global/api/v1",[chains.boba.id]:"https://safe-transaction-boba.safe.global/api/v1",[chains.bsc.id]:"https://safe-transaction-bsc.safe.global/api/v1",[chains.celo.id]:"https://safe-transaction-celo.safe.global/api/v1",[chains.gnosis.id]:"https://safe-transaction-gnosis-chain.safe.global/api/v1",[chains.optimism.id]:"https://safe-transaction-optimism.safe.global/api/v1",[chains.polygonZkEvm.id]:"https://safe-transaction-zkevm.safe.global/api/v1",[chains.zksync.id]:"https://safe-transaction-zksync.safe.global/api/v1"};var Ee=async({tx:t,stopPolling:e,onSuccess:r,onFailure:o,onReplaced:s,onIntervalTick:a})=>{let n=W[t.chainId];if(!n)throw new Error(`Safe Transaction Service URL not found for chainId: ${t.chainId}`);let i=await fetch(`${n}/multisig-transactions/${t.txKey}/`);if(!i.ok)throw i.status===404&&(o(),e()),new Error(`Safe API responded with status: ${i.status}`);let c=await i.json();if(a?.(c),c.isExecuted){c.isSuccessful?r(c):o(c),e({withoutRemoving:true});return}let p=await fetch(`${n}/safes/${t.from}/multisig-transactions/?nonce=${c.nonce}`);if(!p.ok)throw new Error(`Safe API (nonce check) responded with status: ${p.status}`);let l=(await p.json()).results.find(f=>f.isExecuted);if(l){s?.(l),e({withoutRemoving:true});return}m__default.default().diff(m__default.default(c.submissionDate),"day")>=1&&e();};function Y({tx:t,updateTxParams:e,removeTxFromPool:r,transactionsPool:o,onSuccessCallback:s}){return pulsarCore.initializePollingTracker({tx:t,fetcher:Ee,removeTxFromPool:r,onSuccess:a=>{e(t.txKey,{status:pulsarCore.TransactionStatus.Success,pending:false,isError:false,hash:a.transactionHash??void 0,finishedTimestamp:a.executionDate?m__default.default(a.executionDate).unix():void 0});let n=o[t.txKey];s&&n&&s(n);},onIntervalTick:a=>{e(t.txKey,{hash:a.transactionHash??void 0});},onFailure:a=>{e(t.txKey,{status:pulsarCore.TransactionStatus.Failed,pending:false,isError:true,hash:a?.transactionHash??void 0,errorMessage:a?"Safe transaction failed or was rejected.":"Transaction not found.",finishedTimestamp:a?.executionDate?m__default.default(a.executionDate).unix():void 0});},onReplaced:a=>{e(t.txKey,{status:pulsarCore.TransactionStatus.Replaced,pending:false,hash:t.adapter===orbitCore.OrbitAdapter.EVM?t.hash:viem.zeroHash,replacedTxHash:a.safeTxHash??viem.zeroHash,finishedTimestamp:a.executionDate?m__default.default(a.executionDate).unix():void 0});}})}async function J({tracker:t,tx:e,config:r,transactionsPool:o,onSuccessCallback:s,...a}){switch(t){case pulsarCore.TransactionTracker.Ethereum:return y({tx:e,config:r,transactionsPool:o,onSuccessCallback:s,...a});case pulsarCore.TransactionTracker.Gelato:return I({tx:e,transactionsPool:o,onSuccessCallback:s,...a});case pulsarCore.TransactionTracker.Safe:return Y({tx:e,transactionsPool:o,onSuccessCallback:s,...a});default:return console.warn(`Unknown tracker type: '${t}'. Falling back to default EVM tracker.`),y({tx:e,config:r,transactionsPool:o,onSuccessCallback:s,...a})}}function Z(t,e){if(R(t))return {tracker:pulsarCore.TransactionTracker.Gelato,txKey:t.taskId};if(!viem.isHex(t))throw new Error(`Invalid transaction key format. Expected a Hex string or a GelatoTxKey object, but received: ${JSON.stringify(t)}`);let r=e.split(":");return (r.length>1?r[r.length-1]==="safe"||r[r.length-1]==="safewallet":e?.toLowerCase()==="safe")?{tracker:pulsarCore.TransactionTracker.Safe,txKey:t}:{tracker:pulsarCore.TransactionTracker.Ethereum,txKey:t}}var X=({chains:t,tx:e})=>{if(e.tracker===pulsarCore.TransactionTracker.Safe){let a=B[e.chainId];return a?`${a}${e.from}/transactions/tx?id=multisig_${e.from}_${e.txKey}`:""}let o=t.find(a=>a.id===e.chainId)?.blockExplorers?.default.url;if(!o)return "";let s=(e.adapter===orbitCore.OrbitAdapter.EVM?e.replacedTxHash:e.txKey)||(e.adapter===orbitCore.OrbitAdapter.EVM?e.hash:e.txKey);return s?`${o}/tx/${s}`:""};var ee=1.15;async function te({config:t,tx:e}){if(e.adapter!==orbitCore.OrbitAdapter.EVM)throw new Error(`Speed up is only available for EVM transactions. Received adapter type: '${e.adapter}'.`);let{nonce:r,from:o,to:s,value:a,input:n,maxFeePerGas:i,maxPriorityFeePerGas:c,chainId:p}=e;if(r===void 0||!o||!s||!a||!i||!c)throw new Error("Transaction is missing required fields for speed-up.");try{if(!t)throw new Error("Wagmi config is not provided.");if(!core.getAccount(t).address)throw new Error("No connected account found.");let l=BigInt(Math.ceil(Number(c)*ee)),f=BigInt(Math.ceil(Number(i)*ee));return await core.sendTransaction(t,{to:s,value:BigInt(a),data:n||"0x",chainId:p,nonce:r,maxFeePerGas:f,maxPriorityFeePerGas:l})}catch(d){let l=d instanceof Error?d.message:String(d);throw new Error(`Failed to speed up transaction: ${l}`)}}function oa(t,e){if(!t)throw new Error("EVM adapter requires a wagmi config object.");return {key:orbitCore.OrbitAdapter.EVM,getConnectorInfo:()=>{let r=core.getConnection(t),o=orbitCore.lastConnectedConnectorHelpers.getLastConnectedConnector();return {walletAddress:r.address??o?.address??viem.zeroAddress,connectorType:orbitCore.getConnectorTypeFromName(orbitCore.OrbitAdapter.EVM,r.connector?.name?.toLowerCase()??"unknown")}},checkChainForTx:r=>orbitEvm.checkAndSwitchChain(r,t),checkTransactionsTracker:(r,o)=>Z(r,o),checkAndInitializeTrackerInStore:({tx:r,...o})=>J({tracker:r.tracker,tx:r,config:t,...o}),getExplorerUrl:r=>{let{chain:o}=core.getConnection(t),s=o?.blockExplorers?.default.url;return r?`${s}/${r}`:s},getExplorerTxUrl:r=>X({chains:e,tx:r}),cancelTxAction:r=>C({config:t,tx:r}),speedUpTxAction:r=>te({config:t,tx:r}),retryTxAction:async({onClose:r,txKey:o,executeTxAction:s,tx:a})=>{if(r(o),!s){console.error("Retry failed: executeTxAction function is not provided.");return}await s({actionFunction:()=>a.actionFunction({config:t,...a.payload}),params:a,defaultTracker:pulsarCore.TransactionTracker.Ethereum});}}}var g=null,k=null,He=300*1e3,Ke="https://relay.gelato.digital/relays/v2/supported-chains";async function ia(t){let e=Date.now();if(g&&k&&e-k<He)return g.includes(t);try{let r=await fetch(Ke);if(!r.ok)throw new Error(`Gelato API responded with status: ${r.status}`);let s=(await r.json()).chains.map(Number);return g=s,k=e,s.includes(t)}catch(r){return console.error("Failed to fetch Gelato supported chains:",r),g=null,k=null,false}}
|
|
2
|
-
exports.GelatoTaskState=he;exports.SafeTransactionServiceUrls=W;exports.cancelTxAction=C;exports.checkAndInitializeTrackerInStore=J;exports.checkIsGelatoAvailable=ia;exports.checkTransactionsTracker=Z;exports.evmTracker=me;exports.evmTrackerForStore=y;exports.gelatoFetcher=ke;exports.gelatoTrackerForStore=
|
|
1
|
+
'use strict';var orbitCore=require('@tuwaio/orbit-core'),orbitEvm=require('@tuwaio/orbit-evm'),pulsarCore=require('@tuwaio/pulsar-core'),core=require('@wagmi/core'),viem=require('viem'),actions=require('viem/actions'),T=require('dayjs'),chains=require('viem/chains');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var T__default=/*#__PURE__*/_interopDefault(T);var v=1.15;async function C({config:t,tx:e}){if(e.adapter!==orbitCore.OrbitAdapter.EVM)throw new Error(`Cancellation is only available for EVM transactions. Received adapter type: '${e.adapter}'.`);let{nonce:a,maxFeePerGas:s,maxPriorityFeePerGas:i,chainId:c}=e;if(a===void 0||!s||!i)throw new Error("Transaction is missing required fields for cancellation (nonce, maxFeePerGas, maxPriorityFeePerGas).");try{if(!t)throw new Error("Wagmi config is not provided.");let n=core.getAccount(t);if(!n.address)throw new Error("No connected account found.");let r=BigInt(Math.ceil(Number(i)*v)),o=BigInt(Math.ceil(Number(s)*v));return await core.sendTransaction(t,{to:n.address,value:0n,chainId:c,nonce:a,maxFeePerGas:o,maxPriorityFeePerGas:r})}catch(n){let r=n instanceof Error?n.message:String(n);throw new Error(`Failed to cancel transaction: ${r}`)}}var de=10,ue=3e3;async function me(t){let{tx:e,config:a,onInitialize:s,onTxDetailsFetched:i,onSuccess:c,onFailure:n,onReplaced:r,retryCount:o=de,retryTimeout:l=ue,waitForTransactionReceiptParams:u}=t;if(s?.(),e.txKey===viem.zeroHash)return n(new Error("Transaction hash cannot be the zero hash."));let p=core.getClient(a,{chainId:e.chainId});if(!p)return n(new Error(`Could not create a viem client for chainId: ${e.chainId}`));let d=null;for(let f=0;f<o;f++)try{d=await actions.getTransaction(p,{hash:e.txKey}),i(d);break}catch(m){if(f===o-1)return console.error(`EVM tracker failed to fetch tx ${e.txKey} after ${o} retries:`,m),n(m);await new Promise(b=>setTimeout(b,l));}if(!d)return n(new Error("Transaction details could not be fetched."));try{let f=!1,m=await actions.waitForTransactionReceipt(p,{hash:d.hash,onReplaced:b=>{f=!0,r(b);},...u});if(f)return;await c(d,m,p);}catch(f){console.error(`Error waiting for receipt for tx ${e.txKey}:`,f),n(f);}}async function y(t){let{tx:e,config:a,updateTxParams:s,transactionsPool:i,onSuccess:c,onError:n,onReplaced:r}=t;return me({tx:e,config:a,onInitialize:()=>{s(e.txKey,{hash:e.txKey});},onTxDetailsFetched:o=>{s(e.txKey,{to:o.to??void 0,input:o.input,value:o.value?.toString(),nonce:o.nonce,maxFeePerGas:o.maxFeePerGas?.toString(),maxPriorityFeePerGas:o.maxPriorityFeePerGas?.toString()});},onSuccess:async(o,l,u)=>{let p=await actions.getBlock(u,{blockNumber:l.blockNumber}),d=Number(p.timestamp),f=l.status==="success";s(e.txKey,{status:f?pulsarCore.TransactionStatus.Success:pulsarCore.TransactionStatus.Failed,isError:!f,pending:false,finishedTimestamp:d});let m=i[e.txKey];f&&c&&m&&c(m),!f&&n&&m&&n(new Error("Transaction reverted"),m);},onReplaced:o=>{s(e.txKey,{status:pulsarCore.TransactionStatus.Replaced,replacedTxHash:o.transaction.hash,pending:false});let l=i[e.txKey];r&&l&&r(l,e);},onFailure:o=>{s(e.txKey,{status:pulsarCore.TransactionStatus.Failed,pending:false,isError:true,errorMessage:o instanceof Error?o.message:"Transaction failed or could not be tracked."});let l=i[e.txKey];n&&l&&n(o,l);}})}function F(t){return typeof t=="object"&&t!==null&&"taskId"in t}var he=(r=>(r.CheckPending="CheckPending",r.ExecPending="ExecPending",r.WaitingForConfirmation="WaitingForConfirmation",r.ExecSuccess="ExecSuccess",r.ExecReverted="ExecReverted",r.Cancelled="Cancelled",r.NotFound="NotFound",r))(he||{}),xe="https://api.gelato.digital/tasks/status/",I=new Set(["ExecReverted","Cancelled","NotFound"]);function ge(t){return t!=="ExecSuccess"&&!I.has(t)}var ke=async({tx:t,stopPolling:e,onSuccess:a,onFailure:s,onIntervalTick:i})=>{let c=await fetch(`${xe}${t.txKey}`);if(!c.ok){if(c.status===404){s(),e();return}throw new Error(`Gelato API responded with status: ${c.status}`)}let n=await c.json(),{taskState:r,creationDate:o}=n.task;if(i?.(n),o&&T__default.default().diff(T__default.default(o),"hour")>=1&&ge(r)){e();return}r==="ExecSuccess"?(a(n),e({withoutRemoving:true})):I.has(r)&&(s(n),e({withoutRemoving:true}));};function P({tx:t,updateTxParams:e,removeTxFromPool:a,transactionsPool:s,onSuccess:i,onError:c}){return pulsarCore.initializePollingTracker({tx:t,fetcher:ke,removeTxFromPool:a,onSuccess:n=>{e(t.txKey,{status:pulsarCore.TransactionStatus.Success,pending:false,isError:false,hash:n.task.transactionHash,finishedTimestamp:n.task.executionDate?T__default.default(n.task.executionDate).unix():void 0});let r=s[t.txKey];i&&r&&i(r);},onIntervalTick:n=>{e(t.txKey,{hash:n.task.transactionHash});},onFailure:n=>{let r=n?.task.lastCheckMessage??"Transaction failed or was not found.";e(t.txKey,{status:pulsarCore.TransactionStatus.Failed,pending:false,isError:true,hash:n?.task.transactionHash,errorMessage:r,finishedTimestamp:n?.task.executionDate?T__default.default(n.task.executionDate).unix():void 0});let o=s[t.txKey];c&&o&&c(new Error(r),o);}})}var ft={allowedDomains:[/gnosis-safe.io$/,/app.safe.global$/,/metissafe.tech$/],debug:false},B={[chains.mainnet.id]:"https://app.safe.global/eth:",[chains.goerli.id]:"https://app.safe.global/gor:",[chains.sepolia.id]:"https://app.safe.global/sep:",[chains.polygon.id]:"https://app.safe.global/matic:",[chains.arbitrum.id]:"https://app.safe.global/arb1:",[chains.aurora.id]:"https://app.safe.global/aurora:",[chains.avalanche.id]:"https://app.safe.global/avax:",[chains.base.id]:"https://app.safe.global/base:",[chains.boba.id]:"https://app.safe.global/boba:",[chains.bsc.id]:"https://app.safe.global/bnb:",[chains.celo.id]:"https://app.safe.global/celo:",[chains.gnosis.id]:"https://app.safe.global/gno:",[chains.optimism.id]:"https://app.safe.global/oeth:",[chains.polygonZkEvm.id]:"https://app.safe.global/zkevm:",[chains.zksync.id]:"https://app.safe.global/zksync:"},W={[chains.mainnet.id]:"https://safe-transaction-mainnet.safe.global/api/v1",[chains.goerli.id]:"https://safe-transaction-goerli.safe.global/api/v1",[chains.sepolia.id]:"https://safe-transaction-sepolia.safe.global/api/v1",[chains.polygon.id]:"https://safe-transaction-polygon.safe.global/api/v1",[chains.arbitrum.id]:"https://safe-transaction-arbitrum.safe.global/api/v1",[chains.aurora.id]:"https://safe-transaction-aurora.safe.global/api/v1",[chains.avalanche.id]:"https://safe-transaction-avalanche.safe.global/api/v1",[chains.base.id]:"https://safe-transaction-base.safe.global/api/v1",[chains.boba.id]:"https://safe-transaction-boba.safe.global/api/v1",[chains.bsc.id]:"https://safe-transaction-bsc.safe.global/api/v1",[chains.celo.id]:"https://safe-transaction-celo.safe.global/api/v1",[chains.gnosis.id]:"https://safe-transaction-gnosis-chain.safe.global/api/v1",[chains.optimism.id]:"https://safe-transaction-optimism.safe.global/api/v1",[chains.polygonZkEvm.id]:"https://safe-transaction-zkevm.safe.global/api/v1",[chains.zksync.id]:"https://safe-transaction-zksync.safe.global/api/v1"};var Ee=async({tx:t,stopPolling:e,onSuccess:a,onFailure:s,onReplaced:i,onIntervalTick:c})=>{let n=W[t.chainId];if(!n)throw new Error(`Safe Transaction Service URL not found for chainId: ${t.chainId}`);let r=await fetch(`${n}/multisig-transactions/${t.txKey}/`);if(!r.ok)throw r.status===404&&(s(),e()),new Error(`Safe API responded with status: ${r.status}`);let o=await r.json();if(c?.(o),o.isExecuted){o.isSuccessful?a(o):s(o),e({withoutRemoving:true});return}let l=await fetch(`${n}/safes/${t.from}/multisig-transactions/?nonce=${o.nonce}`);if(!l.ok)throw new Error(`Safe API (nonce check) responded with status: ${l.status}`);let p=(await l.json()).results.find(d=>d.isExecuted);if(p){i?.(p),e({withoutRemoving:true});return}T__default.default().diff(T__default.default(o.submissionDate),"day")>=1&&e();};function Y({tx:t,updateTxParams:e,removeTxFromPool:a,transactionsPool:s,onSuccess:i,onError:c,onReplaced:n}){return pulsarCore.initializePollingTracker({tx:t,fetcher:Ee,removeTxFromPool:a,onSuccess:r=>{e(t.txKey,{status:pulsarCore.TransactionStatus.Success,pending:false,isError:false,hash:r.transactionHash??void 0,finishedTimestamp:r.executionDate?T__default.default(r.executionDate).unix():void 0});let o=s[t.txKey];i&&o&&i(o);},onIntervalTick:r=>{e(t.txKey,{hash:r.transactionHash??void 0});},onFailure:r=>{let o=r?"Safe transaction failed or was rejected.":"Transaction not found.";e(t.txKey,{status:pulsarCore.TransactionStatus.Failed,pending:false,isError:true,hash:r?.transactionHash??void 0,errorMessage:o,finishedTimestamp:r?.executionDate?T__default.default(r.executionDate).unix():void 0});let l=s[t.txKey];c&&l&&c(new Error(o),l);},onReplaced:r=>{e(t.txKey,{status:pulsarCore.TransactionStatus.Replaced,pending:false,hash:t.adapter===orbitCore.OrbitAdapter.EVM?t.hash:viem.zeroHash,replacedTxHash:r.safeTxHash??viem.zeroHash,finishedTimestamp:r.executionDate?T__default.default(r.executionDate).unix():void 0});let o=s[t.txKey];n&&o&&n(o,t);}})}async function J({tracker:t,tx:e,config:a,transactionsPool:s,onSuccess:i,onError:c,onReplaced:n,...r}){switch(t){case pulsarCore.TransactionTracker.Ethereum:return y({tx:e,config:a,transactionsPool:s,onSuccess:i,onError:c,onReplaced:n,...r});case pulsarCore.TransactionTracker.Gelato:return P({tx:e,transactionsPool:s,onSuccess:i,onError:c,...r});case pulsarCore.TransactionTracker.Safe:return Y({tx:e,transactionsPool:s,onSuccess:i,onError:c,onReplaced:n,...r});default:return console.warn(`Unknown tracker type: '${t}'. Falling back to default EVM tracker.`),y({tx:e,config:a,transactionsPool:s,onSuccess:i,onError:c,onReplaced:n,...r})}}function Z(t,e){if(F(t))return {tracker:pulsarCore.TransactionTracker.Gelato,txKey:t.taskId};if(!viem.isHex(t))throw new Error(`Invalid transaction key format. Expected a Hex string or a GelatoTxKey object, but received: ${JSON.stringify(t)}`);let a=e.split(":");return (a.length>1?a[a.length-1]==="safe"||a[a.length-1]==="safewallet":e?.toLowerCase()==="safe")?{tracker:pulsarCore.TransactionTracker.Safe,txKey:t}:{tracker:pulsarCore.TransactionTracker.Ethereum,txKey:t}}var X=({chains:t,tx:e})=>{if(e.tracker===pulsarCore.TransactionTracker.Safe){let c=B[e.chainId];return c?`${c}${e.from}/transactions/tx?id=multisig_${e.from}_${e.txKey}`:""}let s=t.find(c=>c.id===e.chainId)?.blockExplorers?.default.url;if(!s)return "";let i=(e.adapter===orbitCore.OrbitAdapter.EVM?e.replacedTxHash:e.txKey)||(e.adapter===orbitCore.OrbitAdapter.EVM?e.hash:e.txKey);return i?`${s}/tx/${i}`:""};var ee=1.15;async function te({config:t,tx:e}){if(e.adapter!==orbitCore.OrbitAdapter.EVM)throw new Error(`Speed up is only available for EVM transactions. Received adapter type: '${e.adapter}'.`);let{nonce:a,from:s,to:i,value:c,input:n,maxFeePerGas:r,maxPriorityFeePerGas:o,chainId:l}=e;if(a===void 0||!s||!i||!c||!r||!o)throw new Error("Transaction is missing required fields for speed-up.");try{if(!t)throw new Error("Wagmi config is not provided.");if(!core.getAccount(t).address)throw new Error("No connected account found.");let p=BigInt(Math.ceil(Number(o)*ee)),d=BigInt(Math.ceil(Number(r)*ee));return await core.sendTransaction(t,{to:i,value:BigInt(c),data:n||"0x",chainId:l,nonce:a,maxFeePerGas:d,maxPriorityFeePerGas:p})}catch(u){let p=u instanceof Error?u.message:String(u);throw new Error(`Failed to speed up transaction: ${p}`)}}function oa(t,e){if(!t)throw new Error("EVM adapter requires a wagmi config object.");return {key:orbitCore.OrbitAdapter.EVM,getConnectorInfo:()=>{let a=core.getConnection(t),s=orbitCore.lastConnectedConnectorHelpers.getLastConnectedConnector();return {walletAddress:a.address??s?.address??viem.zeroAddress,connectorType:orbitCore.getConnectorTypeFromName(orbitCore.OrbitAdapter.EVM,a.connector?.name?.toLowerCase()??"unknown")}},checkChainForTx:a=>orbitEvm.checkAndSwitchChain(a,t),checkTransactionsTracker:(a,s)=>Z(a,s),checkAndInitializeTrackerInStore:({tx:a,...s})=>J({tracker:a.tracker,tx:a,config:t,...s}),getExplorerUrl:a=>{let{chain:s}=core.getConnection(t),i=s?.blockExplorers?.default.url;return a?`${i}/${a}`:i},getExplorerTxUrl:a=>X({chains:e,tx:a}),cancelTxAction:a=>C({config:t,tx:a}),speedUpTxAction:a=>te({config:t,tx:a}),retryTxAction:async({onClose:a,txKey:s,executeTxAction:i,tx:c})=>{if(a(s),!i){console.error("Retry failed: executeTxAction function is not provided.");return}await i({actionFunction:()=>c.actionFunction({config:t,...c.payload}),params:c,defaultTracker:pulsarCore.TransactionTracker.Ethereum});}}}var g=null,k=null,Ke=300*1e3,He="https://relay.gelato.digital/relays/v2/supported-chains";async function ia(t){let e=Date.now();if(g&&k&&e-k<Ke)return g.includes(t);try{let a=await fetch(He);if(!a.ok)throw new Error(`Gelato API responded with status: ${a.status}`);let i=(await a.json()).chains.map(Number);return g=i,k=e,i.includes(t)}catch(a){return console.error("Failed to fetch Gelato supported chains:",a),g=null,k=null,false}}
|
|
2
|
+
exports.GelatoTaskState=he;exports.SafeTransactionServiceUrls=W;exports.cancelTxAction=C;exports.checkAndInitializeTrackerInStore=J;exports.checkIsGelatoAvailable=ia;exports.checkTransactionsTracker=Z;exports.evmTracker=me;exports.evmTrackerForStore=y;exports.gelatoFetcher=ke;exports.gelatoTrackerForStore=P;exports.gnosisSafeLinksHelper=B;exports.isGelatoTxKey=F;exports.pulsarEvmAdapter=oa;exports.safeFetcher=Ee;exports.safeSdkOptions=ft;exports.safeTrackerForStore=Y;exports.selectEvmTxExplorerLink=X;exports.speedUpTxAction=te;
|
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {OrbitAdapter,lastConnectedConnectorHelpers,getConnectorTypeFromName}from'@tuwaio/orbit-core';import {checkAndSwitchChain}from'@tuwaio/orbit-evm';import {TransactionStatus,initializePollingTracker,TransactionTracker}from'@tuwaio/pulsar-core';import {getAccount,sendTransaction,getClient,getConnection}from'@wagmi/core';import {zeroHash,isHex,zeroAddress}from'viem';import {getTransaction,waitForTransactionReceipt,getBlock}from'viem/actions';import m from'dayjs';import {zksync,polygonZkEvm,optimism,gnosis,celo,bsc,boba,base,avalanche,aurora,arbitrum,polygon,sepolia,goerli,mainnet}from'viem/chains';var v=1.15;async function C({config:t,tx:e}){if(e.adapter!==OrbitAdapter.EVM)throw new Error(`Cancellation is only available for EVM transactions. Received adapter type: '${e.adapter}'.`);let{nonce:r,maxFeePerGas:o,maxPriorityFeePerGas:s,chainId:a}=e;if(r===void 0||!o||!s)throw new Error("Transaction is missing required fields for cancellation (nonce, maxFeePerGas, maxPriorityFeePerGas).");try{if(!t)throw new Error("Wagmi config is not provided.");let n=getAccount(t);if(!n.address)throw new Error("No connected account found.");let i=BigInt(Math.ceil(Number(s)*v)),c=BigInt(Math.ceil(Number(o)*v));return await sendTransaction(t,{to:n.address,value:0n,chainId:a,nonce:r,maxFeePerGas:c,maxPriorityFeePerGas:i})}catch(n){let i=n instanceof Error?n.message:String(n);throw new Error(`Failed to cancel transaction: ${i}`)}}var de=10,ue=3e3;async function me(t){let{tx:e,config:r,onInitialize:o,onTxDetailsFetched:s,onSuccess:a,onFailure:n,onReplaced:i,retryCount:c=de,retryTimeout:p=ue,waitForTransactionReceiptParams:d}=t;if(o?.(),e.txKey===zeroHash)return n(new Error("Transaction hash cannot be the zero hash."));let l=getClient(r,{chainId:e.chainId});if(!l)return n(new Error(`Could not create a viem client for chainId: ${e.chainId}`));let f=null;for(let u=0;u<c;u++)try{f=await getTransaction(l,{hash:e.txKey}),s(f);break}catch(T){if(u===c-1)return console.error(`EVM tracker failed to fetch tx ${e.txKey} after ${c} retries:`,T),n(T);await new Promise(b=>setTimeout(b,p));}if(!f)return n(new Error("Transaction details could not be fetched."));try{let u=!1,T=await waitForTransactionReceipt(l,{hash:f.hash,onReplaced:b=>{u=!0,i(b);},...d});if(u)return;await a(f,T,l);}catch(u){console.error(`Error waiting for receipt for tx ${e.txKey}:`,u),n(u);}}async function y(t){let{tx:e,config:r,updateTxParams:o,transactionsPool:s,onSuccessCallback:a}=t;return me({tx:e,config:r,onInitialize:()=>{o(e.txKey,{hash:e.txKey});},onTxDetailsFetched:n=>{o(e.txKey,{to:n.to??void 0,input:n.input,value:n.value?.toString(),nonce:n.nonce,maxFeePerGas:n.maxFeePerGas?.toString(),maxPriorityFeePerGas:n.maxPriorityFeePerGas?.toString()});},onSuccess:async(n,i,c)=>{let p=await getBlock(c,{blockNumber:i.blockNumber}),d=Number(p.timestamp),l=i.status==="success";o(e.txKey,{status:l?TransactionStatus.Success:TransactionStatus.Failed,isError:!l,pending:false,finishedTimestamp:d});let f=s[e.txKey];l&&a&&f&&a(f);},onReplaced:n=>{o(e.txKey,{status:TransactionStatus.Replaced,replacedTxHash:n.transaction.hash,pending:false});},onFailure:n=>{o(e.txKey,{status:TransactionStatus.Failed,pending:false,isError:true,errorMessage:n instanceof Error?n.message:"Transaction failed or could not be tracked."});}})}function R(t){return typeof t=="object"&&t!==null&&"taskId"in t}var he=(i=>(i.CheckPending="CheckPending",i.ExecPending="ExecPending",i.WaitingForConfirmation="WaitingForConfirmation",i.ExecSuccess="ExecSuccess",i.ExecReverted="ExecReverted",i.Cancelled="Cancelled",i.NotFound="NotFound",i))(he||{}),xe="https://api.gelato.digital/tasks/status/",F=new Set(["ExecReverted","Cancelled","NotFound"]);function ge(t){return t!=="ExecSuccess"&&!F.has(t)}var ke=async({tx:t,stopPolling:e,onSuccess:r,onFailure:o,onIntervalTick:s})=>{let a=await fetch(`${xe}${t.txKey}`);if(!a.ok){if(a.status===404){o(),e();return}throw new Error(`Gelato API responded with status: ${a.status}`)}let n=await a.json(),{taskState:i,creationDate:c}=n.task;if(s?.(n),c&&m().diff(m(c),"hour")>=1&&ge(i)){e();return}i==="ExecSuccess"?(r(n),e({withoutRemoving:true})):F.has(i)&&(o(n),e({withoutRemoving:true}));};function I({tx:t,updateTxParams:e,removeTxFromPool:r,transactionsPool:o,onSuccessCallback:s}){return initializePollingTracker({tx:t,fetcher:ke,removeTxFromPool:r,onSuccess:a=>{e(t.txKey,{status:TransactionStatus.Success,pending:false,isError:false,hash:a.task.transactionHash,finishedTimestamp:a.task.executionDate?m(a.task.executionDate).unix():void 0});let n=o[t.txKey];s&&n&&s(n);},onIntervalTick:a=>{e(t.txKey,{hash:a.task.transactionHash});},onFailure:a=>{e(t.txKey,{status:TransactionStatus.Failed,pending:false,isError:true,hash:a?.task.transactionHash,errorMessage:a?.task.lastCheckMessage??"Transaction failed or was not found.",finishedTimestamp:a?.task.executionDate?m(a.task.executionDate).unix():void 0});}})}var ft={allowedDomains:[/gnosis-safe.io$/,/app.safe.global$/,/metissafe.tech$/],debug:false},B={[mainnet.id]:"https://app.safe.global/eth:",[goerli.id]:"https://app.safe.global/gor:",[sepolia.id]:"https://app.safe.global/sep:",[polygon.id]:"https://app.safe.global/matic:",[arbitrum.id]:"https://app.safe.global/arb1:",[aurora.id]:"https://app.safe.global/aurora:",[avalanche.id]:"https://app.safe.global/avax:",[base.id]:"https://app.safe.global/base:",[boba.id]:"https://app.safe.global/boba:",[bsc.id]:"https://app.safe.global/bnb:",[celo.id]:"https://app.safe.global/celo:",[gnosis.id]:"https://app.safe.global/gno:",[optimism.id]:"https://app.safe.global/oeth:",[polygonZkEvm.id]:"https://app.safe.global/zkevm:",[zksync.id]:"https://app.safe.global/zksync:"},W={[mainnet.id]:"https://safe-transaction-mainnet.safe.global/api/v1",[goerli.id]:"https://safe-transaction-goerli.safe.global/api/v1",[sepolia.id]:"https://safe-transaction-sepolia.safe.global/api/v1",[polygon.id]:"https://safe-transaction-polygon.safe.global/api/v1",[arbitrum.id]:"https://safe-transaction-arbitrum.safe.global/api/v1",[aurora.id]:"https://safe-transaction-aurora.safe.global/api/v1",[avalanche.id]:"https://safe-transaction-avalanche.safe.global/api/v1",[base.id]:"https://safe-transaction-base.safe.global/api/v1",[boba.id]:"https://safe-transaction-boba.safe.global/api/v1",[bsc.id]:"https://safe-transaction-bsc.safe.global/api/v1",[celo.id]:"https://safe-transaction-celo.safe.global/api/v1",[gnosis.id]:"https://safe-transaction-gnosis-chain.safe.global/api/v1",[optimism.id]:"https://safe-transaction-optimism.safe.global/api/v1",[polygonZkEvm.id]:"https://safe-transaction-zkevm.safe.global/api/v1",[zksync.id]:"https://safe-transaction-zksync.safe.global/api/v1"};var Ee=async({tx:t,stopPolling:e,onSuccess:r,onFailure:o,onReplaced:s,onIntervalTick:a})=>{let n=W[t.chainId];if(!n)throw new Error(`Safe Transaction Service URL not found for chainId: ${t.chainId}`);let i=await fetch(`${n}/multisig-transactions/${t.txKey}/`);if(!i.ok)throw i.status===404&&(o(),e()),new Error(`Safe API responded with status: ${i.status}`);let c=await i.json();if(a?.(c),c.isExecuted){c.isSuccessful?r(c):o(c),e({withoutRemoving:true});return}let p=await fetch(`${n}/safes/${t.from}/multisig-transactions/?nonce=${c.nonce}`);if(!p.ok)throw new Error(`Safe API (nonce check) responded with status: ${p.status}`);let l=(await p.json()).results.find(f=>f.isExecuted);if(l){s?.(l),e({withoutRemoving:true});return}m().diff(m(c.submissionDate),"day")>=1&&e();};function Y({tx:t,updateTxParams:e,removeTxFromPool:r,transactionsPool:o,onSuccessCallback:s}){return initializePollingTracker({tx:t,fetcher:Ee,removeTxFromPool:r,onSuccess:a=>{e(t.txKey,{status:TransactionStatus.Success,pending:false,isError:false,hash:a.transactionHash??void 0,finishedTimestamp:a.executionDate?m(a.executionDate).unix():void 0});let n=o[t.txKey];s&&n&&s(n);},onIntervalTick:a=>{e(t.txKey,{hash:a.transactionHash??void 0});},onFailure:a=>{e(t.txKey,{status:TransactionStatus.Failed,pending:false,isError:true,hash:a?.transactionHash??void 0,errorMessage:a?"Safe transaction failed or was rejected.":"Transaction not found.",finishedTimestamp:a?.executionDate?m(a.executionDate).unix():void 0});},onReplaced:a=>{e(t.txKey,{status:TransactionStatus.Replaced,pending:false,hash:t.adapter===OrbitAdapter.EVM?t.hash:zeroHash,replacedTxHash:a.safeTxHash??zeroHash,finishedTimestamp:a.executionDate?m(a.executionDate).unix():void 0});}})}async function J({tracker:t,tx:e,config:r,transactionsPool:o,onSuccessCallback:s,...a}){switch(t){case TransactionTracker.Ethereum:return y({tx:e,config:r,transactionsPool:o,onSuccessCallback:s,...a});case TransactionTracker.Gelato:return I({tx:e,transactionsPool:o,onSuccessCallback:s,...a});case TransactionTracker.Safe:return Y({tx:e,transactionsPool:o,onSuccessCallback:s,...a});default:return console.warn(`Unknown tracker type: '${t}'. Falling back to default EVM tracker.`),y({tx:e,config:r,transactionsPool:o,onSuccessCallback:s,...a})}}function Z(t,e){if(R(t))return {tracker:TransactionTracker.Gelato,txKey:t.taskId};if(!isHex(t))throw new Error(`Invalid transaction key format. Expected a Hex string or a GelatoTxKey object, but received: ${JSON.stringify(t)}`);let r=e.split(":");return (r.length>1?r[r.length-1]==="safe"||r[r.length-1]==="safewallet":e?.toLowerCase()==="safe")?{tracker:TransactionTracker.Safe,txKey:t}:{tracker:TransactionTracker.Ethereum,txKey:t}}var X=({chains:t,tx:e})=>{if(e.tracker===TransactionTracker.Safe){let a=B[e.chainId];return a?`${a}${e.from}/transactions/tx?id=multisig_${e.from}_${e.txKey}`:""}let o=t.find(a=>a.id===e.chainId)?.blockExplorers?.default.url;if(!o)return "";let s=(e.adapter===OrbitAdapter.EVM?e.replacedTxHash:e.txKey)||(e.adapter===OrbitAdapter.EVM?e.hash:e.txKey);return s?`${o}/tx/${s}`:""};var ee=1.15;async function te({config:t,tx:e}){if(e.adapter!==OrbitAdapter.EVM)throw new Error(`Speed up is only available for EVM transactions. Received adapter type: '${e.adapter}'.`);let{nonce:r,from:o,to:s,value:a,input:n,maxFeePerGas:i,maxPriorityFeePerGas:c,chainId:p}=e;if(r===void 0||!o||!s||!a||!i||!c)throw new Error("Transaction is missing required fields for speed-up.");try{if(!t)throw new Error("Wagmi config is not provided.");if(!getAccount(t).address)throw new Error("No connected account found.");let l=BigInt(Math.ceil(Number(c)*ee)),f=BigInt(Math.ceil(Number(i)*ee));return await sendTransaction(t,{to:s,value:BigInt(a),data:n||"0x",chainId:p,nonce:r,maxFeePerGas:f,maxPriorityFeePerGas:l})}catch(d){let l=d instanceof Error?d.message:String(d);throw new Error(`Failed to speed up transaction: ${l}`)}}function oa(t,e){if(!t)throw new Error("EVM adapter requires a wagmi config object.");return {key:OrbitAdapter.EVM,getConnectorInfo:()=>{let r=getConnection(t),o=lastConnectedConnectorHelpers.getLastConnectedConnector();return {walletAddress:r.address??o?.address??zeroAddress,connectorType:getConnectorTypeFromName(OrbitAdapter.EVM,r.connector?.name?.toLowerCase()??"unknown")}},checkChainForTx:r=>checkAndSwitchChain(r,t),checkTransactionsTracker:(r,o)=>Z(r,o),checkAndInitializeTrackerInStore:({tx:r,...o})=>J({tracker:r.tracker,tx:r,config:t,...o}),getExplorerUrl:r=>{let{chain:o}=getConnection(t),s=o?.blockExplorers?.default.url;return r?`${s}/${r}`:s},getExplorerTxUrl:r=>X({chains:e,tx:r}),cancelTxAction:r=>C({config:t,tx:r}),speedUpTxAction:r=>te({config:t,tx:r}),retryTxAction:async({onClose:r,txKey:o,executeTxAction:s,tx:a})=>{if(r(o),!s){console.error("Retry failed: executeTxAction function is not provided.");return}await s({actionFunction:()=>a.actionFunction({config:t,...a.payload}),params:a,defaultTracker:TransactionTracker.Ethereum});}}}var g=null,k=null,He=300*1e3,Ke="https://relay.gelato.digital/relays/v2/supported-chains";async function ia(t){let e=Date.now();if(g&&k&&e-k<He)return g.includes(t);try{let r=await fetch(Ke);if(!r.ok)throw new Error(`Gelato API responded with status: ${r.status}`);let s=(await r.json()).chains.map(Number);return g=s,k=e,s.includes(t)}catch(r){return console.error("Failed to fetch Gelato supported chains:",r),g=null,k=null,false}}
|
|
2
|
-
export{he as GelatoTaskState,W as SafeTransactionServiceUrls,C as cancelTxAction,J as checkAndInitializeTrackerInStore,ia as checkIsGelatoAvailable,Z as checkTransactionsTracker,me as evmTracker,y as evmTrackerForStore,ke as gelatoFetcher,
|
|
1
|
+
import {OrbitAdapter,lastConnectedConnectorHelpers,getConnectorTypeFromName}from'@tuwaio/orbit-core';import {checkAndSwitchChain}from'@tuwaio/orbit-evm';import {TransactionStatus,initializePollingTracker,TransactionTracker}from'@tuwaio/pulsar-core';import {getAccount,sendTransaction,getClient,getConnection}from'@wagmi/core';import {zeroHash,isHex,zeroAddress}from'viem';import {getTransaction,waitForTransactionReceipt,getBlock}from'viem/actions';import T from'dayjs';import {zksync,polygonZkEvm,optimism,gnosis,celo,bsc,boba,base,avalanche,aurora,arbitrum,polygon,sepolia,goerli,mainnet}from'viem/chains';var v=1.15;async function C({config:t,tx:e}){if(e.adapter!==OrbitAdapter.EVM)throw new Error(`Cancellation is only available for EVM transactions. Received adapter type: '${e.adapter}'.`);let{nonce:a,maxFeePerGas:s,maxPriorityFeePerGas:i,chainId:c}=e;if(a===void 0||!s||!i)throw new Error("Transaction is missing required fields for cancellation (nonce, maxFeePerGas, maxPriorityFeePerGas).");try{if(!t)throw new Error("Wagmi config is not provided.");let n=getAccount(t);if(!n.address)throw new Error("No connected account found.");let r=BigInt(Math.ceil(Number(i)*v)),o=BigInt(Math.ceil(Number(s)*v));return await sendTransaction(t,{to:n.address,value:0n,chainId:c,nonce:a,maxFeePerGas:o,maxPriorityFeePerGas:r})}catch(n){let r=n instanceof Error?n.message:String(n);throw new Error(`Failed to cancel transaction: ${r}`)}}var de=10,ue=3e3;async function me(t){let{tx:e,config:a,onInitialize:s,onTxDetailsFetched:i,onSuccess:c,onFailure:n,onReplaced:r,retryCount:o=de,retryTimeout:l=ue,waitForTransactionReceiptParams:u}=t;if(s?.(),e.txKey===zeroHash)return n(new Error("Transaction hash cannot be the zero hash."));let p=getClient(a,{chainId:e.chainId});if(!p)return n(new Error(`Could not create a viem client for chainId: ${e.chainId}`));let d=null;for(let f=0;f<o;f++)try{d=await getTransaction(p,{hash:e.txKey}),i(d);break}catch(m){if(f===o-1)return console.error(`EVM tracker failed to fetch tx ${e.txKey} after ${o} retries:`,m),n(m);await new Promise(b=>setTimeout(b,l));}if(!d)return n(new Error("Transaction details could not be fetched."));try{let f=!1,m=await waitForTransactionReceipt(p,{hash:d.hash,onReplaced:b=>{f=!0,r(b);},...u});if(f)return;await c(d,m,p);}catch(f){console.error(`Error waiting for receipt for tx ${e.txKey}:`,f),n(f);}}async function y(t){let{tx:e,config:a,updateTxParams:s,transactionsPool:i,onSuccess:c,onError:n,onReplaced:r}=t;return me({tx:e,config:a,onInitialize:()=>{s(e.txKey,{hash:e.txKey});},onTxDetailsFetched:o=>{s(e.txKey,{to:o.to??void 0,input:o.input,value:o.value?.toString(),nonce:o.nonce,maxFeePerGas:o.maxFeePerGas?.toString(),maxPriorityFeePerGas:o.maxPriorityFeePerGas?.toString()});},onSuccess:async(o,l,u)=>{let p=await getBlock(u,{blockNumber:l.blockNumber}),d=Number(p.timestamp),f=l.status==="success";s(e.txKey,{status:f?TransactionStatus.Success:TransactionStatus.Failed,isError:!f,pending:false,finishedTimestamp:d});let m=i[e.txKey];f&&c&&m&&c(m),!f&&n&&m&&n(new Error("Transaction reverted"),m);},onReplaced:o=>{s(e.txKey,{status:TransactionStatus.Replaced,replacedTxHash:o.transaction.hash,pending:false});let l=i[e.txKey];r&&l&&r(l,e);},onFailure:o=>{s(e.txKey,{status:TransactionStatus.Failed,pending:false,isError:true,errorMessage:o instanceof Error?o.message:"Transaction failed or could not be tracked."});let l=i[e.txKey];n&&l&&n(o,l);}})}function F(t){return typeof t=="object"&&t!==null&&"taskId"in t}var he=(r=>(r.CheckPending="CheckPending",r.ExecPending="ExecPending",r.WaitingForConfirmation="WaitingForConfirmation",r.ExecSuccess="ExecSuccess",r.ExecReverted="ExecReverted",r.Cancelled="Cancelled",r.NotFound="NotFound",r))(he||{}),xe="https://api.gelato.digital/tasks/status/",I=new Set(["ExecReverted","Cancelled","NotFound"]);function ge(t){return t!=="ExecSuccess"&&!I.has(t)}var ke=async({tx:t,stopPolling:e,onSuccess:a,onFailure:s,onIntervalTick:i})=>{let c=await fetch(`${xe}${t.txKey}`);if(!c.ok){if(c.status===404){s(),e();return}throw new Error(`Gelato API responded with status: ${c.status}`)}let n=await c.json(),{taskState:r,creationDate:o}=n.task;if(i?.(n),o&&T().diff(T(o),"hour")>=1&&ge(r)){e();return}r==="ExecSuccess"?(a(n),e({withoutRemoving:true})):I.has(r)&&(s(n),e({withoutRemoving:true}));};function P({tx:t,updateTxParams:e,removeTxFromPool:a,transactionsPool:s,onSuccess:i,onError:c}){return initializePollingTracker({tx:t,fetcher:ke,removeTxFromPool:a,onSuccess:n=>{e(t.txKey,{status:TransactionStatus.Success,pending:false,isError:false,hash:n.task.transactionHash,finishedTimestamp:n.task.executionDate?T(n.task.executionDate).unix():void 0});let r=s[t.txKey];i&&r&&i(r);},onIntervalTick:n=>{e(t.txKey,{hash:n.task.transactionHash});},onFailure:n=>{let r=n?.task.lastCheckMessage??"Transaction failed or was not found.";e(t.txKey,{status:TransactionStatus.Failed,pending:false,isError:true,hash:n?.task.transactionHash,errorMessage:r,finishedTimestamp:n?.task.executionDate?T(n.task.executionDate).unix():void 0});let o=s[t.txKey];c&&o&&c(new Error(r),o);}})}var ft={allowedDomains:[/gnosis-safe.io$/,/app.safe.global$/,/metissafe.tech$/],debug:false},B={[mainnet.id]:"https://app.safe.global/eth:",[goerli.id]:"https://app.safe.global/gor:",[sepolia.id]:"https://app.safe.global/sep:",[polygon.id]:"https://app.safe.global/matic:",[arbitrum.id]:"https://app.safe.global/arb1:",[aurora.id]:"https://app.safe.global/aurora:",[avalanche.id]:"https://app.safe.global/avax:",[base.id]:"https://app.safe.global/base:",[boba.id]:"https://app.safe.global/boba:",[bsc.id]:"https://app.safe.global/bnb:",[celo.id]:"https://app.safe.global/celo:",[gnosis.id]:"https://app.safe.global/gno:",[optimism.id]:"https://app.safe.global/oeth:",[polygonZkEvm.id]:"https://app.safe.global/zkevm:",[zksync.id]:"https://app.safe.global/zksync:"},W={[mainnet.id]:"https://safe-transaction-mainnet.safe.global/api/v1",[goerli.id]:"https://safe-transaction-goerli.safe.global/api/v1",[sepolia.id]:"https://safe-transaction-sepolia.safe.global/api/v1",[polygon.id]:"https://safe-transaction-polygon.safe.global/api/v1",[arbitrum.id]:"https://safe-transaction-arbitrum.safe.global/api/v1",[aurora.id]:"https://safe-transaction-aurora.safe.global/api/v1",[avalanche.id]:"https://safe-transaction-avalanche.safe.global/api/v1",[base.id]:"https://safe-transaction-base.safe.global/api/v1",[boba.id]:"https://safe-transaction-boba.safe.global/api/v1",[bsc.id]:"https://safe-transaction-bsc.safe.global/api/v1",[celo.id]:"https://safe-transaction-celo.safe.global/api/v1",[gnosis.id]:"https://safe-transaction-gnosis-chain.safe.global/api/v1",[optimism.id]:"https://safe-transaction-optimism.safe.global/api/v1",[polygonZkEvm.id]:"https://safe-transaction-zkevm.safe.global/api/v1",[zksync.id]:"https://safe-transaction-zksync.safe.global/api/v1"};var Ee=async({tx:t,stopPolling:e,onSuccess:a,onFailure:s,onReplaced:i,onIntervalTick:c})=>{let n=W[t.chainId];if(!n)throw new Error(`Safe Transaction Service URL not found for chainId: ${t.chainId}`);let r=await fetch(`${n}/multisig-transactions/${t.txKey}/`);if(!r.ok)throw r.status===404&&(s(),e()),new Error(`Safe API responded with status: ${r.status}`);let o=await r.json();if(c?.(o),o.isExecuted){o.isSuccessful?a(o):s(o),e({withoutRemoving:true});return}let l=await fetch(`${n}/safes/${t.from}/multisig-transactions/?nonce=${o.nonce}`);if(!l.ok)throw new Error(`Safe API (nonce check) responded with status: ${l.status}`);let p=(await l.json()).results.find(d=>d.isExecuted);if(p){i?.(p),e({withoutRemoving:true});return}T().diff(T(o.submissionDate),"day")>=1&&e();};function Y({tx:t,updateTxParams:e,removeTxFromPool:a,transactionsPool:s,onSuccess:i,onError:c,onReplaced:n}){return initializePollingTracker({tx:t,fetcher:Ee,removeTxFromPool:a,onSuccess:r=>{e(t.txKey,{status:TransactionStatus.Success,pending:false,isError:false,hash:r.transactionHash??void 0,finishedTimestamp:r.executionDate?T(r.executionDate).unix():void 0});let o=s[t.txKey];i&&o&&i(o);},onIntervalTick:r=>{e(t.txKey,{hash:r.transactionHash??void 0});},onFailure:r=>{let o=r?"Safe transaction failed or was rejected.":"Transaction not found.";e(t.txKey,{status:TransactionStatus.Failed,pending:false,isError:true,hash:r?.transactionHash??void 0,errorMessage:o,finishedTimestamp:r?.executionDate?T(r.executionDate).unix():void 0});let l=s[t.txKey];c&&l&&c(new Error(o),l);},onReplaced:r=>{e(t.txKey,{status:TransactionStatus.Replaced,pending:false,hash:t.adapter===OrbitAdapter.EVM?t.hash:zeroHash,replacedTxHash:r.safeTxHash??zeroHash,finishedTimestamp:r.executionDate?T(r.executionDate).unix():void 0});let o=s[t.txKey];n&&o&&n(o,t);}})}async function J({tracker:t,tx:e,config:a,transactionsPool:s,onSuccess:i,onError:c,onReplaced:n,...r}){switch(t){case TransactionTracker.Ethereum:return y({tx:e,config:a,transactionsPool:s,onSuccess:i,onError:c,onReplaced:n,...r});case TransactionTracker.Gelato:return P({tx:e,transactionsPool:s,onSuccess:i,onError:c,...r});case TransactionTracker.Safe:return Y({tx:e,transactionsPool:s,onSuccess:i,onError:c,onReplaced:n,...r});default:return console.warn(`Unknown tracker type: '${t}'. Falling back to default EVM tracker.`),y({tx:e,config:a,transactionsPool:s,onSuccess:i,onError:c,onReplaced:n,...r})}}function Z(t,e){if(F(t))return {tracker:TransactionTracker.Gelato,txKey:t.taskId};if(!isHex(t))throw new Error(`Invalid transaction key format. Expected a Hex string or a GelatoTxKey object, but received: ${JSON.stringify(t)}`);let a=e.split(":");return (a.length>1?a[a.length-1]==="safe"||a[a.length-1]==="safewallet":e?.toLowerCase()==="safe")?{tracker:TransactionTracker.Safe,txKey:t}:{tracker:TransactionTracker.Ethereum,txKey:t}}var X=({chains:t,tx:e})=>{if(e.tracker===TransactionTracker.Safe){let c=B[e.chainId];return c?`${c}${e.from}/transactions/tx?id=multisig_${e.from}_${e.txKey}`:""}let s=t.find(c=>c.id===e.chainId)?.blockExplorers?.default.url;if(!s)return "";let i=(e.adapter===OrbitAdapter.EVM?e.replacedTxHash:e.txKey)||(e.adapter===OrbitAdapter.EVM?e.hash:e.txKey);return i?`${s}/tx/${i}`:""};var ee=1.15;async function te({config:t,tx:e}){if(e.adapter!==OrbitAdapter.EVM)throw new Error(`Speed up is only available for EVM transactions. Received adapter type: '${e.adapter}'.`);let{nonce:a,from:s,to:i,value:c,input:n,maxFeePerGas:r,maxPriorityFeePerGas:o,chainId:l}=e;if(a===void 0||!s||!i||!c||!r||!o)throw new Error("Transaction is missing required fields for speed-up.");try{if(!t)throw new Error("Wagmi config is not provided.");if(!getAccount(t).address)throw new Error("No connected account found.");let p=BigInt(Math.ceil(Number(o)*ee)),d=BigInt(Math.ceil(Number(r)*ee));return await sendTransaction(t,{to:i,value:BigInt(c),data:n||"0x",chainId:l,nonce:a,maxFeePerGas:d,maxPriorityFeePerGas:p})}catch(u){let p=u instanceof Error?u.message:String(u);throw new Error(`Failed to speed up transaction: ${p}`)}}function oa(t,e){if(!t)throw new Error("EVM adapter requires a wagmi config object.");return {key:OrbitAdapter.EVM,getConnectorInfo:()=>{let a=getConnection(t),s=lastConnectedConnectorHelpers.getLastConnectedConnector();return {walletAddress:a.address??s?.address??zeroAddress,connectorType:getConnectorTypeFromName(OrbitAdapter.EVM,a.connector?.name?.toLowerCase()??"unknown")}},checkChainForTx:a=>checkAndSwitchChain(a,t),checkTransactionsTracker:(a,s)=>Z(a,s),checkAndInitializeTrackerInStore:({tx:a,...s})=>J({tracker:a.tracker,tx:a,config:t,...s}),getExplorerUrl:a=>{let{chain:s}=getConnection(t),i=s?.blockExplorers?.default.url;return a?`${i}/${a}`:i},getExplorerTxUrl:a=>X({chains:e,tx:a}),cancelTxAction:a=>C({config:t,tx:a}),speedUpTxAction:a=>te({config:t,tx:a}),retryTxAction:async({onClose:a,txKey:s,executeTxAction:i,tx:c})=>{if(a(s),!i){console.error("Retry failed: executeTxAction function is not provided.");return}await i({actionFunction:()=>c.actionFunction({config:t,...c.payload}),params:c,defaultTracker:TransactionTracker.Ethereum});}}}var g=null,k=null,Ke=300*1e3,He="https://relay.gelato.digital/relays/v2/supported-chains";async function ia(t){let e=Date.now();if(g&&k&&e-k<Ke)return g.includes(t);try{let a=await fetch(He);if(!a.ok)throw new Error(`Gelato API responded with status: ${a.status}`);let i=(await a.json()).chains.map(Number);return g=i,k=e,i.includes(t)}catch(a){return console.error("Failed to fetch Gelato supported chains:",a),g=null,k=null,false}}
|
|
2
|
+
export{he as GelatoTaskState,W as SafeTransactionServiceUrls,C as cancelTxAction,J as checkAndInitializeTrackerInStore,ia as checkIsGelatoAvailable,Z as checkTransactionsTracker,me as evmTracker,y as evmTrackerForStore,ke as gelatoFetcher,P as gelatoTrackerForStore,B as gnosisSafeLinksHelper,F as isGelatoTxKey,oa as pulsarEvmAdapter,Ee as safeFetcher,ft as safeSdkOptions,Y as safeTrackerForStore,X as selectEvmTxExplorerLink,te as speedUpTxAction};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tuwaio/pulsar-evm",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Oleksandr Tkach",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -49,18 +49,18 @@
|
|
|
49
49
|
"zustand": "5.x.x"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@tuwaio/orbit-core": "^0.2.
|
|
53
|
-
"@tuwaio/orbit-evm": "^0.2.
|
|
54
|
-
"@wagmi/core": "^3.1
|
|
52
|
+
"@tuwaio/orbit-core": "^0.2.4",
|
|
53
|
+
"@tuwaio/orbit-evm": "^0.2.7",
|
|
54
|
+
"@wagmi/core": "^3.3.1",
|
|
55
55
|
"dayjs": "^1.11.19",
|
|
56
56
|
"immer": "^11.1.3",
|
|
57
57
|
"jsdom": "^27.4.0",
|
|
58
58
|
"tsup": "^8.5.1",
|
|
59
59
|
"typescript": "^5.9.3",
|
|
60
|
-
"viem": "^2.
|
|
61
|
-
"vitest": "^4.0.
|
|
62
|
-
"zustand": "^5.0.
|
|
63
|
-
"@tuwaio/pulsar-core": "^0.
|
|
60
|
+
"viem": "^2.44.4",
|
|
61
|
+
"vitest": "^4.0.18",
|
|
62
|
+
"zustand": "^5.0.10",
|
|
63
|
+
"@tuwaio/pulsar-core": "^0.4.0"
|
|
64
64
|
},
|
|
65
65
|
"scripts": {
|
|
66
66
|
"start": "tsup src/index.ts --watch",
|