@tuwaio/pulsar-solana 0.5.0 → 0.6.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.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +12 -12
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var orbitCore=require('@tuwaio/orbit-core'),orbitSolana=require('@tuwaio/orbit-solana'),pulsarCore=require('@tuwaio/pulsar-core'),d=require('dayjs'),gill=require('gill');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var d__default=/*#__PURE__*/_interopDefault(d);var l=class extends Error{name="SolanaChainMismatchError";requiredChain;currentChain;constructor(o,r){let
|
|
1
|
+
'use strict';var orbitCore=require('@tuwaio/orbit-core'),orbitSolana=require('@tuwaio/orbit-solana'),pulsarCore=require('@tuwaio/pulsar-core'),d=require('dayjs'),gill=require('gill');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var d__default=/*#__PURE__*/_interopDefault(d);var l=class extends Error{name="SolanaChainMismatchError";requiredChain;currentChain;constructor(o,r){let t=`Wrong chain. The transaction requires ${o}, but you are connected to ${r}.`;super(t),this.requiredChain=o,this.currentChain=r;}};async function R({tx:e,stopPolling:o,onSuccess:r,onFailure:t,onIntervalTick:n}){if(e.adapter!==orbitCore.OrbitAdapter.SOLANA)throw new Error('Tx adapter is not Solana. Please set the adapter to "solana" in the transaction object.');try{let a=orbitSolana.createSolanaRPC({rpcUrlOrMoniker:e.rpcUrl??orbitSolana.getCluster({cluster:e.chainId})}),i=(await a.getSignatureStatuses([e.txKey]).send())?.value?.[0];if(!i)return;let{fee:u,recentBlockhash:c,instructions:m}=e;if(!u||!c||!m){let A=await a.getTransaction(e.txKey,{encoding:"json",maxSupportedTransactionVersion:0}).send(),{meta:p,transaction:f}=A||{};if(!p||!f)return;u=Number(p.fee??0),c=f.message.recentBlockhash?.toString(),m=f.message.instructions;}let s={...i,slot:Number(i.slot),confirmations:Number(i.confirmations??0),fee:u,recentBlockhash:c,instructions:m};if(n?.(s),s.err){t(s),o({withoutRemoving:!0});return}if(s.confirmationStatus==="finalized"){r(s),o({withoutRemoving:!0});return}d__default.default().diff(d__default.default.unix(e.localTimestamp),"hour")>=1&&(t(s),o());}catch(a){console.error("Error in solanaFetcher:",a),t({err:a}),o();}}async function h({tx:e,onSuccess:o,onError:r,...t}){return pulsarCore.initializePollingTracker({tx:e,fetcher:R,removeTxFromPool:t.removeTxFromPool,pollingInterval:2500,maxRetries:10,onSuccess:n=>{t.updateTxParams(e.txKey,{status:pulsarCore.TransactionStatus.Success,pending:false,isError:false,finishedTimestamp:d__default.default().unix(),fee:n.fee,instructions:n.instructions,recentBlockhash:n.recentBlockhash,confirmations:"MAX",slot:n.slot});let a=t.transactionsPool[e.txKey];o&&a&&o(a);},onIntervalTick:n=>{t.updateTxParams(e.txKey,{confirmations:n.confirmations??0,slot:n.slot,fee:n.fee,instructions:n.instructions,recentBlockhash:n.recentBlockhash});},onFailure:n=>{t.updateTxParams(e.txKey,{status:pulsarCore.TransactionStatus.Failed,pending:false,isError:true,error:orbitCore.normalizeError(n?.err??new Error("Transaction tracking timed out or the transaction was not found.")),finishedTimestamp:d__default.default().unix()});let a=t.transactionsPool[e.txKey];r&&a&&r(n?.err??new Error("Transaction tracking timed out or the transaction was not found."),a);}})}async function g({tx:e,tracker:o,onSuccess:r,onError:t,...n}){o===pulsarCore.TransactionTracker.Solana?await h({tx:e,onSuccess:r,onError:t,...n}):(console.error(`Unknown tracker type for Solana adapter: ${o}`),n.updateTxParams(e.txKey,{status:pulsarCore.TransactionStatus.Failed,pending:false,isError:true,error:orbitCore.normalizeError(new Error(`Unsupported tracker type: "${o}"`))}));}var S=(e,o)=>{if(o!==e)throw new l(e,o)};function gr(e){let{rpcUrls:o}=e;return {key:orbitCore.OrbitAdapter.SOLANA,getConnectorInfo:()=>{let r=orbitSolana.getConnectedSolanaConnector();return {walletAddress:orbitCore.lastConnectedConnectorHelpers.getLastConnectedConnector()?.address??r.accounts[0].address??"0x0",connectorType:orbitCore.getConnectorTypeFromName(orbitCore.OrbitAdapter.SOLANA,r.name)}},checkChainForTx:async r=>{if(!orbitSolana.getConnectedSolanaConnector())throw new Error("Wallet not provided. Cannot perform chain check.");try{S(r,orbitCore.lastConnectedConnectorHelpers.getLastConnectedConnector()?.chainId??"");}catch(n){throw n instanceof l?n:new Error(`Chain check failed: ${n instanceof Error?n.message:String(n)}`,{cause:n})}},checkTransactionsTracker:({actionTxKey:r,tracker:t})=>({tracker:t??pulsarCore.TransactionTracker.Solana,txKey:r}),checkAndInitializeTrackerInStore:({tx:r,...t})=>g({tracker:r.tracker,tx:r,...t}),getExplorerUrl:(r,t)=>orbitSolana.getSolanaExplorerLink(r,t),getExplorerTxUrl:r=>orbitSolana.getSolanaExplorerLink(`/tx/${r.txKey}`,r.chainId),retryTxAction:async({onClose:r,txKey:t,executeTxAction:n,tx:a})=>{r(t);let i=orbitSolana.getAvailableSolanaConnectors().filter(s=>s.accounts.length>0)[0];if(!i||!i.accounts[0].address||i.accounts[0].address==="0x0")throw new Error("Retry failed: A wallet must be connected.");if(!n)throw new Error("Retry failed: executeTxAction function is not provided.");let u=orbitSolana.getCluster({cluster:a?.desiredChainID}),c=a.rpcUrl??orbitSolana.getRpcUrlForCluster({cluster:u,rpcUrls:o});if(!c)throw new Error("Retry failed: Could not determine RPC endpoint for the transaction chain.");let m=orbitSolana.createSolanaClientWithCache({rpcUrlOrMoniker:c,rpcUrls:o});await n({actionFunction:()=>a.actionFunction({client:m,...a.payload}),params:a,defaultTracker:pulsarCore.TransactionTracker.Solana});}}}async function xr({client:e,signer:o,instruction:r}){let{value:t}=await e.rpc.getLatestBlockhash().send(),n=gill.createTransaction({feePayer:o,version:0,latestBlockhash:t,instructions:Array.isArray(r)?r:[r]}),a=await gill.signAndSendTransactionMessageWithSigners(n);return gill.getBase58Decoder().decode(a)}exports.SolanaChainMismatchError=l;exports.checkAndInitializeTrackerInStore=g;exports.checkSolanaChain=S;exports.pulsarSolanaAdapter=gr;exports.signAndSendSolanaTx=xr;exports.solanaFetcher=R;exports.solanaTrackerForStore=h;
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import {OrbitAdapter,normalizeError,lastConnectedConnectorHelpers,getConnectorTypeFromName}from'@tuwaio/orbit-core';import {createSolanaRPC,getCluster,getAvailableSolanaConnectors,getRpcUrlForCluster,createSolanaClientWithCache,getSolanaExplorerLink,getConnectedSolanaConnector}from'@tuwaio/orbit-solana';import {initializePollingTracker,TransactionStatus,TransactionTracker}from'@tuwaio/pulsar-core';import d from'dayjs';import {createTransaction,signAndSendTransactionMessageWithSigners,getBase58Decoder}from'gill';var l=class extends Error{name="SolanaChainMismatchError";requiredChain;currentChain;constructor(o,r){let
|
|
1
|
+
import {OrbitAdapter,normalizeError,lastConnectedConnectorHelpers,getConnectorTypeFromName}from'@tuwaio/orbit-core';import {createSolanaRPC,getCluster,getAvailableSolanaConnectors,getRpcUrlForCluster,createSolanaClientWithCache,getSolanaExplorerLink,getConnectedSolanaConnector}from'@tuwaio/orbit-solana';import {initializePollingTracker,TransactionStatus,TransactionTracker}from'@tuwaio/pulsar-core';import d from'dayjs';import {createTransaction,signAndSendTransactionMessageWithSigners,getBase58Decoder}from'gill';var l=class extends Error{name="SolanaChainMismatchError";requiredChain;currentChain;constructor(o,r){let t=`Wrong chain. The transaction requires ${o}, but you are connected to ${r}.`;super(t),this.requiredChain=o,this.currentChain=r;}};async function R({tx:e,stopPolling:o,onSuccess:r,onFailure:t,onIntervalTick:n}){if(e.adapter!==OrbitAdapter.SOLANA)throw new Error('Tx adapter is not Solana. Please set the adapter to "solana" in the transaction object.');try{let a=createSolanaRPC({rpcUrlOrMoniker:e.rpcUrl??getCluster({cluster:e.chainId})}),i=(await a.getSignatureStatuses([e.txKey]).send())?.value?.[0];if(!i)return;let{fee:u,recentBlockhash:c,instructions:m}=e;if(!u||!c||!m){let A=await a.getTransaction(e.txKey,{encoding:"json",maxSupportedTransactionVersion:0}).send(),{meta:p,transaction:f}=A||{};if(!p||!f)return;u=Number(p.fee??0),c=f.message.recentBlockhash?.toString(),m=f.message.instructions;}let s={...i,slot:Number(i.slot),confirmations:Number(i.confirmations??0),fee:u,recentBlockhash:c,instructions:m};if(n?.(s),s.err){t(s),o({withoutRemoving:!0});return}if(s.confirmationStatus==="finalized"){r(s),o({withoutRemoving:!0});return}d().diff(d.unix(e.localTimestamp),"hour")>=1&&(t(s),o());}catch(a){console.error("Error in solanaFetcher:",a),t({err:a}),o();}}async function h({tx:e,onSuccess:o,onError:r,...t}){return initializePollingTracker({tx:e,fetcher:R,removeTxFromPool:t.removeTxFromPool,pollingInterval:2500,maxRetries:10,onSuccess:n=>{t.updateTxParams(e.txKey,{status:TransactionStatus.Success,pending:false,isError:false,finishedTimestamp:d().unix(),fee:n.fee,instructions:n.instructions,recentBlockhash:n.recentBlockhash,confirmations:"MAX",slot:n.slot});let a=t.transactionsPool[e.txKey];o&&a&&o(a);},onIntervalTick:n=>{t.updateTxParams(e.txKey,{confirmations:n.confirmations??0,slot:n.slot,fee:n.fee,instructions:n.instructions,recentBlockhash:n.recentBlockhash});},onFailure:n=>{t.updateTxParams(e.txKey,{status:TransactionStatus.Failed,pending:false,isError:true,error:normalizeError(n?.err??new Error("Transaction tracking timed out or the transaction was not found.")),finishedTimestamp:d().unix()});let a=t.transactionsPool[e.txKey];r&&a&&r(n?.err??new Error("Transaction tracking timed out or the transaction was not found."),a);}})}async function g({tx:e,tracker:o,onSuccess:r,onError:t,...n}){o===TransactionTracker.Solana?await h({tx:e,onSuccess:r,onError:t,...n}):(console.error(`Unknown tracker type for Solana adapter: ${o}`),n.updateTxParams(e.txKey,{status:TransactionStatus.Failed,pending:false,isError:true,error:normalizeError(new Error(`Unsupported tracker type: "${o}"`))}));}var S=(e,o)=>{if(o!==e)throw new l(e,o)};function gr(e){let{rpcUrls:o}=e;return {key:OrbitAdapter.SOLANA,getConnectorInfo:()=>{let r=getConnectedSolanaConnector();return {walletAddress:lastConnectedConnectorHelpers.getLastConnectedConnector()?.address??r.accounts[0].address??"0x0",connectorType:getConnectorTypeFromName(OrbitAdapter.SOLANA,r.name)}},checkChainForTx:async r=>{if(!getConnectedSolanaConnector())throw new Error("Wallet not provided. Cannot perform chain check.");try{S(r,lastConnectedConnectorHelpers.getLastConnectedConnector()?.chainId??"");}catch(n){throw n instanceof l?n:new Error(`Chain check failed: ${n instanceof Error?n.message:String(n)}`,{cause:n})}},checkTransactionsTracker:({actionTxKey:r,tracker:t})=>({tracker:t??TransactionTracker.Solana,txKey:r}),checkAndInitializeTrackerInStore:({tx:r,...t})=>g({tracker:r.tracker,tx:r,...t}),getExplorerUrl:(r,t)=>getSolanaExplorerLink(r,t),getExplorerTxUrl:r=>getSolanaExplorerLink(`/tx/${r.txKey}`,r.chainId),retryTxAction:async({onClose:r,txKey:t,executeTxAction:n,tx:a})=>{r(t);let i=getAvailableSolanaConnectors().filter(s=>s.accounts.length>0)[0];if(!i||!i.accounts[0].address||i.accounts[0].address==="0x0")throw new Error("Retry failed: A wallet must be connected.");if(!n)throw new Error("Retry failed: executeTxAction function is not provided.");let u=getCluster({cluster:a?.desiredChainID}),c=a.rpcUrl??getRpcUrlForCluster({cluster:u,rpcUrls:o});if(!c)throw new Error("Retry failed: Could not determine RPC endpoint for the transaction chain.");let m=createSolanaClientWithCache({rpcUrlOrMoniker:c,rpcUrls:o});await n({actionFunction:()=>a.actionFunction({client:m,...a.payload}),params:a,defaultTracker:TransactionTracker.Solana});}}}async function xr({client:e,signer:o,instruction:r}){let{value:t}=await e.rpc.getLatestBlockhash().send(),n=createTransaction({feePayer:o,version:0,latestBlockhash:t,instructions:Array.isArray(r)?r:[r]}),a=await signAndSendTransactionMessageWithSigners(n);return getBase58Decoder().decode(a)}export{l as SolanaChainMismatchError,g as checkAndInitializeTrackerInStore,S as checkSolanaChain,gr as pulsarSolanaAdapter,xr as signAndSendSolanaTx,R as solanaFetcher,h as solanaTrackerForStore};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tuwaio/pulsar-solana",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"author": "Oleksandr Tkach",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -38,8 +38,8 @@
|
|
|
38
38
|
}
|
|
39
39
|
],
|
|
40
40
|
"peerDependencies": {
|
|
41
|
-
"@tuwaio/orbit-core": ">=0.2.
|
|
42
|
-
"@tuwaio/orbit-solana": ">=0.2.
|
|
41
|
+
"@tuwaio/orbit-core": ">=0.2.8",
|
|
42
|
+
"@tuwaio/orbit-solana": ">=0.2.4",
|
|
43
43
|
"@tuwaio/pulsar-core": ">=0.5",
|
|
44
44
|
"@wallet-standard/app": "1.x.x",
|
|
45
45
|
"@wallet-standard/ui-core": "1.x.x",
|
|
@@ -50,20 +50,20 @@
|
|
|
50
50
|
"zustand": "5.x.x"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@tuwaio/orbit-core": "^0.2.
|
|
54
|
-
"@tuwaio/orbit-solana": "^0.2.
|
|
53
|
+
"@tuwaio/orbit-core": "^0.2.8",
|
|
54
|
+
"@tuwaio/orbit-solana": "^0.2.4",
|
|
55
55
|
"@wallet-standard/app": "^1.1.0",
|
|
56
56
|
"@wallet-standard/ui-core": "^1.0.0",
|
|
57
57
|
"@wallet-standard/ui-registry": "^1.0.1",
|
|
58
|
-
"dayjs": "^1.11.
|
|
58
|
+
"dayjs": "^1.11.20",
|
|
59
59
|
"gill": "^0.14.0",
|
|
60
|
-
"immer": "^11.1.
|
|
61
|
-
"jsdom": "^
|
|
60
|
+
"immer": "^11.1.4",
|
|
61
|
+
"jsdom": "^29.1.0",
|
|
62
62
|
"tsup": "^8.5.1",
|
|
63
|
-
"typescript": "^
|
|
64
|
-
"vitest": "^4.
|
|
65
|
-
"zustand": "^5.0.
|
|
66
|
-
"@tuwaio/pulsar-core": "^0.
|
|
63
|
+
"typescript": "^6.0.3",
|
|
64
|
+
"vitest": "^4.1.5",
|
|
65
|
+
"zustand": "^5.0.12",
|
|
66
|
+
"@tuwaio/pulsar-core": "^0.6.0"
|
|
67
67
|
},
|
|
68
68
|
"scripts": {
|
|
69
69
|
"start": "tsup src/index.ts --watch",
|