@txnlab/use-wallet-svelte 4.3.0 → 4.4.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/index.cjs CHANGED
@@ -121,10 +121,11 @@ var useWallet = () => {
121
121
  const transformToWallet = (wallet) => {
122
122
  return {
123
123
  id: wallet.id,
124
+ walletKey: wallet.walletKey,
124
125
  metadata: wallet.metadata,
125
- accounts: (0, import_svelte_store.useStore)(manager.store, (state) => state.wallets[wallet.id]?.accounts),
126
- isConnected: () => !!walletStore.current[wallet.id],
127
- isActive: () => wallet.id === activeWalletId.current,
126
+ accounts: (0, import_svelte_store.useStore)(manager.store, (state) => state.wallets[wallet.walletKey]?.accounts),
127
+ isConnected: () => !!walletStore.current[wallet.walletKey],
128
+ isActive: () => wallet.walletKey === activeWalletId.current,
128
129
  canSignData: wallet.canSignData ?? false,
129
130
  connect: (args) => wallet.connect(args),
130
131
  disconnect: () => wallet.disconnect(),
@@ -137,7 +138,7 @@ var useWallet = () => {
137
138
  const managerStatus = (0, import_svelte_store.useStore)(manager.store, (state) => state.managerStatus);
138
139
  const isReady = () => managerStatus.current === "ready";
139
140
  const algodClient = (0, import_svelte_store.useStore)(manager.store, (state) => state.algodClient);
140
- const activeWallet = () => wallets.find((w) => w.id === activeWalletId.current);
141
+ const activeWallet = () => wallets.find((w) => w.walletKey === activeWalletId.current);
141
142
  const activeWalletAccounts = (0, import_svelte_store.useStore)(
142
143
  manager.store,
143
144
  (state) => state.wallets[activeWalletId.current]?.accounts
@@ -155,21 +156,21 @@ var useWallet = () => {
155
156
  (state) => state.wallets[activeWalletId.current]?.activeAccount?.address
156
157
  );
157
158
  const signTransactions = (txnGroup, indexesToSign) => {
158
- const wallet = manager.wallets.find((w) => w.id === activeWalletId.current);
159
+ const wallet = manager.wallets.find((w) => w.walletKey === activeWalletId.current);
159
160
  if (!wallet) {
160
161
  throw new Error("No active wallet");
161
162
  }
162
163
  return wallet.signTransactions(txnGroup, indexesToSign);
163
164
  };
164
165
  const transactionSigner = (txnGroup, indexesToSign) => {
165
- const wallet = manager.wallets.find((w) => w.id === activeWalletId.current);
166
+ const wallet = manager.wallets.find((w) => w.walletKey === activeWalletId.current);
166
167
  if (!wallet) {
167
168
  throw new Error("No active wallet");
168
169
  }
169
170
  return wallet.transactionSigner(txnGroup, indexesToSign);
170
171
  };
171
172
  const signData = (data, metadata) => {
172
- const wallet = manager.wallets.find((w) => w.id === activeWalletId.current);
173
+ const wallet = manager.wallets.find((w) => w.walletKey === activeWalletId.current);
173
174
  if (!wallet) {
174
175
  throw new Error("No active wallet");
175
176
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { useStore } from '@tanstack/svelte-store'\nimport algosdk from 'algosdk'\nimport { getContext, setContext } from 'svelte'\nimport {\n type AlgodConfig,\n BaseWallet,\n NetworkId,\n type SignDataResponse,\n type SignMetadata,\n WalletAccount,\n WalletId,\n WalletManager,\n WalletMetadata\n} from '@txnlab/use-wallet'\n\nexport * from '@txnlab/use-wallet'\n\nexport const useWalletContext = (manager: WalletManager) => {\n setContext('walletManager', manager)\n\n manager.resumeSessions().catch((error) => {\n console.error('Error resuming sessions:', error)\n })\n}\n\nexport const useWalletManager = (): WalletManager => {\n const manager: WalletManager = getContext('walletManager')\n if (!manager) {\n throw new Error('useWalletManager must be used within a useWalletContext')\n }\n return manager\n}\n\nexport const useNetwork = () => {\n const manager = useWalletManager()\n const activeNetwork = useStore(manager.store, (state) => state.activeNetwork)\n const activeNetworkConfig = useStore(\n manager.store,\n (state) => state.networkConfig[activeNetwork.current]\n )\n\n const setActiveNetwork = async (networkId: NetworkId | string): Promise<void> => {\n if (networkId === activeNetwork.current) {\n return\n }\n\n if (!manager.networkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n console.info(`[Svelte] Creating new Algodv2 client...`)\n\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n\n await manager.setActiveNetwork(networkId)\n\n manager.store.setState((state) => ({\n ...state,\n activeNetwork: networkId,\n algodClient: newClient\n }))\n\n console.info(`[Svelte] ✅ Active network set to ${networkId}.`)\n }\n\n const updateAlgodConfig = (networkId: string, config: Partial<AlgodConfig>): void => {\n manager.updateAlgodConfig(networkId, config)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork.current) {\n console.info(`[Svelte] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n\n manager.store.setState((state) => ({\n ...state,\n algodClient: newClient\n }))\n }\n }\n\n const resetNetworkConfig = (networkId: string): void => {\n manager.resetNetworkConfig(networkId)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork.current) {\n console.info(`[Svelte] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n\n manager.store.setState((state) => ({\n ...state,\n algodClient: newClient\n }))\n }\n }\n\n return {\n activeNetwork,\n networkConfig: manager.networkConfig,\n activeNetworkConfig,\n setActiveNetwork,\n updateAlgodConfig,\n resetNetworkConfig\n }\n}\n\nexport interface Wallet {\n id: WalletId\n metadata: WalletMetadata\n accounts: { current: WalletAccount[] | undefined }\n isConnected: () => boolean\n isActive: () => boolean\n canSignData: boolean\n connect: (args?: Record<string, any>) => Promise<WalletAccount[]>\n disconnect: () => Promise<void>\n setActive: () => void\n setActiveAccount: (address: string) => void\n}\n\nexport const useWallet = () => {\n const manager = useWalletManager()\n const walletStore = useStore(manager.store, (state) => state.wallets)\n\n const transformToWallet = (wallet: BaseWallet): Wallet => {\n return {\n id: wallet.id,\n metadata: wallet.metadata,\n accounts: useStore(manager.store, (state) => state.wallets[wallet.id]?.accounts),\n isConnected: () => !!walletStore.current[wallet.id],\n isActive: () => wallet.id === activeWalletId.current,\n canSignData: wallet.canSignData ?? false,\n connect: (args) => wallet.connect(args),\n disconnect: () => wallet.disconnect(),\n setActive: () => wallet.setActive(),\n setActiveAccount: (addr) => wallet.setActiveAccount(addr)\n }\n }\n\n const wallets = [...manager.wallets].map(transformToWallet)\n const activeWalletId = useStore(manager.store, (state) => state.activeWallet)\n const managerStatus = useStore(manager.store, (state) => state.managerStatus)\n const isReady = () => managerStatus.current === 'ready'\n const algodClient = useStore(manager.store, (state) => state.algodClient)\n const activeWallet = () => wallets.find((w) => w.id === activeWalletId.current)\n const activeWalletAccounts = useStore(\n manager.store,\n (state) => state.wallets[activeWalletId.current!]?.accounts\n )\n const activeWalletAddresses = useStore(manager.store, (state) =>\n state.wallets[activeWalletId.current!]?.accounts.map((account) => account.address)\n )\n const activeAccount = useStore(\n manager.store,\n (state) => state.wallets[activeWalletId.current!]?.activeAccount\n )\n const activeAddress = useStore(\n manager.store,\n (state) => state.wallets[activeWalletId.current!]?.activeAccount?.address\n )\n\n const signTransactions = <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n const wallet = manager.wallets.find((w) => w.id === activeWalletId.current)\n if (!wallet) {\n throw new Error('No active wallet')\n }\n return wallet.signTransactions(txnGroup, indexesToSign)\n }\n\n const transactionSigner = (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n const wallet = manager.wallets.find((w) => w.id === activeWalletId.current)\n if (!wallet) {\n throw new Error('No active wallet')\n }\n return wallet.transactionSigner(txnGroup, indexesToSign)\n }\n\n const signData = (data: string, metadata: SignMetadata): Promise<SignDataResponse> => {\n const wallet = manager.wallets.find((w) => w.id === activeWalletId.current)\n if (!wallet) {\n throw new Error('No active wallet')\n }\n return wallet.signData(data, metadata)\n }\n\n return {\n wallets,\n isReady,\n algodClient,\n activeWallet,\n activeWalletAccounts,\n activeWalletAddresses,\n activeAccount,\n activeAddress,\n signData,\n signTransactions,\n transactionSigner\n }\n}\n"],"mappings":"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","names":["algosdk"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { useStore } from '@tanstack/svelte-store'\nimport algosdk from 'algosdk'\nimport { getContext, setContext } from 'svelte'\nimport {\n type AlgodConfig,\n BaseWallet,\n NetworkId,\n type SignDataResponse,\n type SignMetadata,\n WalletAccount,\n WalletId,\n type WalletKey,\n WalletManager,\n WalletMetadata\n} from '@txnlab/use-wallet'\n\nexport * from '@txnlab/use-wallet'\n\nexport const useWalletContext = (manager: WalletManager) => {\n setContext('walletManager', manager)\n\n manager.resumeSessions().catch((error) => {\n console.error('Error resuming sessions:', error)\n })\n}\n\nexport const useWalletManager = (): WalletManager => {\n const manager: WalletManager = getContext('walletManager')\n if (!manager) {\n throw new Error('useWalletManager must be used within a useWalletContext')\n }\n return manager\n}\n\nexport const useNetwork = () => {\n const manager = useWalletManager()\n const activeNetwork = useStore(manager.store, (state) => state.activeNetwork)\n const activeNetworkConfig = useStore(\n manager.store,\n (state) => state.networkConfig[activeNetwork.current]\n )\n\n const setActiveNetwork = async (networkId: NetworkId | string): Promise<void> => {\n if (networkId === activeNetwork.current) {\n return\n }\n\n if (!manager.networkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n console.info(`[Svelte] Creating new Algodv2 client...`)\n\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n\n await manager.setActiveNetwork(networkId)\n\n manager.store.setState((state) => ({\n ...state,\n activeNetwork: networkId,\n algodClient: newClient\n }))\n\n console.info(`[Svelte] ✅ Active network set to ${networkId}.`)\n }\n\n const updateAlgodConfig = (networkId: string, config: Partial<AlgodConfig>): void => {\n manager.updateAlgodConfig(networkId, config)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork.current) {\n console.info(`[Svelte] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n\n manager.store.setState((state) => ({\n ...state,\n algodClient: newClient\n }))\n }\n }\n\n const resetNetworkConfig = (networkId: string): void => {\n manager.resetNetworkConfig(networkId)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork.current) {\n console.info(`[Svelte] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n\n manager.store.setState((state) => ({\n ...state,\n algodClient: newClient\n }))\n }\n }\n\n return {\n activeNetwork,\n networkConfig: manager.networkConfig,\n activeNetworkConfig,\n setActiveNetwork,\n updateAlgodConfig,\n resetNetworkConfig\n }\n}\n\nexport interface Wallet {\n id: WalletId\n /** Unique key for this wallet instance. Used for skinned WalletConnect instances. */\n walletKey: WalletKey\n metadata: WalletMetadata\n accounts: { current: WalletAccount[] | undefined }\n isConnected: () => boolean\n isActive: () => boolean\n canSignData: boolean\n connect: (args?: Record<string, any>) => Promise<WalletAccount[]>\n disconnect: () => Promise<void>\n setActive: () => void\n setActiveAccount: (address: string) => void\n}\n\nexport const useWallet = () => {\n const manager = useWalletManager()\n const walletStore = useStore(manager.store, (state) => state.wallets)\n\n const transformToWallet = (wallet: BaseWallet): Wallet => {\n return {\n id: wallet.id,\n walletKey: wallet.walletKey,\n metadata: wallet.metadata,\n accounts: useStore(manager.store, (state) => state.wallets[wallet.walletKey]?.accounts),\n isConnected: () => !!walletStore.current[wallet.walletKey],\n isActive: () => wallet.walletKey === activeWalletId.current,\n canSignData: wallet.canSignData ?? false,\n connect: (args) => wallet.connect(args),\n disconnect: () => wallet.disconnect(),\n setActive: () => wallet.setActive(),\n setActiveAccount: (addr) => wallet.setActiveAccount(addr)\n }\n }\n\n const wallets = [...manager.wallets].map(transformToWallet)\n const activeWalletId = useStore(manager.store, (state) => state.activeWallet)\n const managerStatus = useStore(manager.store, (state) => state.managerStatus)\n const isReady = () => managerStatus.current === 'ready'\n const algodClient = useStore(manager.store, (state) => state.algodClient)\n const activeWallet = () => wallets.find((w) => w.walletKey === activeWalletId.current)\n const activeWalletAccounts = useStore(\n manager.store,\n (state) => state.wallets[activeWalletId.current!]?.accounts\n )\n const activeWalletAddresses = useStore(manager.store, (state) =>\n state.wallets[activeWalletId.current!]?.accounts.map((account) => account.address)\n )\n const activeAccount = useStore(\n manager.store,\n (state) => state.wallets[activeWalletId.current!]?.activeAccount\n )\n const activeAddress = useStore(\n manager.store,\n (state) => state.wallets[activeWalletId.current!]?.activeAccount?.address\n )\n\n const signTransactions = <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n const wallet = manager.wallets.find((w) => w.walletKey === activeWalletId.current)\n if (!wallet) {\n throw new Error('No active wallet')\n }\n return wallet.signTransactions(txnGroup, indexesToSign)\n }\n\n const transactionSigner = (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n const wallet = manager.wallets.find((w) => w.walletKey === activeWalletId.current)\n if (!wallet) {\n throw new Error('No active wallet')\n }\n return wallet.transactionSigner(txnGroup, indexesToSign)\n }\n\n const signData = (data: string, metadata: SignMetadata): Promise<SignDataResponse> => {\n const wallet = manager.wallets.find((w) => w.walletKey === activeWalletId.current)\n if (!wallet) {\n throw new Error('No active wallet')\n }\n return wallet.signData(data, metadata)\n }\n\n return {\n wallets,\n isReady,\n algodClient,\n activeWallet,\n activeWalletAccounts,\n activeWalletAddresses,\n activeAccount,\n activeAddress,\n signData,\n signTransactions,\n transactionSigner\n }\n}\n"],"mappings":"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","names":["algosdk"]}
package/dist/index.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _txnlab_use_wallet from '@txnlab/use-wallet';
2
- import { WalletManager, NetworkId, AlgodConfig, WalletId, WalletMetadata, WalletAccount, SignMetadata, SignDataResponse } from '@txnlab/use-wallet';
2
+ import { WalletManager, NetworkId, AlgodConfig, WalletId, WalletKey, WalletMetadata, WalletAccount, SignMetadata, SignDataResponse } from '@txnlab/use-wallet';
3
3
  export * from '@txnlab/use-wallet';
4
4
  import algosdk from 'algosdk';
5
5
 
@@ -19,6 +19,8 @@ declare const useNetwork: () => {
19
19
  };
20
20
  interface Wallet {
21
21
  id: WalletId;
22
+ /** Unique key for this wallet instance. Used for skinned WalletConnect instances. */
23
+ walletKey: WalletKey;
22
24
  metadata: WalletMetadata;
23
25
  accounts: {
24
26
  current: WalletAccount[] | undefined;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _txnlab_use_wallet from '@txnlab/use-wallet';
2
- import { WalletManager, NetworkId, AlgodConfig, WalletId, WalletMetadata, WalletAccount, SignMetadata, SignDataResponse } from '@txnlab/use-wallet';
2
+ import { WalletManager, NetworkId, AlgodConfig, WalletId, WalletKey, WalletMetadata, WalletAccount, SignMetadata, SignDataResponse } from '@txnlab/use-wallet';
3
3
  export * from '@txnlab/use-wallet';
4
4
  import algosdk from 'algosdk';
5
5
 
@@ -19,6 +19,8 @@ declare const useNetwork: () => {
19
19
  };
20
20
  interface Wallet {
21
21
  id: WalletId;
22
+ /** Unique key for this wallet instance. Used for skinned WalletConnect instances. */
23
+ walletKey: WalletKey;
22
24
  metadata: WalletMetadata;
23
25
  accounts: {
24
26
  current: WalletAccount[] | undefined;
package/dist/index.js CHANGED
@@ -83,10 +83,11 @@ var useWallet = () => {
83
83
  const transformToWallet = (wallet) => {
84
84
  return {
85
85
  id: wallet.id,
86
+ walletKey: wallet.walletKey,
86
87
  metadata: wallet.metadata,
87
- accounts: useStore(manager.store, (state) => state.wallets[wallet.id]?.accounts),
88
- isConnected: () => !!walletStore.current[wallet.id],
89
- isActive: () => wallet.id === activeWalletId.current,
88
+ accounts: useStore(manager.store, (state) => state.wallets[wallet.walletKey]?.accounts),
89
+ isConnected: () => !!walletStore.current[wallet.walletKey],
90
+ isActive: () => wallet.walletKey === activeWalletId.current,
90
91
  canSignData: wallet.canSignData ?? false,
91
92
  connect: (args) => wallet.connect(args),
92
93
  disconnect: () => wallet.disconnect(),
@@ -99,7 +100,7 @@ var useWallet = () => {
99
100
  const managerStatus = useStore(manager.store, (state) => state.managerStatus);
100
101
  const isReady = () => managerStatus.current === "ready";
101
102
  const algodClient = useStore(manager.store, (state) => state.algodClient);
102
- const activeWallet = () => wallets.find((w) => w.id === activeWalletId.current);
103
+ const activeWallet = () => wallets.find((w) => w.walletKey === activeWalletId.current);
103
104
  const activeWalletAccounts = useStore(
104
105
  manager.store,
105
106
  (state) => state.wallets[activeWalletId.current]?.accounts
@@ -117,21 +118,21 @@ var useWallet = () => {
117
118
  (state) => state.wallets[activeWalletId.current]?.activeAccount?.address
118
119
  );
119
120
  const signTransactions = (txnGroup, indexesToSign) => {
120
- const wallet = manager.wallets.find((w) => w.id === activeWalletId.current);
121
+ const wallet = manager.wallets.find((w) => w.walletKey === activeWalletId.current);
121
122
  if (!wallet) {
122
123
  throw new Error("No active wallet");
123
124
  }
124
125
  return wallet.signTransactions(txnGroup, indexesToSign);
125
126
  };
126
127
  const transactionSigner = (txnGroup, indexesToSign) => {
127
- const wallet = manager.wallets.find((w) => w.id === activeWalletId.current);
128
+ const wallet = manager.wallets.find((w) => w.walletKey === activeWalletId.current);
128
129
  if (!wallet) {
129
130
  throw new Error("No active wallet");
130
131
  }
131
132
  return wallet.transactionSigner(txnGroup, indexesToSign);
132
133
  };
133
134
  const signData = (data, metadata) => {
134
- const wallet = manager.wallets.find((w) => w.id === activeWalletId.current);
135
+ const wallet = manager.wallets.find((w) => w.walletKey === activeWalletId.current);
135
136
  if (!wallet) {
136
137
  throw new Error("No active wallet");
137
138
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { useStore } from '@tanstack/svelte-store'\nimport algosdk from 'algosdk'\nimport { getContext, setContext } from 'svelte'\nimport {\n type AlgodConfig,\n BaseWallet,\n NetworkId,\n type SignDataResponse,\n type SignMetadata,\n WalletAccount,\n WalletId,\n WalletManager,\n WalletMetadata\n} from '@txnlab/use-wallet'\n\nexport * from '@txnlab/use-wallet'\n\nexport const useWalletContext = (manager: WalletManager) => {\n setContext('walletManager', manager)\n\n manager.resumeSessions().catch((error) => {\n console.error('Error resuming sessions:', error)\n })\n}\n\nexport const useWalletManager = (): WalletManager => {\n const manager: WalletManager = getContext('walletManager')\n if (!manager) {\n throw new Error('useWalletManager must be used within a useWalletContext')\n }\n return manager\n}\n\nexport const useNetwork = () => {\n const manager = useWalletManager()\n const activeNetwork = useStore(manager.store, (state) => state.activeNetwork)\n const activeNetworkConfig = useStore(\n manager.store,\n (state) => state.networkConfig[activeNetwork.current]\n )\n\n const setActiveNetwork = async (networkId: NetworkId | string): Promise<void> => {\n if (networkId === activeNetwork.current) {\n return\n }\n\n if (!manager.networkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n console.info(`[Svelte] Creating new Algodv2 client...`)\n\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n\n await manager.setActiveNetwork(networkId)\n\n manager.store.setState((state) => ({\n ...state,\n activeNetwork: networkId,\n algodClient: newClient\n }))\n\n console.info(`[Svelte] ✅ Active network set to ${networkId}.`)\n }\n\n const updateAlgodConfig = (networkId: string, config: Partial<AlgodConfig>): void => {\n manager.updateAlgodConfig(networkId, config)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork.current) {\n console.info(`[Svelte] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n\n manager.store.setState((state) => ({\n ...state,\n algodClient: newClient\n }))\n }\n }\n\n const resetNetworkConfig = (networkId: string): void => {\n manager.resetNetworkConfig(networkId)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork.current) {\n console.info(`[Svelte] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n\n manager.store.setState((state) => ({\n ...state,\n algodClient: newClient\n }))\n }\n }\n\n return {\n activeNetwork,\n networkConfig: manager.networkConfig,\n activeNetworkConfig,\n setActiveNetwork,\n updateAlgodConfig,\n resetNetworkConfig\n }\n}\n\nexport interface Wallet {\n id: WalletId\n metadata: WalletMetadata\n accounts: { current: WalletAccount[] | undefined }\n isConnected: () => boolean\n isActive: () => boolean\n canSignData: boolean\n connect: (args?: Record<string, any>) => Promise<WalletAccount[]>\n disconnect: () => Promise<void>\n setActive: () => void\n setActiveAccount: (address: string) => void\n}\n\nexport const useWallet = () => {\n const manager = useWalletManager()\n const walletStore = useStore(manager.store, (state) => state.wallets)\n\n const transformToWallet = (wallet: BaseWallet): Wallet => {\n return {\n id: wallet.id,\n metadata: wallet.metadata,\n accounts: useStore(manager.store, (state) => state.wallets[wallet.id]?.accounts),\n isConnected: () => !!walletStore.current[wallet.id],\n isActive: () => wallet.id === activeWalletId.current,\n canSignData: wallet.canSignData ?? false,\n connect: (args) => wallet.connect(args),\n disconnect: () => wallet.disconnect(),\n setActive: () => wallet.setActive(),\n setActiveAccount: (addr) => wallet.setActiveAccount(addr)\n }\n }\n\n const wallets = [...manager.wallets].map(transformToWallet)\n const activeWalletId = useStore(manager.store, (state) => state.activeWallet)\n const managerStatus = useStore(manager.store, (state) => state.managerStatus)\n const isReady = () => managerStatus.current === 'ready'\n const algodClient = useStore(manager.store, (state) => state.algodClient)\n const activeWallet = () => wallets.find((w) => w.id === activeWalletId.current)\n const activeWalletAccounts = useStore(\n manager.store,\n (state) => state.wallets[activeWalletId.current!]?.accounts\n )\n const activeWalletAddresses = useStore(manager.store, (state) =>\n state.wallets[activeWalletId.current!]?.accounts.map((account) => account.address)\n )\n const activeAccount = useStore(\n manager.store,\n (state) => state.wallets[activeWalletId.current!]?.activeAccount\n )\n const activeAddress = useStore(\n manager.store,\n (state) => state.wallets[activeWalletId.current!]?.activeAccount?.address\n )\n\n const signTransactions = <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n const wallet = manager.wallets.find((w) => w.id === activeWalletId.current)\n if (!wallet) {\n throw new Error('No active wallet')\n }\n return wallet.signTransactions(txnGroup, indexesToSign)\n }\n\n const transactionSigner = (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n const wallet = manager.wallets.find((w) => w.id === activeWalletId.current)\n if (!wallet) {\n throw new Error('No active wallet')\n }\n return wallet.transactionSigner(txnGroup, indexesToSign)\n }\n\n const signData = (data: string, metadata: SignMetadata): Promise<SignDataResponse> => {\n const wallet = manager.wallets.find((w) => w.id === activeWalletId.current)\n if (!wallet) {\n throw new Error('No active wallet')\n }\n return wallet.signData(data, metadata)\n }\n\n return {\n wallets,\n isReady,\n algodClient,\n activeWallet,\n activeWalletAccounts,\n activeWalletAddresses,\n activeAccount,\n activeAddress,\n signData,\n signTransactions,\n transactionSigner\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { useStore } from '@tanstack/svelte-store'\nimport algosdk from 'algosdk'\nimport { getContext, setContext } from 'svelte'\nimport {\n type AlgodConfig,\n BaseWallet,\n NetworkId,\n type SignDataResponse,\n type SignMetadata,\n WalletAccount,\n WalletId,\n type WalletKey,\n WalletManager,\n WalletMetadata\n} from '@txnlab/use-wallet'\n\nexport * from '@txnlab/use-wallet'\n\nexport const useWalletContext = (manager: WalletManager) => {\n setContext('walletManager', manager)\n\n manager.resumeSessions().catch((error) => {\n console.error('Error resuming sessions:', error)\n })\n}\n\nexport const useWalletManager = (): WalletManager => {\n const manager: WalletManager = getContext('walletManager')\n if (!manager) {\n throw new Error('useWalletManager must be used within a useWalletContext')\n }\n return manager\n}\n\nexport const useNetwork = () => {\n const manager = useWalletManager()\n const activeNetwork = useStore(manager.store, (state) => state.activeNetwork)\n const activeNetworkConfig = useStore(\n manager.store,\n (state) => state.networkConfig[activeNetwork.current]\n )\n\n const setActiveNetwork = async (networkId: NetworkId | string): Promise<void> => {\n if (networkId === activeNetwork.current) {\n return\n }\n\n if (!manager.networkConfig[networkId]) {\n throw new Error(`Network \"${networkId}\" not found in network configuration`)\n }\n\n console.info(`[Svelte] Creating new Algodv2 client...`)\n\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n\n await manager.setActiveNetwork(networkId)\n\n manager.store.setState((state) => ({\n ...state,\n activeNetwork: networkId,\n algodClient: newClient\n }))\n\n console.info(`[Svelte] ✅ Active network set to ${networkId}.`)\n }\n\n const updateAlgodConfig = (networkId: string, config: Partial<AlgodConfig>): void => {\n manager.updateAlgodConfig(networkId, config)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork.current) {\n console.info(`[Svelte] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n\n manager.store.setState((state) => ({\n ...state,\n algodClient: newClient\n }))\n }\n }\n\n const resetNetworkConfig = (networkId: string): void => {\n manager.resetNetworkConfig(networkId)\n\n // If this is the active network, update the algodClient\n if (networkId === activeNetwork.current) {\n console.info(`[Svelte] Creating new Algodv2 client...`)\n const { algod } = manager.networkConfig[networkId]\n const { token = '', baseServer, port = '', headers = {} } = algod\n const newClient = new algosdk.Algodv2(token, baseServer, port, headers)\n\n manager.store.setState((state) => ({\n ...state,\n algodClient: newClient\n }))\n }\n }\n\n return {\n activeNetwork,\n networkConfig: manager.networkConfig,\n activeNetworkConfig,\n setActiveNetwork,\n updateAlgodConfig,\n resetNetworkConfig\n }\n}\n\nexport interface Wallet {\n id: WalletId\n /** Unique key for this wallet instance. Used for skinned WalletConnect instances. */\n walletKey: WalletKey\n metadata: WalletMetadata\n accounts: { current: WalletAccount[] | undefined }\n isConnected: () => boolean\n isActive: () => boolean\n canSignData: boolean\n connect: (args?: Record<string, any>) => Promise<WalletAccount[]>\n disconnect: () => Promise<void>\n setActive: () => void\n setActiveAccount: (address: string) => void\n}\n\nexport const useWallet = () => {\n const manager = useWalletManager()\n const walletStore = useStore(manager.store, (state) => state.wallets)\n\n const transformToWallet = (wallet: BaseWallet): Wallet => {\n return {\n id: wallet.id,\n walletKey: wallet.walletKey,\n metadata: wallet.metadata,\n accounts: useStore(manager.store, (state) => state.wallets[wallet.walletKey]?.accounts),\n isConnected: () => !!walletStore.current[wallet.walletKey],\n isActive: () => wallet.walletKey === activeWalletId.current,\n canSignData: wallet.canSignData ?? false,\n connect: (args) => wallet.connect(args),\n disconnect: () => wallet.disconnect(),\n setActive: () => wallet.setActive(),\n setActiveAccount: (addr) => wallet.setActiveAccount(addr)\n }\n }\n\n const wallets = [...manager.wallets].map(transformToWallet)\n const activeWalletId = useStore(manager.store, (state) => state.activeWallet)\n const managerStatus = useStore(manager.store, (state) => state.managerStatus)\n const isReady = () => managerStatus.current === 'ready'\n const algodClient = useStore(manager.store, (state) => state.algodClient)\n const activeWallet = () => wallets.find((w) => w.walletKey === activeWalletId.current)\n const activeWalletAccounts = useStore(\n manager.store,\n (state) => state.wallets[activeWalletId.current!]?.accounts\n )\n const activeWalletAddresses = useStore(manager.store, (state) =>\n state.wallets[activeWalletId.current!]?.accounts.map((account) => account.address)\n )\n const activeAccount = useStore(\n manager.store,\n (state) => state.wallets[activeWalletId.current!]?.activeAccount\n )\n const activeAddress = useStore(\n manager.store,\n (state) => state.wallets[activeWalletId.current!]?.activeAccount?.address\n )\n\n const signTransactions = <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n const wallet = manager.wallets.find((w) => w.walletKey === activeWalletId.current)\n if (!wallet) {\n throw new Error('No active wallet')\n }\n return wallet.signTransactions(txnGroup, indexesToSign)\n }\n\n const transactionSigner = (\n txnGroup: algosdk.Transaction[],\n indexesToSign: number[]\n ): Promise<Uint8Array[]> => {\n const wallet = manager.wallets.find((w) => w.walletKey === activeWalletId.current)\n if (!wallet) {\n throw new Error('No active wallet')\n }\n return wallet.transactionSigner(txnGroup, indexesToSign)\n }\n\n const signData = (data: string, metadata: SignMetadata): Promise<SignDataResponse> => {\n const wallet = manager.wallets.find((w) => w.walletKey === activeWalletId.current)\n if (!wallet) {\n throw new Error('No active wallet')\n }\n return wallet.signData(data, metadata)\n }\n\n return {\n wallets,\n isReady,\n algodClient,\n activeWallet,\n activeWalletAccounts,\n activeWalletAddresses,\n activeAccount,\n activeAddress,\n signData,\n signTransactions,\n transactionSigner\n }\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@txnlab/use-wallet-svelte",
3
- "version": "4.3.0",
3
+ "version": "4.4.0",
4
4
  "description": "Svelte library for integrating Algorand wallets into decentralized applications",
5
5
  "author": "Andrew Funk <acfunk@gmail.com>",
6
6
  "license": "MIT",
@@ -30,25 +30,25 @@
30
30
  "dist"
31
31
  ],
32
32
  "dependencies": {
33
- "@tanstack/svelte-store": "0.7.3",
34
- "@txnlab/use-wallet": "4.3.0"
33
+ "@tanstack/svelte-store": "0.9.0",
34
+ "@txnlab/use-wallet": "4.4.0"
35
35
  },
36
36
  "devDependencies": {
37
- "@testing-library/svelte": "5.2.8",
38
- "algosdk": "3.3.1",
39
- "svelte": "5.35.4",
40
- "tsup": "8.5.0",
41
- "typescript": "5.8.3"
37
+ "@testing-library/svelte": "5.3.1",
38
+ "algosdk": "3.5.2",
39
+ "svelte": "5.46.1",
40
+ "tsup": "8.5.1",
41
+ "typescript": "5.9.3"
42
42
  },
43
43
  "peerDependencies": {
44
44
  "@blockshake/defly-connect": "^1.2.1",
45
- "@magic-ext/algorand": "^24.1.0",
45
+ "@magic-ext/algorand": "^24.4.2",
46
46
  "@perawallet/connect": "^1.4.1",
47
47
  "@walletconnect/modal": "^2.7.0",
48
- "@walletconnect/sign-client": "^2.21.4",
48
+ "@walletconnect/sign-client": "^2.23.1",
49
49
  "algosdk": "^3.0.0",
50
- "lute-connect": "^1.6.1",
51
- "magic-sdk": "^29.1.0",
50
+ "lute-connect": "^1.6.3",
51
+ "magic-sdk": "^29.4.2",
52
52
  "svelte": "^5.0.0"
53
53
  },
54
54
  "peerDependenciesMeta": {