@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.
Files changed (43) hide show
  1. package/dist/esm/constants.js +1 -1
  2. package/dist/esm/index.js +27 -33
  3. package/dist/esm/init.js +100 -0
  4. package/dist/esm/service/StarknetConnectionService.js +355 -0
  5. package/dist/esm/service/createStarknetConnection.js +44 -0
  6. package/dist/esm/service/starknetConnectorManager.js +35 -0
  7. package/dist/esm/{starknetWalletStore.js → service/starknetStore.js} +11 -17
  8. package/dist/esm/starknetBalanceProvider.js +5 -3
  9. package/dist/esm/starknetGasProvider.js +3 -2
  10. package/dist/esm/starknetNftProvider.js +1 -1
  11. package/dist/esm/{useStarknetTransfer.js → transferProvider/createStarknetTransfer.js} +3 -3
  12. package/dist/tsconfig.tsbuildinfo +1 -1
  13. package/dist/types/constants.d.ts.map +1 -1
  14. package/dist/types/index.d.ts +11 -9
  15. package/dist/types/index.d.ts.map +1 -1
  16. package/dist/types/init.d.ts +8 -0
  17. package/dist/types/init.d.ts.map +1 -0
  18. package/dist/types/service/StarknetConnectionService.d.ts +56 -0
  19. package/dist/types/service/StarknetConnectionService.d.ts.map +1 -0
  20. package/dist/types/service/createStarknetConnection.d.ts +11 -0
  21. package/dist/types/service/createStarknetConnection.d.ts.map +1 -0
  22. package/dist/types/service/starknetConnectorManager.d.ts +12 -0
  23. package/dist/types/service/starknetConnectorManager.d.ts.map +1 -0
  24. package/dist/types/{starknetWalletStore.d.ts → service/starknetStore.d.ts} +10 -2
  25. package/dist/types/service/starknetStore.d.ts.map +1 -0
  26. package/dist/types/starknetBalanceProvider.d.ts +1 -1
  27. package/dist/types/starknetBalanceProvider.d.ts.map +1 -1
  28. package/dist/types/starknetGasProvider.d.ts +3 -2
  29. package/dist/types/starknetGasProvider.d.ts.map +1 -1
  30. package/dist/types/starknetNftProvider.d.ts +2 -1
  31. package/dist/types/starknetNftProvider.d.ts.map +1 -1
  32. package/dist/types/transferProvider/createStarknetTransfer.d.ts +3 -0
  33. package/dist/types/transferProvider/createStarknetTransfer.d.ts.map +1 -0
  34. package/package.json +8 -8
  35. package/dist/esm/StarknetProvider.js +0 -178
  36. package/dist/esm/useStarknetConnection.js +0 -173
  37. package/dist/types/StarknetProvider.d.ts +0 -7
  38. package/dist/types/StarknetProvider.d.ts.map +0 -1
  39. package/dist/types/starknetWalletStore.d.ts.map +0 -1
  40. package/dist/types/useStarknetConnection.d.ts +0 -16
  41. package/dist/types/useStarknetConnection.d.ts.map +0 -1
  42. package/dist/types/useStarknetTransfer.d.ts +0 -3
  43. 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":"AAEA,eAAO,MAAM,IAAI,aAAa,CAAA;AAC9B,eAAO,MAAM,EAAE,aAAa,CAAA;AAC5B,eAAO,MAAM,aAAa,UAAyI,CAAA"}
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"}
@@ -1,12 +1,14 @@
1
- import { WalletProvider, BaseWalletProviderConfig, NftProvider } from "@layerswap/widget/types";
2
- export type StarknetProviderConfig = BaseWalletProviderConfig & {
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 { default as useStarknetConnection } from "./useStarknetConnection";
6
- export declare function createStarknetProvider(config?: StarknetProviderConfig): WalletProvider;
7
- /**
8
- * @deprecated Use createStarknetProvider() instead. This export will be removed in a future version.
9
- * Note: This uses default WalletConnect configuration provided to LayerswapProvider.
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.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,WAAW,EAAmB,MAAM,yBAAyB,CAAC;AAWjH,MAAM,MAAM,sBAAsB,GAAG,wBAAwB,GAAG;IAC5D,YAAY,CAAC,EAAE,WAAW,GAAG,WAAW,EAAE,CAAA;CAC7C,CAAA;AAED,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAE3E,wBAAgB,sBAAsB,CAAC,MAAM,GAAE,sBAA2B,GAAG,cAAc,CA+C1F;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAmB9B,CAAC"}
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/types';
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=starknetWalletStore.d.ts.map
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/types";
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":"AAEA,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
+ {"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 { GasProvider, GasProps, Network } from "@layerswap/widget/types";
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/types").Token;
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":"AAEA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEzE,qBAAa,mBAAoB,YAAW,WAAW;IACnD,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAI1C,MAAM,GAAU,oCAAoC,QAAQ;;;mBA0C3D;CACJ"}
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, NftBalanceProps, NftProvider } from "@layerswap/widget/types";
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;AAuBhF,qBAAa,mBAAoB,YAAW,WAAW;IACnD,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAI1C,UAAU,GAAU,uCAAuC,eAAe,KAAG,OAAO,CAAC,MAAM,CAAC,CAsB3F;CACJ"}
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,3 @@
1
+ import { TransferProvider } from "@layerswap/widget-types";
2
+ export declare function createStarknetTransfer(): TransferProvider;
3
+ //# sourceMappingURL=createStarknetTransfer.d.ts.map
@@ -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": "1.7.0",
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/widget": "^1.7.0"
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/widget": "^1.7.0"
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
- ];
@@ -1,7 +0,0 @@
1
- import { FC, ReactNode } from "react";
2
- type StarknetProviderProps = {
3
- children: ReactNode;
4
- };
5
- declare const StarknetProvider: FC<StarknetProviderProps>;
6
- export default StarknetProvider;
7
- //# sourceMappingURL=StarknetProvider.d.ts.map