@layerswap/wallet-starknet 1.7.0 → 2.0.0-next.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/constants.js +1 -1
- package/dist/esm/index.js +27 -33
- package/dist/esm/init.js +100 -0
- package/dist/esm/service/StarknetConnectionService.js +355 -0
- package/dist/esm/service/createStarknetConnection.js +44 -0
- package/dist/esm/service/starknetConnectorManager.js +35 -0
- package/dist/esm/{starknetWalletStore.js → service/starknetStore.js} +11 -17
- package/dist/esm/starknetBalanceProvider.js +5 -3
- package/dist/esm/starknetGasProvider.js +3 -2
- package/dist/esm/starknetNftProvider.js +1 -1
- package/dist/esm/{useStarknetTransfer.js → transferProvider/createStarknetTransfer.js} +3 -3
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/constants.d.ts.map +1 -1
- package/dist/types/index.d.ts +11 -9
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/init.d.ts +8 -0
- package/dist/types/init.d.ts.map +1 -0
- package/dist/types/service/StarknetConnectionService.d.ts +56 -0
- package/dist/types/service/StarknetConnectionService.d.ts.map +1 -0
- package/dist/types/service/createStarknetConnection.d.ts +11 -0
- package/dist/types/service/createStarknetConnection.d.ts.map +1 -0
- package/dist/types/service/starknetConnectorManager.d.ts +12 -0
- package/dist/types/service/starknetConnectorManager.d.ts.map +1 -0
- package/dist/types/{starknetWalletStore.d.ts → service/starknetStore.d.ts} +10 -2
- package/dist/types/service/starknetStore.d.ts.map +1 -0
- package/dist/types/starknetBalanceProvider.d.ts +1 -1
- package/dist/types/starknetBalanceProvider.d.ts.map +1 -1
- package/dist/types/starknetGasProvider.d.ts +3 -2
- package/dist/types/starknetGasProvider.d.ts.map +1 -1
- package/dist/types/starknetNftProvider.d.ts +2 -1
- package/dist/types/starknetNftProvider.d.ts.map +1 -1
- package/dist/types/transferProvider/createStarknetTransfer.d.ts +3 -0
- package/dist/types/transferProvider/createStarknetTransfer.d.ts.map +1 -0
- package/package.json +8 -8
- package/dist/esm/StarknetProvider.js +0 -178
- package/dist/esm/useStarknetConnection.js +0 -173
- package/dist/types/StarknetProvider.d.ts +0 -7
- package/dist/types/StarknetProvider.d.ts.map +0 -1
- package/dist/types/starknetWalletStore.d.ts.map +0 -1
- package/dist/types/useStarknetConnection.d.ts +0 -16
- package/dist/types/useStarknetConnection.d.ts.map +0 -1
- package/dist/types/useStarknetTransfer.d.ts +0 -3
- package/dist/types/useStarknetTransfer.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/constants.ts"],"names":[],"mappings":"AAAsD,eAAO,MAAM,IAAI,aAAa,CAAA;AACpF,eAAO,MAAM,EAAE,aAAa,CAAA;AAC5B,eAAO,MAAM,aAAa,UAAyI,CAAA"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import { WalletProvider, BaseWalletProviderConfig
|
|
2
|
-
|
|
1
|
+
import type { WalletProvider, BaseWalletProviderConfig } from "@layerswap/wallet-core/types";
|
|
2
|
+
import type { NftProvider } from "@layerswap/widget-types";
|
|
3
|
+
import { type NetworkWithTokens } from "@layerswap/widget-types";
|
|
4
|
+
import { id } from "./constants";
|
|
5
|
+
export type StarknetProviderConfig<Network = NetworkWithTokens> = BaseWalletProviderConfig<Network> & {
|
|
3
6
|
nftProviders?: NftProvider | NftProvider[];
|
|
4
7
|
};
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
export declare const StarknetProvider: WalletProvider;
|
|
8
|
+
export declare function createStarknetProvider<Network = NetworkWithTokens>(config?: StarknetProviderConfig<Network>): WalletProvider<Network> & {
|
|
9
|
+
id: typeof id;
|
|
10
|
+
};
|
|
11
|
+
export { createStarknetConnection } from "./service/createStarknetConnection";
|
|
12
|
+
export { useStarknetStore } from "./service/starknetStore";
|
|
13
|
+
export { starknetConnectorManager } from "./service/starknetConnectorManager";
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAqB,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAChH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAG3D,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAMjE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;AAOhC,MAAM,MAAM,sBAAsB,CAAC,OAAO,GAAG,iBAAiB,IAAI,wBAAwB,CAAC,OAAO,CAAC,GAAG;IAClG,YAAY,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAA;CAC7C,CAAA;AAID,wBAAgB,sBAAsB,CAAC,OAAO,GAAG,iBAAiB,EAC9D,MAAM,GAAE,sBAAsB,CAAC,OAAO,CAAM,GAC7C,cAAc,CAAC,OAAO,CAAC,GAAG;IAAE,EAAE,EAAE,OAAO,EAAE,CAAA;CAAE,CAwD7C;AAED,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAA;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-shot initialization of the Starknet connectors + manager.
|
|
3
|
+
* Safe to call multiple times — subsequent calls are no-ops.
|
|
4
|
+
*/
|
|
5
|
+
export declare function initStarknetProvider(): void;
|
|
6
|
+
/** Visible for tests. Resets singleton init so a fresh init can run. */
|
|
7
|
+
export declare function _resetStarknetInit(): void;
|
|
8
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/init.ts"],"names":[],"mappings":"AAoCA;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAsD3C;AAED,wEAAwE;AACxE,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { type InternalConnector, type Wallet } from '@layerswap/widget-types';
|
|
2
|
+
import type { WalletConnectionProvider, WalletConnectionService } from "@layerswap/wallet-core/types";
|
|
3
|
+
import { type AppNetworkAdapter } from "@layerswap/wallet-core";
|
|
4
|
+
import type { Connector } from '@starknet-react/core';
|
|
5
|
+
type ResolveStarknetWalletProps = {
|
|
6
|
+
name: string;
|
|
7
|
+
connector: Connector;
|
|
8
|
+
network: StarknetNetwork | undefined;
|
|
9
|
+
disconnectWallets: () => Promise<void>;
|
|
10
|
+
address: string;
|
|
11
|
+
withdrawalSupportedNetworks: string[];
|
|
12
|
+
autofillSupportedNetworks?: string[];
|
|
13
|
+
asSourceSupportedNetworks?: string[];
|
|
14
|
+
};
|
|
15
|
+
type StarknetNetwork = {
|
|
16
|
+
id: string;
|
|
17
|
+
displayName: string;
|
|
18
|
+
chainId: string | number | null | undefined;
|
|
19
|
+
rpcUrl: string | undefined;
|
|
20
|
+
icon: string | undefined;
|
|
21
|
+
};
|
|
22
|
+
export declare function resolveStarknetWallet(props: ResolveStarknetWalletProps): Promise<Wallet | null>;
|
|
23
|
+
export declare class StarknetConnectionService<Network> implements WalletConnectionService<never, Network> {
|
|
24
|
+
private _networks;
|
|
25
|
+
private _networkAdapter;
|
|
26
|
+
private _networksKey;
|
|
27
|
+
private _restoreTimer;
|
|
28
|
+
private _restoringStoredWallets;
|
|
29
|
+
private _restoreAttempts;
|
|
30
|
+
private readonly _maxRestoreAttempts;
|
|
31
|
+
setNetworks(networks: Network[], networkAdapter: AppNetworkAdapter<Network>): void;
|
|
32
|
+
getStarknetNetwork(): StarknetNetwork | undefined;
|
|
33
|
+
getProviderIcon(): string | undefined;
|
|
34
|
+
private connectorIsAvailable;
|
|
35
|
+
private hasPendingStoredWallets;
|
|
36
|
+
/**
|
|
37
|
+
* Drops persisted Starknet accounts that we've repeatedly failed to
|
|
38
|
+
* resolve back to a connected wallet (e.g. the user switched accounts in
|
|
39
|
+
* the wallet, or the stored connector is no longer available). Without
|
|
40
|
+
* this they would stay "pending" forever and keep the retry loop alive.
|
|
41
|
+
*/
|
|
42
|
+
private clearStalePendingWallets;
|
|
43
|
+
requestStoredWalletHydration(): void;
|
|
44
|
+
dispose(): void;
|
|
45
|
+
getAvailableConnectors(): InternalConnector[];
|
|
46
|
+
disconnectWallets(_connectorName?: string, address?: string): Promise<void>;
|
|
47
|
+
connectWallet({ connector }: {
|
|
48
|
+
connector: InternalConnector;
|
|
49
|
+
}): Promise<Wallet | undefined>;
|
|
50
|
+
switchAccount(_wallet: Wallet, address: string): Promise<void>;
|
|
51
|
+
hydrateStoredWallets(): Promise<void>;
|
|
52
|
+
buildProvider(): WalletConnectionProvider;
|
|
53
|
+
private getSupportedNetworks;
|
|
54
|
+
}
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=StarknetConnectionService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StarknetConnectionService.d.ts","sourceRoot":"","sources":["../../../src/service/StarknetConnectionService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,KAAK,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACtG,OAAO,EAAsB,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AA6BrD,KAAK,0BAA0B,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,EAAE,eAAe,GAAG,SAAS,CAAA;IACpC,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,OAAO,EAAE,MAAM,CAAA;IACf,2BAA2B,EAAE,MAAM,EAAE,CAAA;IACrC,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAA;IACpC,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAA;CACvC,CAAA;AAED,KAAK,eAAe,GAAG;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IAC3C,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B,CAAA;AAsBD,wBAAsB,qBAAqB,CAAC,KAAK,EAAE,0BAA0B,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwCrG;AAYD,qBAAa,yBAAyB,CAAC,OAAO,CAAE,YAAW,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC;IAC9F,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,uBAAuB,CAAQ;IACvC,OAAO,CAAC,gBAAgB,CAAI;IAC5B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAK;IAEzC,WAAW,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,IAAI;IASlF,kBAAkB,IAAI,eAAe,GAAG,SAAS;IAYjD,eAAe,IAAI,MAAM,GAAG,SAAS;IAIrC,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,uBAAuB;IAQ/B;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAShC,4BAA4B,IAAI,IAAI;IAmDpC,OAAO,IAAI,IAAI;IAQf,sBAAsB,IAAI,iBAAiB,EAAE;IA0BvC,iBAAiB,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3E,aAAa,CAAC,EAAE,SAAS,EAAE,EAAE;QAAE,SAAS,EAAE,iBAAiB,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAyD3F,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;IA4B3C,aAAa,IAAI,wBAAwB;IAqBzC,OAAO,CAAC,oBAAoB;CAK/B"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { MultiStepHandler, WalletConnectionProviderProps, WalletConnectionStore } from "@layerswap/wallet-core/types";
|
|
2
|
+
type CreateStarknetConnectionOptions = {
|
|
3
|
+
extraMultiStepHandlers?: MultiStepHandler[];
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Vanilla external-store factory for the Starknet wallet connection. Replaces the
|
|
7
|
+
* old `useStarknetConnection` hook.
|
|
8
|
+
*/
|
|
9
|
+
export declare function createStarknetConnection<Network>(initialProps: WalletConnectionProviderProps<Network>, options?: CreateStarknetConnectionOptions): WalletConnectionStore<Network>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=createStarknetConnection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createStarknetConnection.d.ts","sourceRoot":"","sources":["../../../src/service/createStarknetConnection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AAM1H,KAAK,+BAA+B,GAAG;IACnC,sBAAsB,CAAC,EAAE,gBAAgB,EAAE,CAAA;CAC9C,CAAA;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAC5C,YAAY,EAAE,6BAA6B,CAAC,OAAO,CAAC,EACpD,OAAO,GAAE,+BAAoC,GAC9C,qBAAqB,CAAC,OAAO,CAAC,CAsChC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Connector } from '@starknet-react/core';
|
|
2
|
+
declare class StarknetConnectorManager {
|
|
3
|
+
private _connectors;
|
|
4
|
+
register(connectors: Connector[]): void;
|
|
5
|
+
getConnectors(): readonly Connector[];
|
|
6
|
+
getConnector(id: string): Connector | undefined;
|
|
7
|
+
disconnectAll(): Promise<void>;
|
|
8
|
+
dispose(): void;
|
|
9
|
+
}
|
|
10
|
+
export declare const starknetConnectorManager: StarknetConnectorManager;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=starknetConnectorManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starknetConnectorManager.d.ts","sourceRoot":"","sources":["../../../src/service/starknetConnectorManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAGrD,cAAM,wBAAwB;IAC1B,OAAO,CAAC,WAAW,CAAkB;IAErC,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI;IAUvC,aAAa,IAAI,SAAS,SAAS,EAAE;IAIrC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS;IAIzC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IASpC,OAAO,IAAI,IAAI;CAGlB;AAED,eAAO,MAAM,wBAAwB,0BAAiC,CAAA"}
|
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
import { Wallet } from '@layerswap/widget
|
|
1
|
+
import { type Wallet } from '@layerswap/widget-types';
|
|
2
2
|
type StarknetAccountMap = {
|
|
3
3
|
[key: string]: string;
|
|
4
4
|
};
|
|
5
|
+
export type StarknetConnectorSnapshot = {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
icon: string;
|
|
9
|
+
};
|
|
5
10
|
interface StarknetStoreState {
|
|
6
11
|
connectedWallets: Wallet[];
|
|
7
12
|
connectWallet: (wallet: Wallet) => void;
|
|
@@ -10,6 +15,9 @@ interface StarknetStoreState {
|
|
|
10
15
|
removeAccount: (address: string) => void;
|
|
11
16
|
activeWalletAddress?: string;
|
|
12
17
|
setActiveWallet: (address: string) => void;
|
|
18
|
+
connectors: readonly StarknetConnectorSnapshot[];
|
|
19
|
+
ready: boolean;
|
|
20
|
+
_setConnectors: (connectors: readonly StarknetConnectorSnapshot[]) => void;
|
|
13
21
|
}
|
|
14
22
|
export declare const useStarknetStore: import("zustand").UseBoundStore<Omit<import("zustand").StoreApi<StarknetStoreState>, "persist"> & {
|
|
15
23
|
persist: {
|
|
@@ -23,4 +31,4 @@ export declare const useStarknetStore: import("zustand").UseBoundStore<Omit<impo
|
|
|
23
31
|
};
|
|
24
32
|
}>;
|
|
25
33
|
export {};
|
|
26
|
-
//# sourceMappingURL=
|
|
34
|
+
//# sourceMappingURL=starknetStore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starknetStore.d.ts","sourceRoot":"","sources":["../../../src/service/starknetStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAItD,KAAK,kBAAkB,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,CAAA;AAEnD,MAAM,MAAM,yBAAyB,GAAG;IACpC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACf,CAAA;AAED,UAAU,kBAAkB;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,gBAAgB,CAAC,EAAE,kBAAkB,CAAA;IACrC,UAAU,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAA;IAC5D,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IAE1C,UAAU,EAAE,SAAS,yBAAyB,EAAE,CAAA;IAChD,KAAK,EAAE,OAAO,CAAA;IACd,cAAc,EAAE,CAAC,UAAU,EAAE,SAAS,yBAAyB,EAAE,KAAK,IAAI,CAAA;CAC7E;AAED,eAAO,MAAM,gBAAgB;;;;;;;;;;EA0D5B,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BalanceProvider } from "@layerswap/widget
|
|
1
|
+
import { BalanceProvider } from "@layerswap/widget-types";
|
|
2
2
|
export declare class StarknetBalanceProvider extends BalanceProvider {
|
|
3
3
|
supportsNetwork: BalanceProvider['supportsNetwork'];
|
|
4
4
|
fetchBalance: BalanceProvider['fetchBalance'];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"starknetBalanceProvider.d.ts","sourceRoot":"","sources":["../../src/starknetBalanceProvider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"starknetBalanceProvider.d.ts","sourceRoot":"","sources":["../../src/starknetBalanceProvider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAgB,MAAM,yBAAyB,CAAC;AAExE,qBAAa,uBAAwB,SAAQ,eAAe;IACxD,eAAe,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAElD;IAED,YAAY,EAAE,eAAe,CAAC,cAAc,CAAC,CAyC5C;CACJ"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Network } from "@layerswap/widget-types";
|
|
2
|
+
import { GasProvider, GasProps } from "@layerswap/widget-types";
|
|
2
3
|
export declare class StarknetGasProvider implements GasProvider {
|
|
3
4
|
supportsNetwork(network: Network): boolean;
|
|
4
5
|
getGas: ({ network, token, wallet, amount }: GasProps) => Promise<{
|
|
5
6
|
gas: number;
|
|
6
|
-
token: import("@layerswap/widget
|
|
7
|
+
token: import("@layerswap/widget-types").Token;
|
|
7
8
|
} | undefined>;
|
|
8
9
|
}
|
|
9
10
|
//# sourceMappingURL=starknetGasProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"starknetGasProvider.d.ts","sourceRoot":"","sources":["../../src/starknetGasProvider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"starknetGasProvider.d.ts","sourceRoot":"","sources":["../../src/starknetGasProvider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEhE,qBAAa,mBAAoB,YAAW,WAAW;IACnD,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAI1C,MAAM,GAAU,oCAAoC,QAAQ;;;mBA0C3D;CACJ"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Network
|
|
1
|
+
import { Network } from "@layerswap/widget-types";
|
|
2
|
+
import { NftBalanceProps, NftProvider } from "@layerswap/widget-types";
|
|
2
3
|
export declare class StarknetNftProvider implements NftProvider {
|
|
3
4
|
supportsNetwork(network: Network): boolean;
|
|
4
5
|
getBalance: ({ address, network, contractAddress }: NftBalanceProps) => Promise<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"starknetNftProvider.d.ts","sourceRoot":"","sources":["../../src/starknetNftProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"starknetNftProvider.d.ts","sourceRoot":"","sources":["../../src/starknetNftProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAuBvE,qBAAa,mBAAoB,YAAW,WAAW;IACnD,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAI1C,UAAU,GAAU,uCAAuC,eAAe,KAAG,OAAO,CAAC,MAAM,CAAC,CAsB3F;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createStarknetTransfer.d.ts","sourceRoot":"","sources":["../../../src/transferProvider/createStarknetTransfer.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAiB,MAAM,yBAAyB,CAAC;AAQ1E,wBAAgB,sBAAsB,IAAI,gBAAgB,CAwCzD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@layerswap/wallet-starknet",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-next.0",
|
|
4
4
|
"description": "Starknet Wallet Provider for Layerswap Widget",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/esm/index.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"repository": {
|
|
23
23
|
"type": "git",
|
|
24
24
|
"url": "git+https://github.com/layerswap/layerswapapp.git",
|
|
25
|
-
"directory": "packages/wallets/starknet"
|
|
25
|
+
"directory": "packages/wallets/adapters/starknet"
|
|
26
26
|
},
|
|
27
27
|
"keywords": [
|
|
28
28
|
"layerswap",
|
|
@@ -31,14 +31,13 @@
|
|
|
31
31
|
],
|
|
32
32
|
"license": "MIT",
|
|
33
33
|
"peerDependencies": {
|
|
34
|
-
"react": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc",
|
|
35
|
-
"react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0.0 || ^19.0.0-rc",
|
|
36
34
|
"zustand": "^4.5.7",
|
|
37
|
-
"@layerswap/
|
|
35
|
+
"@layerswap/wallet-core": "^2.0.0-next.0",
|
|
36
|
+
"@layerswap/widget-types": "^1.0.0-next.0",
|
|
37
|
+
"@layerswap/utils": "^2.0.0-next.0"
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
40
|
"@starknet-io/types-js": "^0.10.0",
|
|
41
|
-
"@starknet-react/chains": "^5.0.3",
|
|
42
41
|
"@starknet-react/core": "^5.0.3",
|
|
43
42
|
"bn.js": "^5.2.2",
|
|
44
43
|
"ethers": "5.7.2",
|
|
@@ -47,9 +46,10 @@
|
|
|
47
46
|
"starknetkit": "^3.4.3"
|
|
48
47
|
},
|
|
49
48
|
"devDependencies": {
|
|
50
|
-
"react": "19.2.3",
|
|
51
49
|
"zustand": "^4.5.7",
|
|
52
|
-
"@layerswap/
|
|
50
|
+
"@layerswap/wallet-core": "^2.0.0-next.0",
|
|
51
|
+
"@layerswap/utils": "^2.0.0-next.0",
|
|
52
|
+
"@layerswap/widget-types": "^1.0.0-next.0"
|
|
53
53
|
},
|
|
54
54
|
"engines": {
|
|
55
55
|
"node": ">=22"
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
-
};
|
|
7
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
-
};
|
|
12
|
-
var _DiscoveryConnector_wallet, _DiscoveryConnector_store;
|
|
13
|
-
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
14
|
-
import { useEffect, useState } from "react";
|
|
15
|
-
import { mainnet, sepolia } from "@starknet-react/chains";
|
|
16
|
-
import { Connector, ConnectorNotConnectedError, UserNotConnectedError, StarknetConfig, publicProvider, useConnect, useDisconnect } from '@starknet-react/core';
|
|
17
|
-
import { KnownInternalNames, useSettingsState } from "@layerswap/widget/internal";
|
|
18
|
-
import useStarknetConnection, { resolveStarknetWallet } from "./useStarknetConnection";
|
|
19
|
-
import { useStarknetStore } from "./starknetWalletStore";
|
|
20
|
-
let getInjectedWalletById;
|
|
21
|
-
class DiscoveryConnector extends Connector {
|
|
22
|
-
constructor(wallet, store) {
|
|
23
|
-
super();
|
|
24
|
-
_DiscoveryConnector_wallet.set(this, void 0);
|
|
25
|
-
_DiscoveryConnector_store.set(this, void 0);
|
|
26
|
-
__classPrivateFieldSet(this, _DiscoveryConnector_wallet, wallet, "f");
|
|
27
|
-
__classPrivateFieldSet(this, _DiscoveryConnector_store, store, "f");
|
|
28
|
-
}
|
|
29
|
-
get id() {
|
|
30
|
-
return `${__classPrivateFieldGet(this, _DiscoveryConnector_wallet, "f").id}-mobile`;
|
|
31
|
-
}
|
|
32
|
-
get icon() {
|
|
33
|
-
return {
|
|
34
|
-
dark: __classPrivateFieldGet(this, _DiscoveryConnector_wallet, "f").icon,
|
|
35
|
-
light: __classPrivateFieldGet(this, _DiscoveryConnector_wallet, "f").icon
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
get name() {
|
|
39
|
-
return `${__classPrivateFieldGet(this, _DiscoveryConnector_wallet, "f").name} (mobile)`;
|
|
40
|
-
}
|
|
41
|
-
available() {
|
|
42
|
-
return true;
|
|
43
|
-
}
|
|
44
|
-
connect() {
|
|
45
|
-
window.open(__classPrivateFieldGet(this, _DiscoveryConnector_wallet, "f").downloads[__classPrivateFieldGet(this, _DiscoveryConnector_store, "f")], "_blank");
|
|
46
|
-
return undefined;
|
|
47
|
-
}
|
|
48
|
-
get wallet() {
|
|
49
|
-
throw new ConnectorNotConnectedError();
|
|
50
|
-
}
|
|
51
|
-
disconnect() {
|
|
52
|
-
throw new UserNotConnectedError();
|
|
53
|
-
}
|
|
54
|
-
account() {
|
|
55
|
-
throw new ConnectorNotConnectedError();
|
|
56
|
-
}
|
|
57
|
-
ready() {
|
|
58
|
-
throw new Error("Method not implemented.");
|
|
59
|
-
}
|
|
60
|
-
chainId() {
|
|
61
|
-
throw new Error("Method not implemented.");
|
|
62
|
-
}
|
|
63
|
-
request(call) {
|
|
64
|
-
throw new Error("Method not implemented.");
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
_DiscoveryConnector_wallet = new WeakMap(), _DiscoveryConnector_store = new WeakMap();
|
|
68
|
-
const StarknetProvider = ({ children }) => {
|
|
69
|
-
const [connectors, setConnectors] = useState([]);
|
|
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;
|
|
81
|
-
const isSafari = typeof window !== "undefined"
|
|
82
|
-
? /^((?!chrome|android).)*safari/i.test(navigator.userAgent)
|
|
83
|
-
: false;
|
|
84
|
-
const isAndroid = navigator.userAgent.match(/Android/i);
|
|
85
|
-
const isIOS = navigator.userAgent.match(/iPhone|iPad|iPod/i);
|
|
86
|
-
const defaultConnectors = [];
|
|
87
|
-
if (!isSafari) {
|
|
88
|
-
defaultConnectors.push(new InjectedConnector({ options: { id: "argentX" } }));
|
|
89
|
-
defaultConnectors.push(new InjectedConnector({ options: { id: "keplr" } }));
|
|
90
|
-
defaultConnectors.push(new InjectedConnector({ options: { id: "braavos" } }));
|
|
91
|
-
defaultConnectors.push(new InjectedConnector({ options: { id: "xverse" } }));
|
|
92
|
-
}
|
|
93
|
-
if ((isAndroid || isIOS) && !defaultConnectors.some(c => c.id === "braavos")) {
|
|
94
|
-
const starknet = (await import('@starknet-io/get-starknet-core')).default;
|
|
95
|
-
const discoverWallets = (await starknet.getDiscoveryWallets()).filter(w => {
|
|
96
|
-
return (isAndroid && w.downloads["android"]) || (isIOS && w.downloads["ios"]);
|
|
97
|
-
});
|
|
98
|
-
if (discoverWallets.length)
|
|
99
|
-
defaultConnectors.push(...discoverWallets.map(w => new DiscoveryConnector(w, isAndroid ? "android" : "ios")));
|
|
100
|
-
}
|
|
101
|
-
defaultConnectors.push(new ControllerConnector());
|
|
102
|
-
defaultConnectors.push(new WebWalletConnector());
|
|
103
|
-
return defaultConnectors;
|
|
104
|
-
};
|
|
105
|
-
useEffect(() => {
|
|
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; };
|
|
115
|
-
}, []);
|
|
116
|
-
const chains = [mainnet, sepolia];
|
|
117
|
-
return (_jsxs(StarknetConfig, { chains: chains, provider: publicProvider(), connectors: connectors, children: [_jsx(StarknetWalletInitializer, {}), children] }));
|
|
118
|
-
};
|
|
119
|
-
export default StarknetProvider;
|
|
120
|
-
const StarknetWalletInitializer = () => {
|
|
121
|
-
const { connectors } = useConnect();
|
|
122
|
-
const { disconnectAsync } = useDisconnect();
|
|
123
|
-
const { networks } = useSettingsState();
|
|
124
|
-
const starknetAccounts = useStarknetStore((state) => state.starknetAccounts) || {};
|
|
125
|
-
const addWallet = useStarknetStore((state) => state.connectWallet);
|
|
126
|
-
const removeAccount = useStarknetStore((state) => state.removeAccount);
|
|
127
|
-
const { withdrawalSupportedNetworks, autofillSupportedNetworks, asSourceSupportedNetworks } = useStarknetConnection({ networks });
|
|
128
|
-
const [connectorsReady, setConnectorsReady] = useState(false);
|
|
129
|
-
useEffect(() => {
|
|
130
|
-
if (connectors.length === 0 || connectorsReady || Object.keys(starknetAccounts).length == 0)
|
|
131
|
-
return;
|
|
132
|
-
const checkConnectorsReady = () => {
|
|
133
|
-
const hasWallet = connectors.some(connector => {
|
|
134
|
-
try {
|
|
135
|
-
const wallet = getInjectedWalletById?.(connector.id);
|
|
136
|
-
return wallet !== null && wallet !== undefined;
|
|
137
|
-
}
|
|
138
|
-
catch {
|
|
139
|
-
return false;
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
if (hasWallet) {
|
|
143
|
-
setConnectorsReady(true);
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
|
-
checkConnectorsReady();
|
|
147
|
-
const interval = setInterval(checkConnectorsReady, 500);
|
|
148
|
-
return () => clearInterval(interval);
|
|
149
|
-
}, [connectors, connectorsReady, starknetAccounts]);
|
|
150
|
-
useEffect(() => {
|
|
151
|
-
const initializeWallet = async () => {
|
|
152
|
-
const starknetNetwork = networks.find((n) => n.name === KnownInternalNames.Networks.StarkNetMainnet ||
|
|
153
|
-
n.name === KnownInternalNames.Networks.StarkNetSepolia);
|
|
154
|
-
for (const connector of connectors) {
|
|
155
|
-
const address = starknetAccounts[connector.id];
|
|
156
|
-
if (address) {
|
|
157
|
-
const wallet = await resolveStarknetWallet({
|
|
158
|
-
name: "Starknet",
|
|
159
|
-
connector,
|
|
160
|
-
network: starknetNetwork,
|
|
161
|
-
disconnectWallets: () => disconnectAsync().then(() => removeAccount(address)),
|
|
162
|
-
withdrawalSupportedNetworks,
|
|
163
|
-
autofillSupportedNetworks,
|
|
164
|
-
asSourceSupportedNetworks,
|
|
165
|
-
address
|
|
166
|
-
});
|
|
167
|
-
if (wallet?.address) {
|
|
168
|
-
addWallet(wallet);
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
};
|
|
173
|
-
if (Object.keys(starknetAccounts).length && connectorsReady) {
|
|
174
|
-
initializeWallet();
|
|
175
|
-
}
|
|
176
|
-
}, [connectors, networks, connectorsReady]);
|
|
177
|
-
return _jsx(_Fragment, {});
|
|
178
|
-
};
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
import { useConnect, useDisconnect } from "@starknet-react/core";
|
|
2
|
-
import { KnownInternalNames, walletIconResolver } from "@layerswap/widget/internal";
|
|
3
|
-
import { useStarknetStore } from "./starknetWalletStore";
|
|
4
|
-
import { useStarknetTransfer } from "./useStarknetTransfer";
|
|
5
|
-
import { resolveStarknetWalletIcon } from "./utils";
|
|
6
|
-
import { name, id, starknetNames } from "./constants";
|
|
7
|
-
export default function useStarknetConnection({ networks }) {
|
|
8
|
-
const { connectors } = useConnect();
|
|
9
|
-
const { disconnectAsync } = useDisconnect();
|
|
10
|
-
const starknetWallets = useStarknetStore((state) => state.connectedWallets);
|
|
11
|
-
const addWallet = useStarknetStore((state) => state.connectWallet);
|
|
12
|
-
const removeAccount = useStarknetStore((state) => state.removeAccount);
|
|
13
|
-
const addAccount = useStarknetStore((state) => state.addAccount);
|
|
14
|
-
const activeWalletAddress = useStarknetStore((state) => state.activeWalletAddress);
|
|
15
|
-
const setActiveWallet = useStarknetStore((state) => state.setActiveWallet);
|
|
16
|
-
const activeWallet = starknetWallets.find(wallet => wallet.address === activeWalletAddress);
|
|
17
|
-
const isMainnet = networks?.some(network => network.name === KnownInternalNames.Networks.StarkNetMainnet);
|
|
18
|
-
const connectWallet = async ({ connector }) => {
|
|
19
|
-
try {
|
|
20
|
-
const starknetConnector = connectors.find(c => c.id === connector.id);
|
|
21
|
-
let result = await starknetConnector?.connect({});
|
|
22
|
-
const walletChain = `0x${result?.chainId?.toString(16)}`;
|
|
23
|
-
const isWalletOnMainnet = walletChain === '0x534e5f4d41494e';
|
|
24
|
-
const wrongChain = isWalletOnMainnet !== isMainnet;
|
|
25
|
-
const starknetNetwork = networks.find(n => n.name === KnownInternalNames.Networks.StarkNetMainnet || n.name === KnownInternalNames.Networks.StarkNetSepolia);
|
|
26
|
-
if (result?.account && wrongChain) {
|
|
27
|
-
const wallet = starknetConnector?._wallet || starknetConnector?.wallet;
|
|
28
|
-
if (wallet?.request) {
|
|
29
|
-
const targetChainId = isMainnet ? 'SN_MAIN' : 'SN_SEPOLIA';
|
|
30
|
-
try {
|
|
31
|
-
await wallet.request({
|
|
32
|
-
type: "wallet_switchStarknetChain",
|
|
33
|
-
params: { chainId: targetChainId }
|
|
34
|
-
});
|
|
35
|
-
result = await starknetConnector?.connect({});
|
|
36
|
-
}
|
|
37
|
-
catch (switchError) {
|
|
38
|
-
console.log('Chain switch failed:', switchError);
|
|
39
|
-
disconnectWallets(connector?.name, result?.account);
|
|
40
|
-
throw new Error(`Failed to switch network. Please switch manually to ${isMainnet ? 'Mainnet' : 'Sepolia'} in your wallet.`);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
else {
|
|
44
|
-
disconnectWallets(connector?.name, result?.account);
|
|
45
|
-
throw new Error(`Please switch the network in your wallet to ${isMainnet ? 'Mainnet' : 'Sepolia'} and connect again.`);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
if (result?.account && starknetConnector) {
|
|
49
|
-
const resolvedWallet = await resolveStarknetWallet({
|
|
50
|
-
name,
|
|
51
|
-
connector: starknetConnector,
|
|
52
|
-
network: starknetNetwork,
|
|
53
|
-
disconnectWallets: () => disconnectWallets(starknetConnector.id, result?.account),
|
|
54
|
-
address: result?.account,
|
|
55
|
-
withdrawalSupportedNetworks: starknetNames,
|
|
56
|
-
autofillSupportedNetworks: starknetNames,
|
|
57
|
-
asSourceSupportedNetworks: starknetNames,
|
|
58
|
-
});
|
|
59
|
-
addAccount(starknetConnector.id, result.account);
|
|
60
|
-
if (resolvedWallet) {
|
|
61
|
-
addWallet(resolvedWallet);
|
|
62
|
-
setActiveWallet(resolvedWallet.address);
|
|
63
|
-
return resolvedWallet;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
catch (e) {
|
|
68
|
-
throw e;
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
const disconnectWallets = async (connectorName, address) => {
|
|
72
|
-
try {
|
|
73
|
-
await disconnectAsync();
|
|
74
|
-
if (address)
|
|
75
|
-
removeAccount(address);
|
|
76
|
-
}
|
|
77
|
-
catch (e) {
|
|
78
|
-
//TODO: handle error
|
|
79
|
-
console.log(e);
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
const availableConnectors = connectors.map(connector => {
|
|
83
|
-
const configuredName = connectorsConfigs.find(c => c.id === connector.id)?.name;
|
|
84
|
-
const name = configuredName ?? connector.name;
|
|
85
|
-
return {
|
|
86
|
-
name: name,
|
|
87
|
-
id: connector.id,
|
|
88
|
-
icon: resolveStarknetWalletIcon({ icon: connector.icon }),
|
|
89
|
-
type: connector?.["_wallet"] ? 'injected' : 'other',
|
|
90
|
-
installUrl: connectorsConfigs.find(c => c.id === connector.id)?.installLink,
|
|
91
|
-
extensionNotFound: !connector?.["_wallet"] && connectorsConfigs.find(c => c.id === connector.id)?.installLink !== undefined,
|
|
92
|
-
providerName: name
|
|
93
|
-
};
|
|
94
|
-
});
|
|
95
|
-
const switchAccount = async (connector, address) => {
|
|
96
|
-
setActiveWallet(address);
|
|
97
|
-
};
|
|
98
|
-
const { executeTransfer: transfer } = useStarknetTransfer();
|
|
99
|
-
const provider = {
|
|
100
|
-
connectWallet,
|
|
101
|
-
switchAccount,
|
|
102
|
-
transfer,
|
|
103
|
-
connectedWallets: starknetWallets,
|
|
104
|
-
activeWallet,
|
|
105
|
-
withdrawalSupportedNetworks: starknetNames,
|
|
106
|
-
autofillSupportedNetworks: starknetNames,
|
|
107
|
-
asSourceSupportedNetworks: starknetNames,
|
|
108
|
-
availableConnectors,
|
|
109
|
-
name,
|
|
110
|
-
id,
|
|
111
|
-
providerIcon: networks.find(n => starknetNames.some(name => name === n.name))?.logo,
|
|
112
|
-
ready: connectors.length > 0
|
|
113
|
-
};
|
|
114
|
-
return provider;
|
|
115
|
-
}
|
|
116
|
-
export async function resolveStarknetWallet(props) {
|
|
117
|
-
const { name, connector, network, disconnectWallets, address, withdrawalSupportedNetworks, autofillSupportedNetworks, asSourceSupportedNetworks } = props;
|
|
118
|
-
try {
|
|
119
|
-
const walletChain = network?.chain_id;
|
|
120
|
-
const { RpcProvider, WalletAccount } = await import('starknet');
|
|
121
|
-
const rpcProvider = new RpcProvider({ nodeUrl: network?.node_url });
|
|
122
|
-
const walletAccount = new WalletAccount({ provider: rpcProvider, walletProvider: connector.wallet, address });
|
|
123
|
-
const accounts = await walletAccount.requestAccounts(true);
|
|
124
|
-
const account = accounts?.[0];
|
|
125
|
-
const configuredName = connectorsConfigs.find(c => c.id === connector.id)?.name;
|
|
126
|
-
const connectorName = configuredName ?? connector.name;
|
|
127
|
-
const wallet = {
|
|
128
|
-
id: connectorName,
|
|
129
|
-
displayName: `${connectorName} - Starknet`,
|
|
130
|
-
address: account,
|
|
131
|
-
addresses: [account],
|
|
132
|
-
chainId: walletChain || '',
|
|
133
|
-
icon: walletIconResolver(address, resolveStarknetWalletIcon({ icon: connector.icon })),
|
|
134
|
-
providerName: name,
|
|
135
|
-
metadata: {
|
|
136
|
-
starknetAccount: walletAccount,
|
|
137
|
-
},
|
|
138
|
-
isActive: true,
|
|
139
|
-
withdrawalSupportedNetworks,
|
|
140
|
-
disconnect: () => disconnectWallets(connector.name, account),
|
|
141
|
-
networkIcon: starknetNames.includes(network?.name || '') ? network?.logo : undefined,
|
|
142
|
-
autofillSupportedNetworks,
|
|
143
|
-
asSourceSupportedNetworks
|
|
144
|
-
};
|
|
145
|
-
return wallet;
|
|
146
|
-
}
|
|
147
|
-
catch (e) {
|
|
148
|
-
console.warn(`Failed to initialize wallet for ${connector.name}:`, e);
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
const connectorsConfigs = [
|
|
153
|
-
{
|
|
154
|
-
id: "braavos",
|
|
155
|
-
name: "Braavos",
|
|
156
|
-
installLink: "https://chromewebstore.google.com/detail/braavos-starknet-wallet/jnlgamecbpmbajjfhmmmlhejkemejdma"
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
id: "argentX",
|
|
160
|
-
name: 'Ready X',
|
|
161
|
-
installLink: "https://chromewebstore.google.com/detail/argent-x-starknet-wallet/dlcobpjiigpikoobohmabehhmhfoodbb"
|
|
162
|
-
},
|
|
163
|
-
{
|
|
164
|
-
id: "keplr",
|
|
165
|
-
name: 'Keplr',
|
|
166
|
-
installLink: "https://chromewebstore.google.com/detail/keplr/dmkamcknogkgcdfhhbddcghachkejeap"
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
id: "xverse",
|
|
170
|
-
name: 'Xverse Wallet',
|
|
171
|
-
installLink: "https://chromewebstore.google.com/detail/xverse-bitcoin-crypto-wal/idnnbdplmphpflfnlkomgpfbpcgelopg"
|
|
172
|
-
}
|
|
173
|
-
];
|