@0xsquid/react-hooks 6.3.9-beta.8 → 6.3.9-evmos-beta.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/core/abis/ics20.json +534 -0
- package/dist/core/constants.d.ts +1 -7
- package/dist/core/constants.js +1 -26
- package/dist/core/constants.js.map +1 -1
- package/dist/core/externalLinks.d.ts +1 -1
- package/dist/core/externalLinks.js +1 -1
- package/dist/core/externalLinks.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/providers/CosmosProvider.d.ts +1 -1
- package/dist/core/providers/CosmosProvider.js.map +1 -1
- package/dist/core/queries/queries-keys.d.ts +4 -4
- package/dist/core/types/error.d.ts +1 -0
- package/dist/core/types/error.js.map +1 -1
- package/dist/core/types/transaction.d.ts +1 -0
- package/dist/core/types/wallet.d.ts +3 -21
- package/dist/core/types/wallet.js +0 -2
- package/dist/core/types/wallet.js.map +1 -1
- package/dist/core/wagmiConfig.js +32 -17
- package/dist/core/wagmiConfig.js.map +1 -1
- package/dist/core/wallets.js +0 -39
- package/dist/core/wallets.js.map +1 -1
- package/dist/hooks/chains/useSquidChains.js +1 -1
- package/dist/hooks/chains/useSquidChains.js.map +1 -1
- package/dist/hooks/cosmos/useCosmos.js +15 -5
- package/dist/hooks/cosmos/useCosmos.js.map +1 -1
- package/dist/hooks/evmos/useIcs20Allowance.d.ts +142 -0
- package/dist/hooks/evmos/useIcs20Allowance.js +34 -0
- package/dist/hooks/evmos/useIcs20Allowance.js.map +1 -0
- package/dist/hooks/index.d.ts +0 -1
- package/dist/hooks/index.js +0 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/squid/useSquid.js +1 -1
- package/dist/hooks/squid/useSquid.js.map +1 -1
- package/dist/hooks/store/useWalletStore.js +6 -5
- package/dist/hooks/store/useWalletStore.js.map +1 -1
- package/dist/hooks/swap/useSwap.js +3 -9
- package/dist/hooks/swap/useSwap.js.map +1 -1
- package/dist/hooks/tokens/useAllConnectedWalletBalances.js +1 -12
- package/dist/hooks/tokens/useAllConnectedWalletBalances.js.map +1 -1
- package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.d.ts +5 -4
- package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js +16 -30
- package/dist/hooks/tokens/useAllTokensWithBalanceForChainType.js.map +1 -1
- package/dist/hooks/tokens/useBalance.d.ts +246 -18
- package/dist/hooks/tokens/useBalance.js +26 -63
- package/dist/hooks/tokens/useBalance.js.map +1 -1
- package/dist/hooks/tokens/useMultiChainBalance.d.ts +1 -1
- package/dist/hooks/tokens/useMultiChainBalance.js +19 -18
- package/dist/hooks/tokens/useMultiChainBalance.js.map +1 -1
- package/dist/hooks/tokens/useNativeBalance.d.ts +18 -16
- package/dist/hooks/tokens/useNativeBalance.js +52 -121
- package/dist/hooks/tokens/useNativeBalance.js.map +1 -1
- package/dist/hooks/tokens/useNativeTokenForChain.js +4 -6
- package/dist/hooks/tokens/useNativeTokenForChain.js.map +1 -1
- package/dist/hooks/tokens/useSquidTokens.d.ts +11 -2
- package/dist/hooks/tokens/useSquidTokens.js +16 -10
- package/dist/hooks/tokens/useSquidTokens.js.map +1 -1
- package/dist/hooks/transaction/useApproval.js +75 -16
- package/dist/hooks/transaction/useApproval.js.map +1 -1
- package/dist/hooks/transaction/useEstimate.js +1 -1
- package/dist/hooks/transaction/useEstimate.js.map +1 -1
- package/dist/hooks/transaction/useExecuteTransaction.d.ts +2 -0
- package/dist/hooks/transaction/useExecuteTransaction.js +53 -72
- package/dist/hooks/transaction/useExecuteTransaction.js.map +1 -1
- package/dist/hooks/transaction/useGetRoute.d.ts +8 -7
- package/dist/hooks/transaction/useGetRoute.js +15 -219
- package/dist/hooks/transaction/useGetRoute.js.map +1 -1
- package/dist/hooks/transaction/useSingleTransaction.js +1 -1
- package/dist/hooks/transaction/useSingleTransaction.js.map +1 -1
- package/dist/hooks/user/useUserParams.js +1 -1
- package/dist/hooks/user/useUserParams.js.map +1 -1
- package/dist/hooks/wallet/useIntegratorContext.js +1 -1
- package/dist/hooks/wallet/useIntegratorContext.js.map +1 -1
- package/dist/hooks/wallet/useMultiChainWallet.d.ts +4 -10
- package/dist/hooks/wallet/useMultiChainWallet.js +55 -43
- package/dist/hooks/wallet/useMultiChainWallet.js.map +1 -1
- package/dist/hooks/wallet/useSigner.d.ts +2 -2
- package/dist/hooks/wallet/useSigner.js +3 -34
- package/dist/hooks/wallet/useSigner.js.map +1 -1
- package/dist/hooks/wallet/useWallet.d.ts +1 -1
- package/dist/hooks/wallet/useWallet.js +5 -14
- package/dist/hooks/wallet/useWallet.js.map +1 -1
- package/dist/provider/index.d.ts +1 -1
- package/dist/provider/index.js +7 -7
- package/dist/provider/index.js.map +1 -1
- package/dist/services/external/rpcService.d.ts +1 -4
- package/dist/services/external/rpcService.js +8 -96
- package/dist/services/external/rpcService.js.map +1 -1
- package/dist/services/index.d.ts +0 -1
- package/dist/services/index.js +0 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/internal/assetsService.d.ts +11 -4
- package/dist/services/internal/assetsService.js +77 -136
- package/dist/services/internal/assetsService.js.map +1 -1
- package/dist/services/internal/cosmosService.d.ts +13 -3
- package/dist/services/internal/cosmosService.js +1 -1
- package/dist/services/internal/cosmosService.js.map +1 -1
- package/dist/services/internal/errorService.d.ts +5 -1
- package/dist/services/internal/errorService.js +35 -21
- package/dist/services/internal/errorService.js.map +1 -1
- package/dist/services/internal/evmService.d.ts +7 -2
- package/dist/services/internal/evmService.js +6 -0
- package/dist/services/internal/evmService.js.map +1 -1
- package/dist/services/internal/solanaService.d.ts +5 -2
- package/dist/services/internal/solanaService.js.map +1 -1
- package/dist/services/internal/transactionService.d.ts +2 -1
- package/dist/services/internal/transactionService.js +1 -10
- package/dist/services/internal/transactionService.js.map +1 -1
- package/dist/services/internal/walletService.d.ts +11 -21
- package/dist/services/internal/walletService.js +17 -44
- package/dist/services/internal/walletService.js.map +1 -1
- package/package.json +7 -8
- package/dist/core/connectors/xrp/CrossMark.d.ts +0 -16
- package/dist/core/connectors/xrp/CrossMark.js +0 -30
- package/dist/core/connectors/xrp/CrossMark.js.map +0 -1
- package/dist/core/connectors/xrp/XrpMetamaskSnap.d.ts +0 -40
- package/dist/core/connectors/xrp/XrpMetamaskSnap.js +0 -204
- package/dist/core/connectors/xrp/XrpMetamaskSnap.js.map +0 -1
- package/dist/core/types/xrp.d.ts +0 -23
- package/dist/core/types/xrp.js +0 -2
- package/dist/core/types/xrp.js.map +0 -1
- package/dist/core/xrp/config.d.ts +0 -21
- package/dist/core/xrp/config.js +0 -53
- package/dist/core/xrp/config.js.map +0 -1
- package/dist/hooks/xrp/useXrp.d.ts +0 -7
- package/dist/hooks/xrp/useXrp.js +0 -22
- package/dist/hooks/xrp/useXrp.js.map +0 -1
- package/dist/hooks/xrp/useXrpPrice.d.ts +0 -1
- package/dist/hooks/xrp/useXrpPrice.js +0 -12
- package/dist/hooks/xrp/useXrpPrice.js.map +0 -1
- package/dist/services/internal/xrpService.d.ts +0 -27
- package/dist/services/internal/xrpService.js +0 -86
- package/dist/services/internal/xrpService.js.map +0 -1
- package/dist/services/internal/xrpStatusService.d.ts +0 -4
- package/dist/services/internal/xrpStatusService.js +0 -100
- package/dist/services/internal/xrpStatusService.js.map +0 -1
|
@@ -1,204 +0,0 @@
|
|
|
1
|
-
import { XRPL_ENV, XrplEnv } from "../../../core/xrp/config";
|
|
2
|
-
var EIP6963EventNames;
|
|
3
|
-
(function (EIP6963EventNames) {
|
|
4
|
-
EIP6963EventNames["Announce"] = "eip6963:announceProvider";
|
|
5
|
-
EIP6963EventNames["Request"] = "eip6963:requestProvider";
|
|
6
|
-
})(EIP6963EventNames || (EIP6963EventNames = {}));
|
|
7
|
-
var NetworkChainId;
|
|
8
|
-
(function (NetworkChainId) {
|
|
9
|
-
NetworkChainId[NetworkChainId["MAINNET"] = 0] = "MAINNET";
|
|
10
|
-
NetworkChainId[NetworkChainId["TESTNET"] = 1] = "TESTNET";
|
|
11
|
-
NetworkChainId[NetworkChainId["DEVNET"] = 2] = "DEVNET";
|
|
12
|
-
})(NetworkChainId || (NetworkChainId = {}));
|
|
13
|
-
const snapId = "npm:xrpl-snap";
|
|
14
|
-
export class XrpMetamaskSnapConnector {
|
|
15
|
-
provider;
|
|
16
|
-
async connect() {
|
|
17
|
-
await this.initialize();
|
|
18
|
-
await this.requestSnap(snapId);
|
|
19
|
-
const xrplEnvToNetworkMap = {
|
|
20
|
-
[XrplEnv.DEVNET]: NetworkChainId.DEVNET,
|
|
21
|
-
[XrplEnv.TESTNET]: NetworkChainId.TESTNET,
|
|
22
|
-
};
|
|
23
|
-
await this.changeNetwork(xrplEnvToNetworkMap[XRPL_ENV]).catch(() => {
|
|
24
|
-
// changeNetwork can fail if the user is already on the correct network
|
|
25
|
-
// so we don't need to handle the error here
|
|
26
|
-
});
|
|
27
|
-
const { account } = await this.getWallet();
|
|
28
|
-
return account;
|
|
29
|
-
}
|
|
30
|
-
async signAndSubmit(tx) {
|
|
31
|
-
if (!this.provider)
|
|
32
|
-
throw new Error("Provider not initialized");
|
|
33
|
-
const res = await this.provider.request({
|
|
34
|
-
method: "wallet_invokeSnap",
|
|
35
|
-
params: {
|
|
36
|
-
snapId: snapId,
|
|
37
|
-
request: {
|
|
38
|
-
method: "xrpl_signAndSubmit",
|
|
39
|
-
params: tx,
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
});
|
|
43
|
-
if (!res?.result) {
|
|
44
|
-
console.error("Invalid transaction result: ", res);
|
|
45
|
-
throw new Error("Invalid transaction result");
|
|
46
|
-
}
|
|
47
|
-
const txResponse = res.result.tx_json;
|
|
48
|
-
const txStatus = res.result.engine_result;
|
|
49
|
-
return {
|
|
50
|
-
result: txResponse,
|
|
51
|
-
status: txStatus,
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
// Cannot use constructor because of the async initialization
|
|
55
|
-
async initialize() {
|
|
56
|
-
this.provider = await this.getProvider();
|
|
57
|
-
}
|
|
58
|
-
async getSnaps() {
|
|
59
|
-
return (await this.request({
|
|
60
|
-
method: "wallet_getSnaps",
|
|
61
|
-
}));
|
|
62
|
-
}
|
|
63
|
-
async requestSnap(id) {
|
|
64
|
-
await this.request({
|
|
65
|
-
method: "wallet_requestSnaps",
|
|
66
|
-
params: {
|
|
67
|
-
[id]: {},
|
|
68
|
-
},
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
async getWallet() {
|
|
72
|
-
return this.invokeSnap({
|
|
73
|
-
method: "xrpl_getAccount",
|
|
74
|
-
params: undefined,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
getTransactionHashFromTxResponse(submittedTx) {
|
|
78
|
-
if (submittedTx.engine_result === "tesSUCCESS") {
|
|
79
|
-
return submittedTx.tx_json.hash;
|
|
80
|
-
}
|
|
81
|
-
throw new Error(`XRP transaction failed: ${submittedTx.engine_result}`);
|
|
82
|
-
}
|
|
83
|
-
async send({ amount, destination, destinationTag, }) {
|
|
84
|
-
const { account } = await this.getWallet();
|
|
85
|
-
const submittedTx = await this.invokeSnap({
|
|
86
|
-
method: "xrpl_signAndSubmit",
|
|
87
|
-
params: {
|
|
88
|
-
TransactionType: "Payment",
|
|
89
|
-
Account: account,
|
|
90
|
-
Destination: destination,
|
|
91
|
-
DestinationTag: destinationTag,
|
|
92
|
-
Amount: amount,
|
|
93
|
-
},
|
|
94
|
-
});
|
|
95
|
-
return this.getTransactionHashFromTxResponse(submittedTx);
|
|
96
|
-
}
|
|
97
|
-
async getStoredNetworks() {
|
|
98
|
-
return this.invokeSnap({
|
|
99
|
-
method: "xrpl_getStoredNetworks",
|
|
100
|
-
params: undefined,
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
async getActiveNetwork() {
|
|
104
|
-
return this.invokeSnap({
|
|
105
|
-
method: "xrpl_getActiveNetwork",
|
|
106
|
-
params: undefined,
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
async changeNetwork(chainId) {
|
|
110
|
-
return this.invokeSnap({
|
|
111
|
-
method: "xrpl_changeNetwork",
|
|
112
|
-
params: { chainId },
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
async invokeSnap({ params, method, }) {
|
|
116
|
-
return this.request({
|
|
117
|
-
method: "wallet_invokeSnap",
|
|
118
|
-
params: {
|
|
119
|
-
snapId: snapId,
|
|
120
|
-
request: {
|
|
121
|
-
method,
|
|
122
|
-
params,
|
|
123
|
-
},
|
|
124
|
-
},
|
|
125
|
-
});
|
|
126
|
-
}
|
|
127
|
-
async getProvider() {
|
|
128
|
-
if (typeof window === "undefined") {
|
|
129
|
-
return null;
|
|
130
|
-
}
|
|
131
|
-
if (await this.hasSnapsSupport(window.ethereum)) {
|
|
132
|
-
return window.ethereum;
|
|
133
|
-
}
|
|
134
|
-
if (window.ethereum?.detected) {
|
|
135
|
-
for (const provider of window.ethereum.detected) {
|
|
136
|
-
if (await this.hasSnapsSupport(provider)) {
|
|
137
|
-
return provider;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
if (window.ethereum?.providers) {
|
|
142
|
-
for (const provider of window.ethereum.providers) {
|
|
143
|
-
if (await this.hasSnapsSupport(provider)) {
|
|
144
|
-
return provider;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
// Need to use EIP-6963 provider discovery because we need Metamask to be installed
|
|
149
|
-
// other wallets overriding Metamask won't work here because they don't support Metamask snaps
|
|
150
|
-
const eip6963Provider = await this.getMetamaskEIP6963Provider();
|
|
151
|
-
if (eip6963Provider && (await this.hasSnapsSupport(eip6963Provider))) {
|
|
152
|
-
return eip6963Provider;
|
|
153
|
-
}
|
|
154
|
-
return null;
|
|
155
|
-
}
|
|
156
|
-
async hasSnapsSupport(provider = window.ethereum) {
|
|
157
|
-
try {
|
|
158
|
-
await provider.request({
|
|
159
|
-
method: "wallet_getSnaps",
|
|
160
|
-
});
|
|
161
|
-
return true;
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
return false;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
async getMetamaskEIP6963Provider() {
|
|
168
|
-
return new Promise((rawResolve) => {
|
|
169
|
-
// Timeout looking for providers after 500ms
|
|
170
|
-
const timeout = setTimeout(() => {
|
|
171
|
-
resolve(null);
|
|
172
|
-
}, 500);
|
|
173
|
-
function resolve(provider) {
|
|
174
|
-
// Resolve the promise with a Metamask provider and clean up the timeout.
|
|
175
|
-
window.removeEventListener(EIP6963EventNames.Announce, onAnnounceProvider);
|
|
176
|
-
clearTimeout(timeout);
|
|
177
|
-
rawResolve(provider);
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Listener for the EIP6963 announceProvider event.
|
|
181
|
-
*
|
|
182
|
-
* Resolves the promise if a Metamask provider is found.
|
|
183
|
-
*
|
|
184
|
-
* @param event - The EIP6963 announceProvider event.
|
|
185
|
-
* @param event.detail - The details of the EIP6963 announceProvider event.
|
|
186
|
-
*/
|
|
187
|
-
function onAnnounceProvider({ detail }) {
|
|
188
|
-
const { info, provider } = detail;
|
|
189
|
-
if (info.rdns.includes("io.metamask")) {
|
|
190
|
-
resolve(provider);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
window.addEventListener(EIP6963EventNames.Announce, onAnnounceProvider);
|
|
194
|
-
window.dispatchEvent(new Event(EIP6963EventNames.Request));
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
async request({ method, params }) {
|
|
198
|
-
if (!this.provider) {
|
|
199
|
-
throw new Error("XRP Metamask provider not initialized");
|
|
200
|
-
}
|
|
201
|
-
return this.provider.request({ method, params });
|
|
202
|
-
}
|
|
203
|
-
}
|
|
204
|
-
//# sourceMappingURL=XrpMetamaskSnap.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"XrpMetamaskSnap.js","sourceRoot":"","sources":["../../../../src/core/connectors/xrp/XrpMetamaskSnap.ts"],"names":[],"mappings":"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"}
|
package/dist/core/types/xrp.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export interface Payment {
|
|
2
|
-
Account: string;
|
|
3
|
-
Amount: string;
|
|
4
|
-
Destination: string;
|
|
5
|
-
Memos: Memo[];
|
|
6
|
-
SigningPubKey: string;
|
|
7
|
-
TransactionType: string;
|
|
8
|
-
TxnSignature: string;
|
|
9
|
-
hash: string;
|
|
10
|
-
}
|
|
11
|
-
interface Memo {
|
|
12
|
-
Memo: {
|
|
13
|
-
MemoData: string;
|
|
14
|
-
MemoType: string;
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
export type XrpPaymentWithHash = Payment & {
|
|
18
|
-
hash?: string;
|
|
19
|
-
};
|
|
20
|
-
export type HexString = string & {
|
|
21
|
-
readonly __hexString__: unique symbol;
|
|
22
|
-
};
|
|
23
|
-
export {};
|
package/dist/core/types/xrp.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"xrp.js","sourceRoot":"","sources":["../../../src/core/types/xrp.ts"],"names":[],"mappings":""}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
interface XrplConfig {
|
|
2
|
-
XRPL_AXELAR_MULTISIG_ADDRESS: string;
|
|
3
|
-
XRPL_EVM_ITS_ADDRESS: string;
|
|
4
|
-
XRP_ITS_TOKEN_ID: string;
|
|
5
|
-
XRPL_RPC_URL: string;
|
|
6
|
-
XRPL_EVM_RPC_URL: string;
|
|
7
|
-
AXELAR_EXPLORER_URL: string;
|
|
8
|
-
AXELARSCAN_API: string;
|
|
9
|
-
XRPL_EVM_EXPLORER_URL: string;
|
|
10
|
-
XRPL_EXPLORER_URL: string;
|
|
11
|
-
}
|
|
12
|
-
export declare enum XrplEnv {
|
|
13
|
-
DEVNET = 0,
|
|
14
|
-
TESTNET = 1
|
|
15
|
-
}
|
|
16
|
-
export declare const XRPL_ENV: XrplEnv;
|
|
17
|
-
export declare const XRPL_CONFIG: XrplConfig;
|
|
18
|
-
export declare const XRPL_EVM_CHAIN_ID: string;
|
|
19
|
-
export declare const XRPL_CHAIN_ID: string;
|
|
20
|
-
export declare const AXELAR_XRPL_EVM_CHAIN_ID: string;
|
|
21
|
-
export {};
|
package/dist/core/xrp/config.js
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
export var XrplEnv;
|
|
2
|
-
(function (XrplEnv) {
|
|
3
|
-
XrplEnv[XrplEnv["DEVNET"] = 0] = "DEVNET";
|
|
4
|
-
XrplEnv[XrplEnv["TESTNET"] = 1] = "TESTNET";
|
|
5
|
-
// MAINNET,
|
|
6
|
-
})(XrplEnv || (XrplEnv = {}));
|
|
7
|
-
const XRPL_DEVNET_CONFIG = {
|
|
8
|
-
XRPL_AXELAR_MULTISIG_ADDRESS: "rGAbJZEzU6WaYv5y1LfyN7LBBcQJ3TxsKC",
|
|
9
|
-
XRPL_EVM_ITS_ADDRESS: "0x1a7580C2ef5D485E069B7cf1DF9f6478603024d3",
|
|
10
|
-
XRP_ITS_TOKEN_ID: "0xbfb47d376947093b7858c1c59a4154dd291d5b2251cb56a6f7159a070f0bd518",
|
|
11
|
-
// TODO: currently there's no public RPC for XRPL devnet
|
|
12
|
-
// so we need to change the implementation to use websockets instead
|
|
13
|
-
XRPL_RPC_URL: "wss://s.devnet.rippletest.net:51233",
|
|
14
|
-
XRPL_EVM_RPC_URL: "https://rpc.xrplevm.org",
|
|
15
|
-
AXELAR_EXPLORER_URL: "https://devnet-amplifier.axelarscan.io",
|
|
16
|
-
AXELARSCAN_API: "https://devnet-amplifier.api.axelarscan.io",
|
|
17
|
-
XRPL_EXPLORER_URL: "https://devnet.xrpl.org",
|
|
18
|
-
XRPL_EVM_EXPLORER_URL: "https://explorer.xrplevm.org",
|
|
19
|
-
};
|
|
20
|
-
const XRPL_TESTNET_CONFIG = {
|
|
21
|
-
XRP_ITS_TOKEN_ID: "0xa2946b60f1e20ff37404075fc85ea63d42e2b1fc9ce5ef3fff5223e06e7ff4c9",
|
|
22
|
-
XRPL_AXELAR_MULTISIG_ADDRESS: "rsCPY4vwEiGogSraV9FeRZXca6gUBWZkhg",
|
|
23
|
-
XRPL_EVM_ITS_ADDRESS: "0x3b1ca8B18698409fF95e29c506ad7014980F0193",
|
|
24
|
-
XRPL_RPC_URL: "https://testnet.xrpl-labs.com/",
|
|
25
|
-
XRPL_EVM_RPC_URL: "https://rpc.testnet.xrplevm.org/",
|
|
26
|
-
AXELAR_EXPLORER_URL: "https://testnet.axelarscan.io",
|
|
27
|
-
AXELARSCAN_API: "https://testnet.api.axelarscan.io",
|
|
28
|
-
XRPL_EXPLORER_URL: "https://testnet.xrpl.org",
|
|
29
|
-
XRPL_EVM_EXPLORER_URL: "https://explorer.testnet.xrplevm.org",
|
|
30
|
-
};
|
|
31
|
-
const AXELAR_XRPL_EVM_CHAIN_ID_MAP = {
|
|
32
|
-
[XrplEnv.DEVNET]: "xrpl-evm-devnet",
|
|
33
|
-
[XrplEnv.TESTNET]: "xrpl-evm-test-1",
|
|
34
|
-
};
|
|
35
|
-
const XRPL_EVM_CHAIN_ID_MAP = {
|
|
36
|
-
[XrplEnv.DEVNET]: "1440002",
|
|
37
|
-
[XrplEnv.TESTNET]: "1449000",
|
|
38
|
-
};
|
|
39
|
-
const XRPL_CHAIN_ID_MAP = {
|
|
40
|
-
[XrplEnv.DEVNET]: "xrpl-dev",
|
|
41
|
-
[XrplEnv.TESTNET]: "xrpl-test-1",
|
|
42
|
-
};
|
|
43
|
-
const XRPL_CONFIG_MAP = {
|
|
44
|
-
[XrplEnv.DEVNET]: XRPL_DEVNET_CONFIG,
|
|
45
|
-
[XrplEnv.TESTNET]: XRPL_TESTNET_CONFIG,
|
|
46
|
-
// [XrplEnv.MAINNET]: XRPL_MAINNET_CONFIG,
|
|
47
|
-
};
|
|
48
|
-
export const XRPL_ENV = XrplEnv.TESTNET;
|
|
49
|
-
export const XRPL_CONFIG = XRPL_CONFIG_MAP[XRPL_ENV];
|
|
50
|
-
export const XRPL_EVM_CHAIN_ID = XRPL_EVM_CHAIN_ID_MAP[XRPL_ENV];
|
|
51
|
-
export const XRPL_CHAIN_ID = XRPL_CHAIN_ID_MAP[XRPL_ENV];
|
|
52
|
-
export const AXELAR_XRPL_EVM_CHAIN_ID = AXELAR_XRPL_EVM_CHAIN_ID_MAP[XRPL_ENV];
|
|
53
|
-
//# sourceMappingURL=config.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/core/xrp/config.ts"],"names":[],"mappings":"AAcA,MAAM,CAAN,IAAY,OAIX;AAJD,WAAY,OAAO;IACjB,yCAAM,CAAA;IACN,2CAAO,CAAA;IACP,WAAW;AACb,CAAC,EAJW,OAAO,KAAP,OAAO,QAIlB;AAED,MAAM,kBAAkB,GAAe;IACrC,4BAA4B,EAAE,oCAAoC;IAClE,oBAAoB,EAAE,4CAA4C;IAClE,gBAAgB,EACd,oEAAoE;IAEtE,wDAAwD;IACxD,oEAAoE;IACpE,YAAY,EAAE,qCAAqC;IACnD,gBAAgB,EAAE,yBAAyB;IAE3C,mBAAmB,EAAE,wCAAwC;IAC7D,cAAc,EAAE,4CAA4C;IAC5D,iBAAiB,EAAE,yBAAyB;IAC5C,qBAAqB,EAAE,8BAA8B;CACtD,CAAC;AAEF,MAAM,mBAAmB,GAAe;IACtC,gBAAgB,EACd,oEAAoE;IACtE,4BAA4B,EAAE,oCAAoC;IAClE,oBAAoB,EAAE,4CAA4C;IAElE,YAAY,EAAE,gCAAgC;IAC9C,gBAAgB,EAAE,kCAAkC;IAEpD,mBAAmB,EAAE,+BAA+B;IACpD,cAAc,EAAE,mCAAmC;IACnD,iBAAiB,EAAE,0BAA0B;IAC7C,qBAAqB,EAAE,sCAAsC;CAC9D,CAAC;AAEF,MAAM,4BAA4B,GAA4B;IAC5D,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,iBAAiB;IACnC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,iBAAiB;CACrC,CAAC;AACF,MAAM,qBAAqB,GAA4B;IACrD,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS;IAC3B,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS;CAC7B,CAAC;AACF,MAAM,iBAAiB,GAA4B;IACjD,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,UAAU;IAC5B,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,aAAa;CACjC,CAAC;AAEF,MAAM,eAAe,GAAgC;IACnD,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,kBAAkB;IACpC,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,mBAAmB;IACtC,0CAA0C;CAC3C,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAY,OAAO,CAAC,OAAO,CAAC;AAEjD,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAEzD,MAAM,CAAC,MAAM,wBAAwB,GAAG,4BAA4B,CAAC,QAAQ,CAAC,CAAC"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { ConnectWalletResult, XrpConnector, XrpWallet } from "../../core/types/wallet";
|
|
2
|
-
export declare const useXrp: () => {
|
|
3
|
-
connectXrp: import("@tanstack/react-query").UseMutationResult<ConnectWalletResult, unknown, {
|
|
4
|
-
wallet: XrpWallet;
|
|
5
|
-
}, unknown>;
|
|
6
|
-
signer: XrpConnector | undefined;
|
|
7
|
-
};
|
package/dist/hooks/xrp/useXrp.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { ChainType } from "@0xsquid/squid-types";
|
|
2
|
-
import { useMutation } from "@tanstack/react-query";
|
|
3
|
-
import { useMemo } from "react";
|
|
4
|
-
import { useWalletStore } from "../store/useWalletStore";
|
|
5
|
-
export const useXrp = () => {
|
|
6
|
-
const connectedWallet = useWalletStore((state) => state.connectedWalletsByChainType[ChainType.XRP]);
|
|
7
|
-
const connectXrp = useMutation(async ({ wallet }) => {
|
|
8
|
-
const xrpConnectedAddress = await wallet.connector.connect();
|
|
9
|
-
return {
|
|
10
|
-
wallet,
|
|
11
|
-
address: xrpConnectedAddress,
|
|
12
|
-
};
|
|
13
|
-
});
|
|
14
|
-
const signer = useMemo(() => {
|
|
15
|
-
return connectedWallet?.wallet?.connector;
|
|
16
|
-
}, [connectedWallet?.wallet?.connector]);
|
|
17
|
-
return {
|
|
18
|
-
connectXrp,
|
|
19
|
-
signer,
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=useXrp.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useXrp.js","sourceRoot":"","sources":["../../../src/hooks/xrp/useXrp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAMhC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,EAAE;IACzB,MAAM,eAAe,GAAG,cAAc,CACpC,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,2BAA2B,CAAC,SAAS,CAAC,GAAG,CAKlC,CAChB,CAAC;IAEF,MAAM,UAAU,GAAG,WAAW,CAC5B,KAAK,EAAE,EAAE,MAAM,EAAyB,EAAgC,EAAE;QACxE,MAAM,mBAAmB,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;QAE7D,OAAO;YACL,MAAM;YACN,OAAO,EAAE,mBAAmB;SAC7B,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,MAAM,GAA6B,OAAO,CAAC,GAAG,EAAE;QACpD,OAAO,eAAe,EAAE,MAAM,EAAE,SAAS,CAAC;IAC5C,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAEzC,OAAO;QACL,UAAU;QACV,MAAM;KACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare function useXRPPrice(): import("@tanstack/react-query").UseQueryResult<number, unknown>;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { useQuery } from "@tanstack/react-query";
|
|
2
|
-
import { getXRPPrice } from "../../services/external/rpcService";
|
|
3
|
-
export function useXRPPrice() {
|
|
4
|
-
return useQuery(["xrp-price"], {
|
|
5
|
-
queryFn: getXRPPrice,
|
|
6
|
-
refetchInterval: 60 * 1000,
|
|
7
|
-
staleTime: 60 * 1000,
|
|
8
|
-
cacheTime: 60 * 1000,
|
|
9
|
-
refetchOnWindowFocus: true,
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
//# sourceMappingURL=useXrpPrice.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useXrpPrice.js","sourceRoot":"","sources":["../../../src/hooks/xrp/useXrpPrice.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oCAAoC,CAAC;AAEjE,MAAM,UAAU,WAAW;IACzB,OAAO,QAAQ,CAAC,CAAC,WAAW,CAAC,EAAE;QAC7B,OAAO,EAAE,WAAW;QACpB,eAAe,EAAE,EAAE,GAAG,IAAI;QAC1B,SAAS,EAAE,EAAE,GAAG,IAAI;QACpB,SAAS,EAAE,EAAE,GAAG,IAAI;QACpB,oBAAoB,EAAE,IAAI;KAC3B,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { ethers, type TransactionResponse } from "ethers";
|
|
2
|
-
import { HexString, Payment } from "../../core/types/xrp";
|
|
3
|
-
/**
|
|
4
|
-
* Validates that a given address is a valid X-Address or a valid classic address.
|
|
5
|
-
*
|
|
6
|
-
* XRP has two types of addresses:
|
|
7
|
-
* - X-addresses (e.g XVfC9...pokKH)
|
|
8
|
-
* - Classic addresses (e.g r4bA...WHCG)
|
|
9
|
-
*/
|
|
10
|
-
export declare function isXrpAddressValid(address: string | undefined): boolean;
|
|
11
|
-
/**
|
|
12
|
-
* Checks if the given chainId is an XRP chain (either XRPL or XRPL EVM)
|
|
13
|
-
*/
|
|
14
|
-
export declare function isXrpChain(chainId: string | undefined): boolean;
|
|
15
|
-
export declare function sendInterchainTransfer({ destinationAddress, fromAmount, signer, }: {
|
|
16
|
-
destinationAddress: string;
|
|
17
|
-
fromAmount: string;
|
|
18
|
-
signer: ethers.Signer;
|
|
19
|
-
}): Promise<TransactionResponse>;
|
|
20
|
-
export declare function hex(str: string | Uint8Array): string;
|
|
21
|
-
export declare function isHexString(str: string): boolean;
|
|
22
|
-
export declare function asHexString(str: string): HexString;
|
|
23
|
-
export declare function buildXrplPayment({ fromAmount, sourceAddress, destinationAddress, }: {
|
|
24
|
-
fromAmount: string;
|
|
25
|
-
sourceAddress: string;
|
|
26
|
-
destinationAddress: string;
|
|
27
|
-
}): Partial<Payment>;
|
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { ethers, parseUnits } from "ethers";
|
|
2
|
-
import { decodeAccountID, isValidClassicAddress, isValidXAddress, } from "ripple-address-codec";
|
|
3
|
-
import { CHAIN_IDS } from "../../core/constants";
|
|
4
|
-
import { AXELAR_XRPL_EVM_CHAIN_ID, XRPL_CONFIG } from "../../core/xrp/config";
|
|
5
|
-
import { parseToBigInt } from "./numberService";
|
|
6
|
-
/**
|
|
7
|
-
* Validates that a given address is a valid X-Address or a valid classic address.
|
|
8
|
-
*
|
|
9
|
-
* XRP has two types of addresses:
|
|
10
|
-
* - X-addresses (e.g XVfC9...pokKH)
|
|
11
|
-
* - Classic addresses (e.g r4bA...WHCG)
|
|
12
|
-
*/
|
|
13
|
-
export function isXrpAddressValid(address) {
|
|
14
|
-
if (!address)
|
|
15
|
-
return false;
|
|
16
|
-
return isValidXAddress(address) || isValidClassicAddress(address);
|
|
17
|
-
}
|
|
18
|
-
/**
|
|
19
|
-
* Checks if the given chainId is an XRP chain (either XRPL or XRPL EVM)
|
|
20
|
-
*/
|
|
21
|
-
export function isXrpChain(chainId) {
|
|
22
|
-
if (!chainId)
|
|
23
|
-
return false;
|
|
24
|
-
return [CHAIN_IDS.XRPL, CHAIN_IDS.XRPL_EVM].includes(chainId);
|
|
25
|
-
}
|
|
26
|
-
export async function sendInterchainTransfer({ destinationAddress, fromAmount, signer, }) {
|
|
27
|
-
if (!isXrpAddressValid(destinationAddress)) {
|
|
28
|
-
throw new Error("Destination address is not a valid XRP address");
|
|
29
|
-
}
|
|
30
|
-
const ITS_ABI = [
|
|
31
|
-
"function interchainTransfer(bytes32 tokenId, string destinationChain, bytes destinationAddress, uint256 amount, bytes metadata, uint256 gasValue) external",
|
|
32
|
-
];
|
|
33
|
-
const itsContract = new ethers.Contract(XRPL_CONFIG.XRPL_EVM_ITS_ADDRESS, ITS_ABI, signer);
|
|
34
|
-
const destinationAddressAsHex = convertXrplAddressToHex(destinationAddress);
|
|
35
|
-
const tx = await itsContract.interchainTransfer(XRPL_CONFIG.XRP_ITS_TOKEN_ID, CHAIN_IDS.XRPL, destinationAddressAsHex, fromAmount, "0x", "100000000000000000", {
|
|
36
|
-
value: parseUnits("0.1", 18),
|
|
37
|
-
});
|
|
38
|
-
return tx;
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Converts an XRPL address to a hex string
|
|
42
|
-
* to be able to send it through Axelar ITS
|
|
43
|
-
*/
|
|
44
|
-
function convertXrplAddressToHex(address) {
|
|
45
|
-
return `0x${hex(decodeAccountID(address))}`;
|
|
46
|
-
}
|
|
47
|
-
export function hex(str) {
|
|
48
|
-
return Buffer.from(str).toString("hex");
|
|
49
|
-
}
|
|
50
|
-
export function isHexString(str) {
|
|
51
|
-
return /^[a-fA-F0-9]+$/.test(str);
|
|
52
|
-
}
|
|
53
|
-
export function asHexString(str) {
|
|
54
|
-
if (!isHexString(str)) {
|
|
55
|
-
throw new Error(`Invalid hex string: ${str}`);
|
|
56
|
-
}
|
|
57
|
-
return str;
|
|
58
|
-
}
|
|
59
|
-
export function buildXrplPayment({ fromAmount, sourceAddress, destinationAddress, }) {
|
|
60
|
-
const fromAmountBn = parseToBigInt(fromAmount, 6).toString();
|
|
61
|
-
const destinationAddressAsHex = asHexString(
|
|
62
|
-
// Remove the 0x prefix
|
|
63
|
-
destinationAddress.replace(/^0x/, ""));
|
|
64
|
-
return {
|
|
65
|
-
TransactionType: "Payment",
|
|
66
|
-
Account: sourceAddress,
|
|
67
|
-
Amount: fromAmountBn,
|
|
68
|
-
Destination: XRPL_CONFIG.XRPL_AXELAR_MULTISIG_ADDRESS,
|
|
69
|
-
Memos: [
|
|
70
|
-
{
|
|
71
|
-
Memo: {
|
|
72
|
-
MemoType: hex("destination_address"),
|
|
73
|
-
MemoData: destinationAddressAsHex,
|
|
74
|
-
},
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
Memo: {
|
|
78
|
-
MemoType: hex("destination_chain"),
|
|
79
|
-
MemoData: hex(AXELAR_XRPL_EVM_CHAIN_ID), // or "avalanche-fuji",
|
|
80
|
-
},
|
|
81
|
-
},
|
|
82
|
-
{ Memo: { MemoType: hex("gas_fee_amount"), MemoData: "00" } }, // Always zero, for now
|
|
83
|
-
],
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
//# sourceMappingURL=xrpService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"xrpService.js","sourceRoot":"","sources":["../../../src/services/internal/xrpService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import { AxelarRouteAction, RouteActionStatus, SquidTransactionStatus, } from "@0xsquid/squid-types";
|
|
2
|
-
import { CHAIN_IDS } from "../../core/constants";
|
|
3
|
-
import { AXELAR_XRPL_EVM_CHAIN_ID, XRPL_CONFIG } from "../../core/xrp/config";
|
|
4
|
-
const parseChainId = (chainId) => {
|
|
5
|
-
// Parse chain ID from Axelar status response to the format used by the widget
|
|
6
|
-
if (chainId === AXELAR_XRPL_EVM_CHAIN_ID) {
|
|
7
|
-
return CHAIN_IDS.XRPL_EVM;
|
|
8
|
-
}
|
|
9
|
-
return chainId;
|
|
10
|
-
};
|
|
11
|
-
async function searchGmp(txHash) {
|
|
12
|
-
const res = await fetch(`${XRPL_CONFIG.AXELARSCAN_API}/gmp/searchGMP`, {
|
|
13
|
-
method: "POST",
|
|
14
|
-
body: JSON.stringify({
|
|
15
|
-
txHash,
|
|
16
|
-
}),
|
|
17
|
-
});
|
|
18
|
-
const data = await res.json();
|
|
19
|
-
return data;
|
|
20
|
-
}
|
|
21
|
-
export const getAxelarXrpTxStatus = async ({ txHash, }) => {
|
|
22
|
-
const data = await searchGmp(txHash);
|
|
23
|
-
const destTxHash = data.data[0].executed?.transactionHash;
|
|
24
|
-
if (destTxHash) {
|
|
25
|
-
const destData = await searchGmp(destTxHash);
|
|
26
|
-
return transformStatusResponse(data.data[0], destData.data[0]);
|
|
27
|
-
}
|
|
28
|
-
const status = transformStatusResponse(data.data[0], undefined);
|
|
29
|
-
return status;
|
|
30
|
-
};
|
|
31
|
-
function transformStatusResponse(sourceStatus, destStatus) {
|
|
32
|
-
const { routeStatus: destTxRouteStatus, squidStatus } = getStatus(destStatus);
|
|
33
|
-
const routeStatus = [
|
|
34
|
-
// source chain
|
|
35
|
-
{
|
|
36
|
-
chainId: parseChainId(sourceStatus.call?.chain),
|
|
37
|
-
action: AxelarRouteAction.CALL,
|
|
38
|
-
status: destTxRouteStatus,
|
|
39
|
-
txHash: sourceStatus.call?.id,
|
|
40
|
-
},
|
|
41
|
-
// destination chain
|
|
42
|
-
...(sourceStatus.callback
|
|
43
|
-
? [
|
|
44
|
-
{
|
|
45
|
-
chainId: parseChainId(sourceStatus.callback.returnValues.destinationChain),
|
|
46
|
-
action: AxelarRouteAction.CALL,
|
|
47
|
-
status: destTxRouteStatus,
|
|
48
|
-
txHash: destStatus?.executed?.transactionHash ?? "",
|
|
49
|
-
},
|
|
50
|
-
]
|
|
51
|
-
: []),
|
|
52
|
-
];
|
|
53
|
-
const status = {
|
|
54
|
-
id: sourceStatus.call.receipt.transactionHash,
|
|
55
|
-
status: squidStatus,
|
|
56
|
-
gasStatus: sourceStatus.gas_status,
|
|
57
|
-
axelarTransactionUrl: `${XRPL_CONFIG.AXELAR_EXPLORER_URL}/gmp/${sourceStatus.call.receipt.transactionHash}`,
|
|
58
|
-
fromChain: sourceStatus.call
|
|
59
|
-
? {
|
|
60
|
-
transactionId: sourceStatus.call.transactionHash,
|
|
61
|
-
blockNumber: sourceStatus.call.blockNumber.toString(),
|
|
62
|
-
callEventStatus: sourceStatus.call.event,
|
|
63
|
-
callEventLog: [],
|
|
64
|
-
chainData: parseChainId(sourceStatus.call.chain),
|
|
65
|
-
destinationAddress: sourceStatus.call.returnValues.destinationAddress,
|
|
66
|
-
}
|
|
67
|
-
: undefined,
|
|
68
|
-
toChain: sourceStatus.executed
|
|
69
|
-
? {
|
|
70
|
-
transactionId: sourceStatus.executed.transactionHash,
|
|
71
|
-
blockNumber: sourceStatus.executed.blockNumber.toString(),
|
|
72
|
-
callEventStatus: "executed",
|
|
73
|
-
callEventLog: [],
|
|
74
|
-
chainData: sourceStatus.executed,
|
|
75
|
-
destinationAddress: sourceStatus.call.returnValues.destinationAddress,
|
|
76
|
-
}
|
|
77
|
-
: undefined,
|
|
78
|
-
timeSpent: sourceStatus.time_spent || {},
|
|
79
|
-
squidTransactionStatus: squidStatus,
|
|
80
|
-
routeStatus,
|
|
81
|
-
};
|
|
82
|
-
return status;
|
|
83
|
-
}
|
|
84
|
-
function getStatus(input) {
|
|
85
|
-
switch (input?.status) {
|
|
86
|
-
case "executed":
|
|
87
|
-
return {
|
|
88
|
-
routeStatus: RouteActionStatus.SUCCESS,
|
|
89
|
-
squidStatus: SquidTransactionStatus.SUCCESS,
|
|
90
|
-
};
|
|
91
|
-
case "called":
|
|
92
|
-
case "executing":
|
|
93
|
-
default:
|
|
94
|
-
return {
|
|
95
|
-
routeStatus: RouteActionStatus.AWAITING,
|
|
96
|
-
squidStatus: SquidTransactionStatus.ONGOING,
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
//# sourceMappingURL=xrpStatusService.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"xrpStatusService.js","sourceRoot":"","sources":["../../../src/services/internal/xrpStatusService.ts"],"names":[],"mappings":"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"}
|