@layerswap/wallet-fuel 1.0.0 → 1.1.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/esm/FuelProvider.js +11 -2
- package/dist/esm/fuelGasProvider.js +9 -2
- package/dist/esm/index.js +42 -3
- package/dist/esm/transferProvider/useFuelTransfer.js +57 -0
- package/dist/esm/useFuelConnection.js +10 -37
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/FuelProvider.d.ts +2 -1
- package/dist/types/FuelProvider.d.ts.map +1 -1
- package/dist/types/fuelGasProvider.d.ts.map +1 -1
- package/dist/types/index.d.ts +6 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/transferProvider/transactionBuilder.d.ts.map +1 -0
- package/dist/types/transferProvider/useFuelTransfer.d.ts +3 -0
- package/dist/types/transferProvider/useFuelTransfer.d.ts.map +1 -0
- package/dist/types/useFuelConnection.d.ts.map +1 -1
- package/package.json +8 -6
- package/dist/types/services/transferService/transactionBuilder.d.ts.map +0 -1
- /package/dist/esm/{services/transferService → transferProvider}/transactionBuilder.js +0 -0
- /package/dist/types/{services/transferService → transferProvider}/transactionBuilder.d.ts +0 -0
package/dist/esm/FuelProvider.js
CHANGED
|
@@ -6,9 +6,10 @@ import { FueletWalletConnector } from './connectors/fuelet-wallet';
|
|
|
6
6
|
import { FuelWalletConnector } from './connectors/fuel-wallet';
|
|
7
7
|
import { useSettingsState } from '@layerswap/widget/internal';
|
|
8
8
|
import { NetworkType } from '@layerswap/widget/types';
|
|
9
|
-
import { useMemo } from 'react';
|
|
9
|
+
import { useMemo, useContext } from 'react';
|
|
10
|
+
import { QueryClient, QueryClientContext, QueryClientProvider } from '@tanstack/react-query';
|
|
10
11
|
const HOST_URL = 'https://api.bako.global';
|
|
11
|
-
const
|
|
12
|
+
const Comp = ({ children }) => {
|
|
12
13
|
const { networks } = useSettingsState();
|
|
13
14
|
const fuelConfig = {
|
|
14
15
|
connectors: [
|
|
@@ -24,4 +25,12 @@ const FuelProviderWrapper = ({ children }) => {
|
|
|
24
25
|
})), [networks]);
|
|
25
26
|
return (_jsx(FuelProvider, { uiConfig: { suggestBridge: false }, theme: 'dark', fuelConfig: fuelConfig, networks: fuelNetworks, children: children }));
|
|
26
27
|
};
|
|
28
|
+
const queryClient = new QueryClient();
|
|
29
|
+
const FuelProviderWrapper = ({ children }) => {
|
|
30
|
+
const context = useContext(QueryClientContext);
|
|
31
|
+
if (context) {
|
|
32
|
+
return _jsx(Comp, { children: children });
|
|
33
|
+
}
|
|
34
|
+
return (_jsx(QueryClientProvider, { client: queryClient, children: _jsx(Comp, { children: children }) }));
|
|
35
|
+
};
|
|
27
36
|
export default FuelProviderWrapper;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import WatchdogAbi from './jsons/FUELWATCHDOG.json';
|
|
2
|
-
import { KnownInternalNames, formatUnits } from "@layerswap/widget/internal";
|
|
2
|
+
import { ErrorHandler, KnownInternalNames, formatUnits } from "@layerswap/widget/internal";
|
|
3
3
|
export class FuelGasProvider {
|
|
4
4
|
supportsNetwork(network) {
|
|
5
5
|
return (KnownInternalNames.Networks.FuelMainnet.includes(network.name) || KnownInternalNames.Networks.FuelTestnet.includes(network.name));
|
|
@@ -32,7 +32,14 @@ export class FuelGasProvider {
|
|
|
32
32
|
return { gas: formatedGas, token: network.token };
|
|
33
33
|
}
|
|
34
34
|
catch (e) {
|
|
35
|
-
|
|
35
|
+
const error = e;
|
|
36
|
+
ErrorHandler({
|
|
37
|
+
type: "GasProviderError",
|
|
38
|
+
message: error.message,
|
|
39
|
+
name: error.name,
|
|
40
|
+
stack: error.stack,
|
|
41
|
+
cause: error.cause
|
|
42
|
+
});
|
|
36
43
|
}
|
|
37
44
|
}
|
|
38
45
|
}
|
package/dist/esm/index.js
CHANGED
|
@@ -1,13 +1,52 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
1
2
|
import { FuelAddressUtilsProvider } from "./fuelAddressUtilsProvider";
|
|
2
3
|
import { FuelBalanceProvider } from "./fuelBalanceProvider";
|
|
3
4
|
import { FuelGasProvider } from "./fuelGasProvider";
|
|
4
5
|
import FuelProviderWrapper from "./FuelProvider";
|
|
5
6
|
import useFuelConnection from "./useFuelConnection";
|
|
7
|
+
import React from "react";
|
|
8
|
+
import { useFuelTransfer } from "./transferProvider/useFuelTransfer";
|
|
9
|
+
export function createFuelProvider(config = {}) {
|
|
10
|
+
const { customHook, balanceProviders, gasProviders, addressUtilsProviders, transferProviders } = config;
|
|
11
|
+
const WrapperComponent = ({ children }) => {
|
|
12
|
+
return (_jsx(FuelProviderWrapper, { children: children }));
|
|
13
|
+
};
|
|
14
|
+
const walletConnectionProvider = customHook || useFuelConnection;
|
|
15
|
+
const defaultBalanceProviders = [new FuelBalanceProvider()];
|
|
16
|
+
const finalBalanceProviders = balanceProviders !== undefined
|
|
17
|
+
? (Array.isArray(balanceProviders) ? balanceProviders : [balanceProviders])
|
|
18
|
+
: defaultBalanceProviders;
|
|
19
|
+
const defaultGasProviders = [new FuelGasProvider()];
|
|
20
|
+
const finalGasProviders = gasProviders !== undefined
|
|
21
|
+
? (Array.isArray(gasProviders) ? gasProviders : [gasProviders])
|
|
22
|
+
: defaultGasProviders;
|
|
23
|
+
const defaultAddressUtilsProviders = [new FuelAddressUtilsProvider()];
|
|
24
|
+
const finalAddressUtilsProviders = addressUtilsProviders !== undefined
|
|
25
|
+
? (Array.isArray(addressUtilsProviders) ? addressUtilsProviders : [addressUtilsProviders])
|
|
26
|
+
: defaultAddressUtilsProviders;
|
|
27
|
+
const defaultTransferProviders = [useFuelTransfer];
|
|
28
|
+
const finalTransferProviders = transferProviders !== undefined
|
|
29
|
+
? (Array.isArray(transferProviders) ? transferProviders : [transferProviders])
|
|
30
|
+
: defaultTransferProviders;
|
|
31
|
+
return {
|
|
32
|
+
id: "fuel",
|
|
33
|
+
wrapper: WrapperComponent,
|
|
34
|
+
walletConnectionProvider,
|
|
35
|
+
addressUtilsProvider: finalAddressUtilsProviders,
|
|
36
|
+
gasProvider: finalGasProviders,
|
|
37
|
+
balanceProvider: finalBalanceProviders,
|
|
38
|
+
transferProvider: finalTransferProviders,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* @deprecated Use createFuelProvider() instead. This export will be removed in a future version.
|
|
43
|
+
*/
|
|
6
44
|
export const FuelProvider = {
|
|
7
45
|
id: "fuel",
|
|
8
46
|
wrapper: FuelProviderWrapper,
|
|
9
47
|
walletConnectionProvider: useFuelConnection,
|
|
10
|
-
addressUtilsProvider: new FuelAddressUtilsProvider(),
|
|
11
|
-
|
|
12
|
-
|
|
48
|
+
addressUtilsProvider: [new FuelAddressUtilsProvider()],
|
|
49
|
+
gasProvider: [new FuelGasProvider()],
|
|
50
|
+
balanceProvider: [new FuelBalanceProvider()],
|
|
51
|
+
transferProvider: [useFuelTransfer],
|
|
13
52
|
};
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { ActionMessageType } from "@layerswap/widget/types";
|
|
2
|
+
import { useFuel } from '@fuels/react';
|
|
3
|
+
import { Provider } from '@fuel-ts/account';
|
|
4
|
+
import { transactionBuilder } from "./transactionBuilder";
|
|
5
|
+
import { KnownInternalNames } from "@layerswap/widget/internal";
|
|
6
|
+
const supportedNetworks = [
|
|
7
|
+
KnownInternalNames.Networks.FuelTestnet,
|
|
8
|
+
KnownInternalNames.Networks.FuelDevnet,
|
|
9
|
+
KnownInternalNames.Networks.FuelMainnet
|
|
10
|
+
];
|
|
11
|
+
export function useFuelTransfer() {
|
|
12
|
+
const { fuel } = useFuel();
|
|
13
|
+
return {
|
|
14
|
+
supportsNetwork(network) {
|
|
15
|
+
return supportedNetworks.includes(network.name);
|
|
16
|
+
},
|
|
17
|
+
async executeTransfer(params) {
|
|
18
|
+
if (!fuel) {
|
|
19
|
+
throw new Error("Fuel not initialized");
|
|
20
|
+
}
|
|
21
|
+
const { callData, network, selectedWallet, swapId } = params;
|
|
22
|
+
const fuelProvider = new Provider(network.node_url);
|
|
23
|
+
const fuelWallet = await fuel.getWallet(selectedWallet.address, fuelProvider);
|
|
24
|
+
if (!fuelWallet) {
|
|
25
|
+
throw new Error("Fuel wallet not found");
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const scriptTransaction = await transactionBuilder({ fuelWallet, callData });
|
|
29
|
+
await fuelProvider.simulate(scriptTransaction);
|
|
30
|
+
const transactionResponse = await fuelWallet.sendTransaction(scriptTransaction);
|
|
31
|
+
if (swapId && transactionResponse) {
|
|
32
|
+
return transactionResponse.id;
|
|
33
|
+
}
|
|
34
|
+
throw new Error("No transaction ID returned");
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
const e = new Error();
|
|
38
|
+
e.message = error.message;
|
|
39
|
+
if (error.message === "The account(s) sending the transaction don't have enough funds to cover the transaction."
|
|
40
|
+
|| error.message === "the target cannot be met due to no coins available or exceeding the 255 coin limit.") {
|
|
41
|
+
e.name = ActionMessageType.InsufficientFunds;
|
|
42
|
+
throw e;
|
|
43
|
+
}
|
|
44
|
+
else if (error.message === "Request cancelled without user response!"
|
|
45
|
+
|| error.message === "User rejected the transaction!"
|
|
46
|
+
|| error.message === "User canceled sending transaction") {
|
|
47
|
+
e.name = ActionMessageType.TransactionRejected;
|
|
48
|
+
throw e;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
e.name = ActionMessageType.UnexpectedErrorMessage;
|
|
52
|
+
throw e;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { useConnectors, useFuel as useGlobalFuel
|
|
2
|
-
import { FuelConnectorEventTypes
|
|
1
|
+
import { useConnectors, useFuel as useGlobalFuel } from '@fuels/react';
|
|
2
|
+
import { FuelConnectorEventTypes } from '@fuel-ts/account';
|
|
3
3
|
import { Address } from '@fuel-ts/address';
|
|
4
4
|
import { useWalletStore, sleep, KnownInternalNames } from "@layerswap/widget/internal";
|
|
5
5
|
import { useEffect, useMemo } from "react";
|
|
6
|
-
import { transactionBuilder } from "./services/transferService/transactionBuilder";
|
|
7
6
|
import { BAKO_STATE } from "./connectors/bako-safe/Bako";
|
|
8
|
-
import { TransactionMessageType } from "@layerswap/widget/types";
|
|
9
7
|
import { resolveFuelWalletConnectorIcon } from './utils';
|
|
8
|
+
import { useFuelTransfer } from './transferProvider/useFuelTransfer';
|
|
10
9
|
export default function useFuelConnection({ networks }) {
|
|
11
10
|
const commonSupportedNetworks = [
|
|
12
11
|
KnownInternalNames.Networks.FuelTestnet,
|
|
@@ -51,7 +50,6 @@ export default function useFuelConnection({ networks }) {
|
|
|
51
50
|
await sleep(1000);
|
|
52
51
|
return await attemptConnection(true);
|
|
53
52
|
}
|
|
54
|
-
console.log(e);
|
|
55
53
|
throw new Error(e);
|
|
56
54
|
}
|
|
57
55
|
};
|
|
@@ -65,6 +63,7 @@ export default function useFuelConnection({ networks }) {
|
|
|
65
63
|
await fuelConnector.disconnect();
|
|
66
64
|
}
|
|
67
65
|
catch (e) {
|
|
66
|
+
//TODO: handle error
|
|
68
67
|
console.log(e);
|
|
69
68
|
}
|
|
70
69
|
finally {
|
|
@@ -81,6 +80,7 @@ export default function useFuelConnection({ networks }) {
|
|
|
81
80
|
}
|
|
82
81
|
}
|
|
83
82
|
catch (e) {
|
|
83
|
+
//TODO: handle error
|
|
84
84
|
console.log(e);
|
|
85
85
|
}
|
|
86
86
|
};
|
|
@@ -91,6 +91,7 @@ export default function useFuelConnection({ networks }) {
|
|
|
91
91
|
throw new Error('Could not switch account');
|
|
92
92
|
}
|
|
93
93
|
catch (e) {
|
|
94
|
+
//TODO: handle error
|
|
94
95
|
console.log(e);
|
|
95
96
|
}
|
|
96
97
|
};
|
|
@@ -104,41 +105,11 @@ export default function useFuelConnection({ networks }) {
|
|
|
104
105
|
throw new Error('Could not switch chain');
|
|
105
106
|
}
|
|
106
107
|
catch (e) {
|
|
108
|
+
//TODO: handle error
|
|
107
109
|
console.log(e);
|
|
108
110
|
}
|
|
109
111
|
};
|
|
110
|
-
const transfer =
|
|
111
|
-
const { callData, network, selectedWallet, swapId } = params;
|
|
112
|
-
const fuelProvider = new Provider(network.node_url);
|
|
113
|
-
const fuelWallet = await fuel.getWallet(selectedWallet.address, fuelProvider);
|
|
114
|
-
if (!fuelWallet)
|
|
115
|
-
throw Error("Fuel wallet not found");
|
|
116
|
-
try {
|
|
117
|
-
const scriptTransaction = await transactionBuilder({ fuelWallet, callData });
|
|
118
|
-
await fuelProvider.simulate(scriptTransaction);
|
|
119
|
-
const transactionResponse = await fuelWallet.sendTransaction(scriptTransaction);
|
|
120
|
-
if (swapId && transactionResponse) {
|
|
121
|
-
return transactionResponse.id;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
catch (error) {
|
|
125
|
-
const e = new Error();
|
|
126
|
-
e.message = error.message;
|
|
127
|
-
if (error === "The account(s) sending the transaction don't have enough funds to cover the transaction."
|
|
128
|
-
|| error === "the target cannot be met due to no coins available or exceeding the 255 coin limit.") {
|
|
129
|
-
error.name = TransactionMessageType.InsufficientFunds;
|
|
130
|
-
throw e;
|
|
131
|
-
}
|
|
132
|
-
else if (error === "Request cancelled without user response!" || error === "User rejected the transaction!" || error === "User canceled sending transaction") {
|
|
133
|
-
e.name = TransactionMessageType.TransactionRejected;
|
|
134
|
-
throw e;
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
e.name = TransactionMessageType.UexpectedErrorMessage;
|
|
138
|
-
throw e;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
};
|
|
112
|
+
const { executeTransfer: transfer } = useFuelTransfer();
|
|
142
113
|
const connectedConnectors = useMemo(() => connectors.filter(w => w.connected), [connectors]);
|
|
143
114
|
useEffect(() => {
|
|
144
115
|
(async () => {
|
|
@@ -163,6 +134,7 @@ export default function useFuelConnection({ networks }) {
|
|
|
163
134
|
}
|
|
164
135
|
}
|
|
165
136
|
catch (e) {
|
|
137
|
+
//TODO: handle error
|
|
166
138
|
console.log(e);
|
|
167
139
|
}
|
|
168
140
|
}
|
|
@@ -205,6 +177,7 @@ export default function useFuelConnection({ networks }) {
|
|
|
205
177
|
connectedWallets,
|
|
206
178
|
name,
|
|
207
179
|
id,
|
|
180
|
+
ready: connectors.length > 0
|
|
208
181
|
};
|
|
209
182
|
return provider;
|
|
210
183
|
}
|