@layerswap/wallet-starknet 1.2.1 → 1.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/esm/StarknetProvider.js +24 -28
- package/dist/esm/constants.js +4 -0
- package/dist/esm/index.js +13 -10
- package/dist/esm/starknetAddressUtilsProvider.js +12 -4
- package/dist/esm/useStarknetConnection.js +16 -23
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/StarknetProvider.d.ts +0 -2
- package/dist/types/StarknetProvider.d.ts.map +1 -1
- package/dist/types/constants.d.ts +4 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/index.d.ts +0 -8
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/starknetAddressUtilsProvider.d.ts +4 -3
- package/dist/types/starknetAddressUtilsProvider.d.ts.map +1 -1
- package/dist/types/useStarknetConnection.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -15,16 +15,9 @@ import { useEffect, useState } from "react";
|
|
|
15
15
|
import { mainnet, sepolia } from "@starknet-react/chains";
|
|
16
16
|
import { Connector, ConnectorNotConnectedError, UserNotConnectedError, StarknetConfig, publicProvider, useConnect, useDisconnect } from '@starknet-react/core';
|
|
17
17
|
import { KnownInternalNames, useSettingsState } from "@layerswap/widget/internal";
|
|
18
|
-
//@ts-ignore
|
|
19
|
-
import { ArgentMobileConnector } from "starknetkit/argentMobile";
|
|
20
|
-
// @ts-ignore
|
|
21
|
-
import { InjectedConnector } from "starknetkit/injected";
|
|
22
|
-
// @ts-ignore
|
|
23
|
-
import { WebWalletConnector } from "starknetkit/webwallet";
|
|
24
|
-
// @ts-ignore
|
|
25
|
-
import { ControllerConnector } from "starknetkit/controller";
|
|
26
18
|
import useStarknetConnection, { resolveStarknetWallet } from "./useStarknetConnection";
|
|
27
19
|
import { useStarknetStore } from "./starknetWalletStore";
|
|
20
|
+
let getInjectedWalletById;
|
|
28
21
|
class DiscoveryConnector extends Connector {
|
|
29
22
|
constructor(wallet, store) {
|
|
30
23
|
super();
|
|
@@ -72,11 +65,19 @@ class DiscoveryConnector extends Connector {
|
|
|
72
65
|
}
|
|
73
66
|
}
|
|
74
67
|
_DiscoveryConnector_wallet = new WeakMap(), _DiscoveryConnector_store = new WeakMap();
|
|
75
|
-
const StarknetProvider = ({ children
|
|
68
|
+
const StarknetProvider = ({ children }) => {
|
|
76
69
|
const [connectors, setConnectors] = useState([]);
|
|
77
|
-
const walletConnectConfig = walletConnectConfigs;
|
|
78
|
-
const WALLETCONNECT_PROJECT_ID = walletConnectConfig?.projectId;
|
|
79
70
|
const resolveConnectors = async () => {
|
|
71
|
+
// @ts-ignore
|
|
72
|
+
const injectedModule = await import("starknetkit/injected");
|
|
73
|
+
// @ts-ignore
|
|
74
|
+
const webWalletModule = await import("starknetkit/webwallet");
|
|
75
|
+
// @ts-ignore
|
|
76
|
+
const controllerModule = await import("starknetkit/controller");
|
|
77
|
+
const InjectedConnector = injectedModule.InjectedConnector;
|
|
78
|
+
const WebWalletConnector = webWalletModule.WebWalletConnector;
|
|
79
|
+
const ControllerConnector = controllerModule.ControllerConnector;
|
|
80
|
+
getInjectedWalletById = InjectedConnector?.getInjectedWallet;
|
|
80
81
|
const isSafari = typeof window !== "undefined"
|
|
81
82
|
? /^((?!chrome|android).)*safari/i.test(navigator.userAgent)
|
|
82
83
|
: false;
|
|
@@ -84,10 +85,8 @@ const StarknetProvider = ({ children, walletConnectConfigs }) => {
|
|
|
84
85
|
const isIOS = navigator.userAgent.match(/iPhone|iPad|iPod/i);
|
|
85
86
|
const defaultConnectors = [];
|
|
86
87
|
if (!isSafari) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
defaultConnectors.push(new InjectedConnector({ options: { id: "keplr" } }));
|
|
90
|
-
}
|
|
88
|
+
defaultConnectors.push(new InjectedConnector({ options: { id: "argentX" } }));
|
|
89
|
+
defaultConnectors.push(new InjectedConnector({ options: { id: "keplr" } }));
|
|
91
90
|
defaultConnectors.push(new InjectedConnector({ options: { id: "braavos" } }));
|
|
92
91
|
defaultConnectors.push(new InjectedConnector({ options: { id: "xverse" } }));
|
|
93
92
|
}
|
|
@@ -99,23 +98,20 @@ const StarknetProvider = ({ children, walletConnectConfigs }) => {
|
|
|
99
98
|
if (discoverWallets.length)
|
|
100
99
|
defaultConnectors.push(...discoverWallets.map(w => new DiscoveryConnector(w, isAndroid ? "android" : "ios")));
|
|
101
100
|
}
|
|
102
|
-
defaultConnectors.push(ArgentMobileConnector.init({
|
|
103
|
-
options: {
|
|
104
|
-
dappName: walletConnectConfig?.name || 'Layerswap',
|
|
105
|
-
projectId: WALLETCONNECT_PROJECT_ID,
|
|
106
|
-
url: walletConnectConfig?.url || 'https://www.layerswap.io/app/',
|
|
107
|
-
description: walletConnectConfig?.description || 'Move crypto across exchanges, blockchains, and wallets.',
|
|
108
|
-
}
|
|
109
|
-
}));
|
|
110
101
|
defaultConnectors.push(new ControllerConnector());
|
|
111
102
|
defaultConnectors.push(new WebWalletConnector());
|
|
112
103
|
return defaultConnectors;
|
|
113
104
|
};
|
|
114
105
|
useEffect(() => {
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
106
|
+
let cancelled = false;
|
|
107
|
+
resolveConnectors().then((result) => {
|
|
108
|
+
if (!cancelled)
|
|
109
|
+
setConnectors(result);
|
|
110
|
+
}).catch(() => {
|
|
111
|
+
if (!cancelled)
|
|
112
|
+
setConnectors([]);
|
|
113
|
+
});
|
|
114
|
+
return () => { cancelled = true; };
|
|
119
115
|
}, []);
|
|
120
116
|
const chains = [mainnet, sepolia];
|
|
121
117
|
return (_jsxs(StarknetConfig, { chains: chains, provider: publicProvider(), connectors: connectors, children: [_jsx(StarknetWalletInitializer, {}), children] }));
|
|
@@ -136,7 +132,7 @@ const StarknetWalletInitializer = () => {
|
|
|
136
132
|
const checkConnectorsReady = () => {
|
|
137
133
|
const hasWallet = connectors.some(connector => {
|
|
138
134
|
try {
|
|
139
|
-
const wallet =
|
|
135
|
+
const wallet = getInjectedWalletById?.(connector.id);
|
|
140
136
|
return wallet !== null && wallet !== undefined;
|
|
141
137
|
}
|
|
142
138
|
catch {
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { KnownInternalNames } from "@layerswap/widget/internal";
|
|
2
|
+
export const name = 'Starknet';
|
|
3
|
+
export const id = 'starknet';
|
|
4
|
+
export const starknetNames = [KnownInternalNames.Networks.StarkNetMainnet, KnownInternalNames.Networks.StarkNetSepolia, KnownInternalNames.Networks.StarkNetGoerli];
|
package/dist/esm/index.js
CHANGED
|
@@ -2,19 +2,18 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import StarknetProviderWrapper from "./StarknetProvider";
|
|
3
3
|
import useStarknetConnection from "./useStarknetConnection";
|
|
4
4
|
import { StarknetBalanceProvider } from "./starknetBalanceProvider";
|
|
5
|
-
import {
|
|
6
|
-
import { AppSettings } from "@layerswap/widget/internal";
|
|
5
|
+
import { LazyGasProvider } from "@layerswap/widget/types";
|
|
6
|
+
import { AppSettings, KnownInternalNames } from "@layerswap/widget/internal";
|
|
7
7
|
import { StarknetAddressUtilsProvider } from "./starknetAddressUtilsProvider";
|
|
8
8
|
import { StarknetNftProvider } from "./starknetNftProvider";
|
|
9
9
|
import React from "react";
|
|
10
10
|
import { useStarknetTransfer } from "./useStarknetTransfer";
|
|
11
|
+
const isStarknetNetwork = (name) => KnownInternalNames.Networks.StarkNetMainnet.includes(name) ||
|
|
12
|
+
KnownInternalNames.Networks.StarkNetGoerli.includes(name) ||
|
|
13
|
+
KnownInternalNames.Networks.StarkNetSepolia.includes(name);
|
|
11
14
|
export { default as useStarknetConnection } from "./useStarknetConnection";
|
|
12
15
|
export function createStarknetProvider(config = {}) {
|
|
13
|
-
const {
|
|
14
|
-
// Create wrapper component with config bound
|
|
15
|
-
const WrapperComponent = ({ children }) => {
|
|
16
|
-
return (_jsx(StarknetProviderWrapper, { walletConnectConfigs: walletConnectConfigs, children: children }));
|
|
17
|
-
};
|
|
16
|
+
const { customHook, balanceProviders, gasProviders, addressUtilsProviders, nftProviders, transferProviders } = config;
|
|
18
17
|
// Use custom hook if provided, otherwise use default
|
|
19
18
|
const walletConnectionProvider = customHook || useStarknetConnection;
|
|
20
19
|
// Use custom providers if provided, otherwise use defaults
|
|
@@ -22,7 +21,9 @@ export function createStarknetProvider(config = {}) {
|
|
|
22
21
|
const finalBalanceProviders = balanceProviders !== undefined
|
|
23
22
|
? (Array.isArray(balanceProviders) ? balanceProviders : [balanceProviders])
|
|
24
23
|
: defaultBalanceProviders;
|
|
25
|
-
const defaultGasProviders = [
|
|
24
|
+
const defaultGasProviders = [
|
|
25
|
+
new LazyGasProvider((n) => isStarknetNetwork(n.name), () => import("./starknetGasProvider").then(m => new m.StarknetGasProvider()))
|
|
26
|
+
];
|
|
26
27
|
const finalGasProviders = gasProviders !== undefined
|
|
27
28
|
? (Array.isArray(gasProviders) ? gasProviders : [gasProviders])
|
|
28
29
|
: defaultGasProviders;
|
|
@@ -40,7 +41,7 @@ export function createStarknetProvider(config = {}) {
|
|
|
40
41
|
: defaultTransferProviders;
|
|
41
42
|
return {
|
|
42
43
|
id: "starknet",
|
|
43
|
-
wrapper:
|
|
44
|
+
wrapper: StarknetProviderWrapper,
|
|
44
45
|
walletConnectionProvider,
|
|
45
46
|
addressUtilsProvider: finalAddressUtilsProviders,
|
|
46
47
|
gasProvider: finalGasProviders,
|
|
@@ -60,7 +61,9 @@ export const StarknetProvider = {
|
|
|
60
61
|
},
|
|
61
62
|
walletConnectionProvider: useStarknetConnection,
|
|
62
63
|
addressUtilsProvider: [new StarknetAddressUtilsProvider()],
|
|
63
|
-
gasProvider: [
|
|
64
|
+
gasProvider: [
|
|
65
|
+
new LazyGasProvider((n) => isStarknetNetwork(n.name), () => import("./starknetGasProvider").then(m => new m.StarknetGasProvider()))
|
|
66
|
+
],
|
|
64
67
|
balanceProvider: [new StarknetBalanceProvider()],
|
|
65
68
|
nftProvider: [new StarknetNftProvider()],
|
|
66
69
|
transferProvider: [useStarknetTransfer],
|
|
@@ -1,25 +1,33 @@
|
|
|
1
1
|
import { validateAndParseAddress } from "./utils";
|
|
2
2
|
import { KnownInternalNames } from "@layerswap/widget/internal";
|
|
3
|
+
import { name } from "./constants";
|
|
3
4
|
export class StarknetAddressUtilsProvider {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.providerName = name;
|
|
7
|
+
}
|
|
4
8
|
supportsNetwork(network) {
|
|
5
9
|
return (KnownInternalNames.Networks.StarkNetMainnet.includes(network.name) || KnownInternalNames.Networks.StarkNetSepolia.includes(network.name))
|
|
6
10
|
|| (KnownInternalNames.Networks.ParadexMainnet.includes(network.name) || KnownInternalNames.Networks.ParadexTestnet.includes(network.name));
|
|
7
11
|
}
|
|
8
|
-
isValidAddress(
|
|
12
|
+
isValidAddress(props) {
|
|
13
|
+
const { address } = props;
|
|
9
14
|
if (!address) {
|
|
10
15
|
return false;
|
|
11
16
|
}
|
|
12
17
|
return validateAndParseAddress(address);
|
|
13
18
|
}
|
|
14
|
-
addressFormat(
|
|
19
|
+
addressFormat(props) {
|
|
20
|
+
const { address } = props;
|
|
21
|
+
if (!address)
|
|
22
|
+
return '';
|
|
15
23
|
const removeHexPrefix = (hex) => {
|
|
16
24
|
return hex?.replace("0x", "");
|
|
17
25
|
};
|
|
18
26
|
const addHexPrefix = (hex) => {
|
|
19
27
|
return `0x${hex}`;
|
|
20
28
|
};
|
|
21
|
-
const addAddressPadding = (
|
|
22
|
-
return addHexPrefix(removeHexPrefix(
|
|
29
|
+
const addAddressPadding = (addr) => {
|
|
30
|
+
return addHexPrefix(removeHexPrefix(addr)?.padStart(64, '0'));
|
|
23
31
|
};
|
|
24
32
|
return addAddressPadding(address?.toLowerCase());
|
|
25
33
|
}
|
|
@@ -3,18 +3,8 @@ import { KnownInternalNames, walletIconResolver } from "@layerswap/widget/intern
|
|
|
3
3
|
import { useStarknetStore } from "./starknetWalletStore";
|
|
4
4
|
import { useStarknetTransfer } from "./useStarknetTransfer";
|
|
5
5
|
import { resolveStarknetWalletIcon } from "./utils";
|
|
6
|
-
|
|
6
|
+
import { name, id, starknetNames } from "./constants";
|
|
7
7
|
export default function useStarknetConnection({ networks }) {
|
|
8
|
-
const commonSupportedNetworks = [
|
|
9
|
-
KnownInternalNames.Networks.StarkNetMainnet,
|
|
10
|
-
KnownInternalNames.Networks.StarkNetGoerli,
|
|
11
|
-
KnownInternalNames.Networks.StarkNetSepolia
|
|
12
|
-
];
|
|
13
|
-
const withdrawalSupportedNetworks = [
|
|
14
|
-
...commonSupportedNetworks
|
|
15
|
-
];
|
|
16
|
-
const name = 'Starknet';
|
|
17
|
-
const id = 'starknet';
|
|
18
8
|
const { connectors } = useConnect();
|
|
19
9
|
const { disconnectAsync } = useDisconnect();
|
|
20
10
|
const starknetWallets = useStarknetStore((state) => state.connectedWallets);
|
|
@@ -62,9 +52,9 @@ export default function useStarknetConnection({ networks }) {
|
|
|
62
52
|
network: starknetNetwork,
|
|
63
53
|
disconnectWallets: () => disconnectWallets(starknetConnector.id, result?.account),
|
|
64
54
|
address: result?.account,
|
|
65
|
-
withdrawalSupportedNetworks,
|
|
66
|
-
autofillSupportedNetworks:
|
|
67
|
-
asSourceSupportedNetworks:
|
|
55
|
+
withdrawalSupportedNetworks: starknetNames,
|
|
56
|
+
autofillSupportedNetworks: starknetNames,
|
|
57
|
+
asSourceSupportedNetworks: starknetNames,
|
|
68
58
|
});
|
|
69
59
|
addAccount(starknetConnector.id, result.account);
|
|
70
60
|
if (resolvedWallet) {
|
|
@@ -89,8 +79,9 @@ export default function useStarknetConnection({ networks }) {
|
|
|
89
79
|
console.log(e);
|
|
90
80
|
}
|
|
91
81
|
};
|
|
92
|
-
const
|
|
93
|
-
const
|
|
82
|
+
const availableConnectors = connectors.map(connector => {
|
|
83
|
+
const configuredName = connectorsConfigs.find(c => c.id === connector.id)?.name;
|
|
84
|
+
const name = configuredName ?? connector.name;
|
|
94
85
|
return {
|
|
95
86
|
name: name,
|
|
96
87
|
id: connector.id,
|
|
@@ -111,10 +102,10 @@ export default function useStarknetConnection({ networks }) {
|
|
|
111
102
|
transfer,
|
|
112
103
|
connectedWallets: starknetWallets,
|
|
113
104
|
activeWallet,
|
|
114
|
-
withdrawalSupportedNetworks,
|
|
115
|
-
autofillSupportedNetworks:
|
|
116
|
-
asSourceSupportedNetworks:
|
|
117
|
-
|
|
105
|
+
withdrawalSupportedNetworks: starknetNames,
|
|
106
|
+
autofillSupportedNetworks: starknetNames,
|
|
107
|
+
asSourceSupportedNetworks: starknetNames,
|
|
108
|
+
availableConnectors,
|
|
118
109
|
name,
|
|
119
110
|
id,
|
|
120
111
|
providerIcon: networks.find(n => starknetNames.some(name => name === n.name))?.logo,
|
|
@@ -131,9 +122,11 @@ export async function resolveStarknetWallet(props) {
|
|
|
131
122
|
const walletAccount = new WalletAccount({ provider: rpcProvider, walletProvider: connector.wallet, address });
|
|
132
123
|
const accounts = await walletAccount.requestAccounts(true);
|
|
133
124
|
const account = accounts?.[0];
|
|
125
|
+
const configuredName = connectorsConfigs.find(c => c.id === connector.id)?.name;
|
|
126
|
+
const connectorName = configuredName ?? connector.name;
|
|
134
127
|
const wallet = {
|
|
135
|
-
id:
|
|
136
|
-
displayName: `${
|
|
128
|
+
id: connectorName,
|
|
129
|
+
displayName: `${connectorName} - Starknet`,
|
|
137
130
|
address: account,
|
|
138
131
|
addresses: [account],
|
|
139
132
|
chainId: walletChain || '',
|
|
@@ -164,7 +157,7 @@ const connectorsConfigs = [
|
|
|
164
157
|
},
|
|
165
158
|
{
|
|
166
159
|
id: "argentX",
|
|
167
|
-
name: '
|
|
160
|
+
name: 'Ready X',
|
|
168
161
|
installLink: "https://chromewebstore.google.com/detail/argent-x-starknet-wallet/dlcobpjiigpikoobohmabehhmhfoodbb"
|
|
169
162
|
},
|
|
170
163
|
{
|