@kheopskit/core 0.0.1-alpha.0 → 0.0.1

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.mjs CHANGED
@@ -1,8 +1,48 @@
1
+ // src/utils/logObservable.ts
2
+ import { tap } from "rxjs";
3
+ var logObservable = (label, opts) => tap((value) => {
4
+ const { printValue = false, enabled = true } = opts || {};
5
+ if (!label || !enabled) return;
6
+ const text = `[kheopskit] observable ${label} emit`;
7
+ if (printValue) console.debug(text, value);
8
+ else console.debug(text);
9
+ });
10
+
1
11
  // src/api/kheopskit.ts
2
- import { combineLatest as combineLatest7, map as map8, Observable as Observable7, shareReplay as shareReplay7 } from "rxjs";
12
+ import {
13
+ Observable as Observable8,
14
+ combineLatest as combineLatest8,
15
+ map as map9,
16
+ shareReplay as shareReplay8,
17
+ throttleTime
18
+ } from "rxjs";
19
+
20
+ // src/utils/sortAccounts.ts
21
+ var sortAccounts = (a1, a2) => {
22
+ if (a1.platform === "polkadot") {
23
+ if (a2.platform === "polkadot") {
24
+ if (a1.walletName !== a2.walletName) {
25
+ if (a1.walletName === "talisman") return -1;
26
+ if (a2.walletName === "talisman") return 1;
27
+ return a1.walletName.localeCompare(a2.walletName);
28
+ }
29
+ return a1.name !== a2.name ? (a1.name ?? "").localeCompare(a2.name ?? "") : a1.address.localeCompare(a2.address);
30
+ }
31
+ return -1;
32
+ }
33
+ if (a2.platform === "ethereum") {
34
+ if (a1.walletName !== a2.walletName) {
35
+ if (a1.walletName === "Talisman") return -1;
36
+ if (a2.walletName === "Talisman") return 1;
37
+ return a1.walletName.localeCompare(a2.walletName);
38
+ }
39
+ return 0;
40
+ }
41
+ return 0;
42
+ };
3
43
 
4
44
  // src/api/accounts.ts
5
- import { combineLatest as combineLatest5, map as map6, Observable as Observable5, of as of4, shareReplay as shareReplay5 } from "rxjs";
45
+ import { Observable as Observable3, combineLatest as combineLatest3, map as map4, of as of3, shareReplay as shareReplay3 } from "rxjs";
6
46
 
7
47
  // src/utils/createStore.ts
8
48
  import { BehaviorSubject, filter, fromEvent, map } from "rxjs";
@@ -40,7 +80,8 @@ var setStoredData = (key, val) => {
40
80
  };
41
81
 
42
82
  // src/utils/isEthereumAddress.ts
43
- var isEthereumAddress = (address) => /^0x[a-fA-F0-9]{40}$/.test(address);
83
+ import { isAddress } from "viem";
84
+ var isEthereumAddress = (address) => isAddress(address);
44
85
 
45
86
  // src/utils/isSs58Address.ts
46
87
  import { AccountId } from "polkadot-api";
@@ -50,7 +91,7 @@ var isSs58Address = (address) => {
50
91
  if (!address) return false;
51
92
  accountIdEncoder(address);
52
93
  return true;
53
- } catch (_err) {
94
+ } catch {
54
95
  return false;
55
96
  }
56
97
  };
@@ -60,8 +101,8 @@ var isValidAddress = (address) => {
60
101
  return address.startsWith("0x") ? isEthereumAddress(address) : isSs58Address(address);
61
102
  };
62
103
 
63
- // src/utils/AccountId.ts
64
- var getAccountId = (walletId, address) => {
104
+ // src/utils/WalletAccountId.ts
105
+ var getWalletAccountId = (walletId, address) => {
65
106
  if (!walletId) throw new Error("Missing walletId");
66
107
  if (!isValidAddress(address)) throw new Error("Invalid address");
67
108
  return `${walletId}::${address}`;
@@ -70,19 +111,335 @@ var getAccountId = (walletId, address) => {
70
111
  // src/utils/isWalletPlatform.ts
71
112
  var isWalletPlatform = (platform) => typeof platform === "string" && ["polkadot", "ethereum"].includes(platform);
72
113
 
114
+ // src/utils/getCachedObservable.ts
115
+ var CACHE = /* @__PURE__ */ new Map();
116
+ var getCachedObservable$ = (key, create) => {
117
+ if (!CACHE.has(key)) CACHE.set(key, create());
118
+ return CACHE.get(key);
119
+ };
120
+
73
121
  // src/api/ethereum/accounts.ts
74
122
  import {
123
+ Observable,
124
+ ReplaySubject,
125
+ combineLatest,
126
+ distinctUntilChanged,
127
+ map as map2,
128
+ of,
129
+ shareReplay,
130
+ switchMap
131
+ } from "rxjs";
132
+ import {
133
+ createWalletClient,
134
+ custom,
135
+ getAddress
136
+ } from "viem";
137
+ var getInjectedWalletAccounts$ = (wallet) => {
138
+ if (!wallet.isConnected) return of([]);
139
+ return getCachedObservable$(
140
+ `accounts:${wallet.id}`,
141
+ () => new Observable((subscriber) => {
142
+ const getAccount = (address, i) => {
143
+ const client = createWalletClient({
144
+ account: address,
145
+ transport: custom(wallet.provider)
146
+ });
147
+ return {
148
+ id: getWalletAccountId(wallet.id, address),
149
+ platform: "ethereum",
150
+ client,
151
+ address: getAddress(address),
152
+ walletName: wallet.name,
153
+ walletId: wallet.id,
154
+ isWalletDefault: i === 0
155
+ };
156
+ };
157
+ const handleAccountsChanged = (addresses) => {
158
+ subscriber.next(addresses.map(getAccount));
159
+ };
160
+ wallet.provider.on("accountsChanged", handleAccountsChanged);
161
+ wallet.provider.request({ method: "eth_accounts" }).then((addresses) => {
162
+ subscriber.next(addresses.map(getAccount));
163
+ }).catch((err) => {
164
+ console.error("Failed to get accounts", err);
165
+ subscriber.next([]);
166
+ });
167
+ return () => {
168
+ wallet.provider.removeListener(
169
+ "accountsChanged",
170
+ handleAccountsChanged
171
+ );
172
+ };
173
+ }).pipe(shareReplay({ refCount: true, bufferSize: 1 }))
174
+ );
175
+ };
176
+ var wrapWalletConnectProvider = (provider, sessionTopic, caipNetworkId) => {
177
+ return new Proxy(provider, {
178
+ get(target, prop, receiver) {
179
+ if (prop !== "request") return Reflect.get(target, prop, receiver);
180
+ return (args) => {
181
+ if (args && typeof args === "object" && args.method) {
182
+ if (!args.topic) args.topic = sessionTopic;
183
+ if (!args.chainId) args.chainId = caipNetworkId;
184
+ }
185
+ return target.request(args);
186
+ };
187
+ }
188
+ });
189
+ };
190
+ var getAppKitAccounts$ = (wallet) => {
191
+ const account = wallet.appKit.getAccount("eip155");
192
+ const provider = wallet.appKit.getProvider("eip155");
193
+ if (!wallet.isConnected || !wallet.appKit || !account?.allAccounts.length || !provider?.session)
194
+ return of([]);
195
+ return getCachedObservable$(
196
+ "accounts:appKit",
197
+ () => new Observable((subscriber) => {
198
+ const caipNetworkId$ = new ReplaySubject(1);
199
+ const handleChainChanged = (chainId) => {
200
+ caipNetworkId$.next(`eip155:${chainId}`);
201
+ };
202
+ provider.on("chainChanged", handleChainChanged);
203
+ provider.request({ method: "eth_chainId" }).then(handleChainChanged);
204
+ const sub = caipNetworkId$.pipe(
205
+ distinctUntilChanged(),
206
+ map2(
207
+ (caipNetworkId) => custom(
208
+ wrapWalletConnectProvider(
209
+ provider,
210
+ // biome-ignore lint/style/noNonNullAssertion: <explanation>
211
+ provider.session.topic,
212
+ caipNetworkId
213
+ )
214
+ )
215
+ ),
216
+ map2(
217
+ (transport) => account.allAccounts.map((acc, i) => {
218
+ const client = createWalletClient({
219
+ account: acc.address,
220
+ transport
221
+ });
222
+ return {
223
+ id: getWalletAccountId(wallet.id, acc.address),
224
+ platform: "ethereum",
225
+ walletName: wallet.name,
226
+ walletId: wallet.id,
227
+ address: acc.address,
228
+ client,
229
+ isWalletDefault: i === 0
230
+ };
231
+ })
232
+ )
233
+ ).subscribe(subscriber);
234
+ return () => {
235
+ provider.off("chainChanged", handleChainChanged);
236
+ sub.unsubscribe();
237
+ };
238
+ }).pipe(shareReplay({ refCount: true, bufferSize: 1 }))
239
+ );
240
+ };
241
+ var getEthereumAccounts$ = (ethereumWallets) => new Observable((subscriber) => {
242
+ const sub = ethereumWallets.pipe(
243
+ map2((wallets) => wallets.filter((w) => w.isConnected)),
244
+ switchMap((wallets) => {
245
+ return wallets.length ? combineLatest([
246
+ ...wallets.filter((w) => w.type === "injected").map(getInjectedWalletAccounts$),
247
+ ...wallets.filter((w) => w.type === "appKit").map(getAppKitAccounts$)
248
+ // todo appkit
249
+ ]) : of([]);
250
+ }),
251
+ map2((accounts) => accounts.flat()),
252
+ distinctUntilChanged(isSameAccountsList)
253
+ ).subscribe(subscriber);
254
+ return () => {
255
+ sub.unsubscribe();
256
+ };
257
+ }).pipe(
258
+ // logObservable("ethereumAccounts$", true),
259
+ shareReplay({ refCount: true, bufferSize: 1 })
260
+ );
261
+ var isSameAccountsList = (a, b) => {
262
+ if (a.length !== b.length) return false;
263
+ return a.every((account, i) => account.id === b[i]?.id);
264
+ };
265
+
266
+ // src/api/polkadot/accounts.ts
267
+ import {
268
+ getPolkadotSignerFromPjs
269
+ } from "polkadot-api/pjs-signer";
270
+ import {
271
+ Observable as Observable2,
75
272
  combineLatest as combineLatest2,
273
+ distinctUntilChanged as distinctUntilChanged2,
76
274
  map as map3,
77
- Observable as Observable2,
78
- of,
275
+ of as of2,
79
276
  shareReplay as shareReplay2,
80
- switchMap
277
+ switchMap as switchMap2
81
278
  } from "rxjs";
82
- import { getAddress } from "viem";
279
+ var getInjectedWalletAccounts$2 = (wallet) => {
280
+ if (!wallet.isConnected) return of2([]);
281
+ return new Observable2((subscriber) => {
282
+ const getAccount = (account) => ({
283
+ id: getWalletAccountId(wallet.id, account.address),
284
+ ...account,
285
+ platform: "polkadot",
286
+ walletName: wallet.name,
287
+ walletId: wallet.id
288
+ });
289
+ const extension = wallet.extension;
290
+ const unsubscribe = extension.subscribe((accounts) => {
291
+ subscriber.next(accounts.map(getAccount));
292
+ });
293
+ subscriber.next(extension.getAccounts().map(getAccount));
294
+ return () => {
295
+ return unsubscribe();
296
+ };
297
+ });
298
+ };
299
+ var getAppKitPolkadotSigner = (appKit, address) => {
300
+ const provider = appKit.getProvider("polkadot");
301
+ if (!provider) throw new Error("No provider found");
302
+ if (!provider.session) throw new Error("No session found");
303
+ return getPolkadotSignerFromPjs(
304
+ address,
305
+ (transactionPayload) => {
306
+ if (!provider.session) throw new Error("No session found");
307
+ return provider.client.request({
308
+ topic: provider.session.topic,
309
+ chainId: `polkadot:${transactionPayload.genesisHash.substring(2, 34)}`,
310
+ request: {
311
+ method: "polkadot_signTransaction",
312
+ params: {
313
+ address,
314
+ transactionPayload
315
+ }
316
+ }
317
+ });
318
+ },
319
+ async ({ address: address2, data }) => {
320
+ if (!provider.session) throw new Error("No session found");
321
+ const networks = appKit.getCaipNetworks("polkadot");
322
+ const chainId = networks[0]?.caipNetworkId;
323
+ if (!chainId) throw new Error("No chainId found");
324
+ return provider.client.request({
325
+ topic: provider.session.topic,
326
+ chainId,
327
+ request: {
328
+ method: "polkadot_signMessage",
329
+ params: {
330
+ address: address2,
331
+ message: data
332
+ }
333
+ }
334
+ });
335
+ }
336
+ );
337
+ };
338
+ var getAppKitAccounts$2 = (wallet) => {
339
+ const account = wallet.appKit.getAccount("polkadot");
340
+ const provider = wallet.appKit.getProvider("polkadot");
341
+ if (!wallet.isConnected || !wallet.appKit || !account?.allAccounts.length || !provider?.session)
342
+ return of2([]);
343
+ return of2(
344
+ account.allAccounts.map(
345
+ (acc) => ({
346
+ id: getWalletAccountId(wallet.id, acc.address),
347
+ platform: "polkadot",
348
+ walletName: wallet.name,
349
+ walletId: wallet.id,
350
+ address: acc.address,
351
+ polkadotSigner: getAppKitPolkadotSigner(wallet.appKit, acc.address),
352
+ genesisHash: null,
353
+ name: `${wallet.name} Polkadot`,
354
+ type: "sr25519"
355
+ })
356
+ )
357
+ );
358
+ };
359
+ var getPolkadotAccounts$ = (polkadotWallets$) => new Observable2((subscriber) => {
360
+ const sub = polkadotWallets$.pipe(
361
+ map3((wallets) => wallets.filter((w) => w.isConnected)),
362
+ switchMap2(
363
+ (wallets) => wallets.length ? combineLatest2([
364
+ ...wallets.filter((w) => w.type === "injected").map(getInjectedWalletAccounts$2),
365
+ ...wallets.filter((w) => w.type === "appKit").map(getAppKitAccounts$2)
366
+ ]) : of2([])
367
+ ),
368
+ map3((accounts) => accounts.flat()),
369
+ distinctUntilChanged2(isSameAccountsList2)
370
+ ).subscribe(subscriber);
371
+ return () => {
372
+ sub.unsubscribe();
373
+ };
374
+ }).pipe(shareReplay2({ refCount: true, bufferSize: 1 }));
375
+ var isSameAccountsList2 = (a, b) => {
376
+ if (a.length !== b.length) return false;
377
+ return a.every((account, i) => account.id === b[i]?.id);
378
+ };
83
379
 
84
- // src/api/store.ts
85
- import { uniq } from "lodash";
380
+ // src/api/accounts.ts
381
+ var getAccounts$ = (config, wallets) => {
382
+ return new Observable3((subscriber) => {
383
+ const sources = config.platforms.map(
384
+ (platform) => {
385
+ switch (platform) {
386
+ case "polkadot":
387
+ return getPolkadotAccounts$(
388
+ wallets.pipe(
389
+ map4((w) => w.filter((w2) => w2.platform === "polkadot"))
390
+ )
391
+ );
392
+ case "ethereum":
393
+ return getEthereumAccounts$(
394
+ wallets.pipe(
395
+ map4((w) => w.filter((w2) => w2.platform === "ethereum"))
396
+ )
397
+ );
398
+ }
399
+ }
400
+ );
401
+ const accounts$ = sources.length ? combineLatest3(sources).pipe(
402
+ map4((accounts) => accounts.flat().sort(sortAccounts))
403
+ ) : of3([]);
404
+ const sub = accounts$.subscribe(subscriber);
405
+ return () => {
406
+ sub.unsubscribe();
407
+ };
408
+ }).pipe(shareReplay3({ refCount: true, bufferSize: 1 }));
409
+ };
410
+
411
+ // src/api/config.ts
412
+ var DEFAULT_CONFIG = {
413
+ autoReconnect: true,
414
+ platforms: ["polkadot"],
415
+ debug: false
416
+ };
417
+ var resolveConfig = (config) => {
418
+ return Object.assign({}, DEFAULT_CONFIG, config);
419
+ };
420
+
421
+ // src/utils/sortWallets.ts
422
+ var sortWallets = (w1, w2) => {
423
+ if (w1.platform !== w2.platform) {
424
+ return w1.platform === "polkadot" ? -1 : 1;
425
+ }
426
+ if (w1.name.toLowerCase() === "talisman") return -1;
427
+ if (w2.name.toLowerCase() === "talisman") return 1;
428
+ return w1.name.localeCompare(w2.name);
429
+ };
430
+
431
+ // src/api/wallets.ts
432
+ import {
433
+ Observable as Observable7,
434
+ combineLatest as combineLatest7,
435
+ distinct,
436
+ filter as filter2,
437
+ map as map8,
438
+ mergeMap as mergeMap2,
439
+ of as of6,
440
+ shareReplay as shareReplay7,
441
+ take
442
+ } from "rxjs";
86
443
 
87
444
  // src/utils/WalletId.ts
88
445
  var getWalletId = (platform, identifier) => {
@@ -99,6 +456,7 @@ var parseWalletId = (walletId) => {
99
456
  };
100
457
 
101
458
  // src/api/store.ts
459
+ import { uniq } from "lodash";
102
460
  var LOCAL_STORAGE_KEY = "kheopskit";
103
461
  var DEFAULT_SETTINGS = {};
104
462
  var storage = createStore(LOCAL_STORAGE_KEY, DEFAULT_SETTINGS);
@@ -125,14 +483,108 @@ var store = {
125
483
 
126
484
  // src/api/ethereum/wallets.ts
127
485
  import { createStore as createStore2 } from "mipd";
486
+ import {
487
+ BehaviorSubject as BehaviorSubject3,
488
+ Observable as Observable5,
489
+ combineLatest as combineLatest5,
490
+ map as map6,
491
+ shareReplay as shareReplay5
492
+ } from "rxjs";
493
+
494
+ // src/api/appKit.ts
495
+ import { createAppKit } from "@reown/appkit/core";
128
496
  import {
129
497
  BehaviorSubject as BehaviorSubject2,
130
- combineLatest,
131
- map as map2,
132
- Observable,
133
- shareReplay
498
+ Observable as Observable4,
499
+ combineLatest as combineLatest4,
500
+ distinctUntilChanged as distinctUntilChanged3,
501
+ map as map5,
502
+ of as of4,
503
+ shareReplay as shareReplay4
134
504
  } from "rxjs";
135
- var providersDetails$ = new Observable(
505
+ var WALLET_CONNECT_ICON = "data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjQwMCIgdmlld0JveD0iMCAwIDQwMCA0MDAiIHdpZHRoPSI0MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZD0ibTAgMGg0MDB2NDAwaC00MDB6Ii8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxjaXJjbGUgY3g9IjIwMCIgY3k9IjIwMCIgZmlsbD0iIzMzOTZmZiIgcj0iMTk5LjUiIHN0cm9rZT0iIzY2YjFmZiIvPjxwYXRoIGQ9Im0xMjIuNTE5IDE0OC45NjVjNDIuNzkxLTQxLjcyOSAxMTIuMTcxLTQxLjcyOSAxNTQuOTYyIDBsNS4xNSA1LjAyMmMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtMTcuNjE3IDE3LjE4Yy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTcuMDg3LTYuOTExYy0yOS44NTMtMjkuMTExLTc4LjI1My0yOS4xMTEtMTA4LjEwNiAwbC03LjU5IDcuNDAxYy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTE3LjYxNy0xNy4xOGMtMi4xNC0yLjA4Ni0yLjE0LTUuNDY5IDAtNy41NTV6bTE5MS4zOTcgMzUuNTI5IDE1LjY3OSAxNS4yOWMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtNzAuNyA2OC45NDRjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTUwLjE3OC00OC45MzFjLS41MzUtLjUyMi0xLjQwMi0uNTIyLTEuOTM3IDBsLTUwLjE3OCA0OC45MzFjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTcwLjcwMTUtNjguOTQ1Yy0yLjEzOTYtMi4wODYtMi4xMzk2LTUuNDY5IDAtNy41NTVsMTUuNjc5NS0xNS4yOWMyLjEzOTYtMi4wODYgNS42MDg1LTIuMDg2IDcuNzQ4MSAwbDUwLjE3ODkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3Ny00OC45MzJjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMGw1MC4xNzkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3OS00OC45MzFjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMHoiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+";
506
+ var cachedAppKit = null;
507
+ var getAppKitWallets$ = (config) => {
508
+ if (!config.walletConnect) return of4({});
509
+ const walletConnect = config.walletConnect;
510
+ if (!cachedAppKit) {
511
+ cachedAppKit = new Observable4((subscriber) => {
512
+ const appKit = createAppKit({
513
+ projectId: walletConnect.projectId,
514
+ metadata: walletConnect.metadata,
515
+ networks: walletConnect.networks,
516
+ universalProviderConfigOverride: {
517
+ methods: {
518
+ polkadot: ["polkadot_signTransaction", "polkadot_signMessage"]
519
+ }
520
+ }
521
+ });
522
+ const status$ = new BehaviorSubject2({
523
+ isPolkadotConnected: false,
524
+ isEthereumConnected: false
525
+ });
526
+ const unsubProviders = appKit.subscribeProviders((providers) => {
527
+ status$.next({
528
+ isPolkadotConnected: !!providers.polkadot,
529
+ isEthereumConnected: !!providers.eip155
530
+ });
531
+ });
532
+ const polkadotWallet$ = appKit.chainNamespaces.includes("polkadot") ? status$.pipe(
533
+ map5((s) => s.isPolkadotConnected),
534
+ distinctUntilChanged3(),
535
+ map5((isConnected) => {
536
+ const walletInfo = appKit.getWalletInfo();
537
+ return {
538
+ id: getWalletId("polkadot", "walletconnect"),
539
+ platform: "polkadot",
540
+ type: "appKit",
541
+ appKit,
542
+ // todo maybe we dont want to expose the appKit instance
543
+ name: walletInfo?.name ?? "WalletConnect",
544
+ icon: walletInfo?.icon ?? WALLET_CONNECT_ICON,
545
+ connect: async () => {
546
+ if (!isConnected) await appKit.open();
547
+ },
548
+ disconnect: () => {
549
+ if (isConnected) appKit.disconnect();
550
+ },
551
+ isConnected
552
+ };
553
+ })
554
+ ) : of4(void 0);
555
+ const ethereumWallet$ = appKit.chainNamespaces.includes("eip155") ? status$.pipe(
556
+ map5((s) => s.isEthereumConnected),
557
+ distinctUntilChanged3(),
558
+ map5((isConnected) => {
559
+ const walletInfo = appKit.getWalletInfo();
560
+ return {
561
+ id: getWalletId("ethereum", "walletconnect"),
562
+ platform: "ethereum",
563
+ type: "appKit",
564
+ appKit,
565
+ name: walletInfo?.name ?? "WalletConnect",
566
+ icon: walletInfo?.icon ?? WALLET_CONNECT_ICON,
567
+ connect: () => appKit.open(),
568
+ disconnect: () => appKit.disconnect(),
569
+ isConnected
570
+ };
571
+ })
572
+ ) : of4(void 0);
573
+ const sub = combineLatest4({
574
+ polkadot: polkadotWallet$,
575
+ ethereum: ethereumWallet$
576
+ }).subscribe(subscriber);
577
+ return () => {
578
+ sub.unsubscribe();
579
+ unsubProviders();
580
+ };
581
+ }).pipe(shareReplay4({ refCount: true, bufferSize: 1 }));
582
+ }
583
+ return cachedAppKit;
584
+ };
585
+
586
+ // src/api/ethereum/wallets.ts
587
+ var providersDetails$ = new Observable5(
136
588
  (subscriber) => {
137
589
  const store2 = createStore2();
138
590
  const unsubscribe = store2.subscribe((providerDetails2) => {
@@ -145,17 +597,14 @@ var providersDetails$ = new Observable(
145
597
  store2.destroy();
146
598
  };
147
599
  }
148
- ).pipe(shareReplay({ refCount: true, bufferSize: 1 }));
149
- providersDetails$.subscribe(() => {
150
- console.count("[kheopskit] providers$ emit");
151
- });
152
- var ethereumWallets$ = new Observable(
600
+ ).pipe(shareReplay5({ refCount: true, bufferSize: 1 }));
601
+ var ethereumInjectedWallets$ = new Observable5(
153
602
  (subscriber) => {
154
- const enabledWalletIds$ = new BehaviorSubject2(/* @__PURE__ */ new Set());
603
+ const enabledWalletIds$ = new BehaviorSubject3(/* @__PURE__ */ new Set());
155
604
  const connectWallet = async (walletId, provider) => {
156
605
  if (enabledWalletIds$.value.has(walletId))
157
606
  throw new Error(`Extension ${walletId} already connected`);
158
- provider.request({
607
+ await provider.request({
159
608
  method: "eth_requestAccounts"
160
609
  });
161
610
  const newSet = new Set(enabledWalletIds$.value);
@@ -163,7 +612,7 @@ var ethereumWallets$ = new Observable(
163
612
  enabledWalletIds$.next(newSet);
164
613
  store.addEnabledWalletId(walletId);
165
614
  };
166
- const disconnectWallet = async (walletId, _provider) => {
615
+ const disconnectWallet = async (walletId) => {
167
616
  if (!enabledWalletIds$.value.has(walletId))
168
617
  throw new Error(`Extension ${walletId} is not connected`);
169
618
  const newSet = new Set(enabledWalletIds$.value);
@@ -171,21 +620,22 @@ var ethereumWallets$ = new Observable(
171
620
  enabledWalletIds$.next(newSet);
172
621
  store.removeEnabledWalletId(walletId);
173
622
  };
174
- const sub = combineLatest([providersDetails$, enabledWalletIds$]).pipe(
175
- map2(([providerDetails, enabledWalletIds]) => {
623
+ const sub = combineLatest5([providersDetails$, enabledWalletIds$]).pipe(
624
+ map6(([providerDetails, enabledWalletIds]) => {
176
625
  return providerDetails.map((pd) => {
177
626
  const walletId = getWalletId("ethereum", pd.info.rdns);
178
627
  const provider = pd.provider;
179
628
  return {
180
629
  platform: "ethereum",
630
+ type: "injected",
181
631
  id: walletId,
182
632
  name: pd.info.name,
183
633
  icon: pd.info.icon,
184
634
  provider,
185
- isEnabled: enabledWalletIds.has(walletId),
635
+ isConnected: enabledWalletIds.has(walletId),
186
636
  providerId: pd.info.rdns,
187
637
  connect: () => connectWallet(walletId, provider),
188
- disconnect: () => disconnectWallet(walletId, provider)
638
+ disconnect: () => disconnectWallet(walletId)
189
639
  };
190
640
  });
191
641
  })
@@ -194,66 +644,42 @@ var ethereumWallets$ = new Observable(
194
644
  sub.unsubscribe();
195
645
  };
196
646
  }
197
- ).pipe(shareReplay({ refCount: true, bufferSize: 1 }));
198
- ethereumWallets$.subscribe(() => {
199
- console.count("[kheopskit] ethereumWallets$ emit");
200
- });
201
-
202
- // src/api/ethereum/accounts.ts
203
- var getWalletAccounts$ = (wallet) => {
204
- if (!wallet.isEnabled) return of([]);
205
- return new Observable2((subscriber) => {
206
- const getAccount = (address, i) => ({
207
- id: getAccountId(wallet.id, address),
208
- platform: "ethereum",
209
- provider: wallet.provider,
210
- address: getAddress(address),
211
- walletName: wallet.name,
212
- walletId: wallet.id,
213
- isWalletDefault: i === 0
214
- });
215
- const listener = (addresses) => {
216
- subscriber.next(addresses.map(getAccount));
217
- };
218
- wallet.provider.on("accountsChanged", listener);
219
- wallet.provider.request({ method: "eth_accounts" }).then((addresses) => {
220
- subscriber.next(addresses.map(getAccount));
221
- }).catch((err) => {
222
- console.error("Failed to get accounts", err);
223
- subscriber.next([]);
224
- });
225
- return () => {
226
- wallet.provider.removeListener("accountsChanged", listener);
227
- };
228
- });
229
- };
230
- var ethereumAccounts$ = new Observable2(
231
- (subscriber) => {
232
- const sub = ethereumWallets$.pipe(
233
- map3((wallets) => wallets.filter((w) => w.isEnabled)),
234
- switchMap(
235
- (wallets) => wallets.length ? combineLatest2(wallets.map(getWalletAccounts$)) : of([])
236
- ),
237
- map3((accounts) => accounts.flat())
647
+ ).pipe(shareReplay5({ refCount: true, bufferSize: 1 }));
648
+ var getEthereumWallets$ = (config) => {
649
+ return new Observable5((subscriber) => {
650
+ const subscription = combineLatest5([
651
+ ethereumInjectedWallets$,
652
+ getAppKitWallets$(config)?.pipe(map6((w) => w.ethereum))
653
+ ]).pipe(
654
+ map6(
655
+ ([injectedWallets, appKitWallet]) => appKitWallet ? [...injectedWallets, appKitWallet] : injectedWallets
656
+ )
238
657
  ).subscribe(subscriber);
239
658
  return () => {
240
- sub.unsubscribe();
659
+ subscription.unsubscribe();
241
660
  };
242
- }
243
- ).pipe(shareReplay2({ refCount: true, bufferSize: 1 }));
244
- ethereumAccounts$.subscribe(() => {
245
- console.count("[kheopskit] ethereumAccounts$ emit");
246
- });
661
+ }).pipe(shareReplay5({ refCount: true, bufferSize: 1 }));
662
+ };
247
663
 
248
- // src/api/polkadot/accounts.ts
249
- import {
250
- combineLatest as combineLatest4,
251
- map as map5,
252
- Observable as Observable4,
253
- of as of3,
254
- shareReplay as shareReplay4,
255
- switchMap as switchMap2
256
- } from "rxjs";
664
+ // src/utils/polkadotExtensions.ts
665
+ var POLKADOT_EXTENSIONS = {
666
+ talisman: {
667
+ name: "Talisman",
668
+ icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICA8cGF0aCBmaWxsPSIjZGRmZTc2IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0wIDcwLjI1YzAgMjEuMjU1IDAgMzEuODgzIDQuNDYzIDM5Ljg1MmEzNSAzNSAwIDAgMCAxMy40MzUgMTMuNDM1QzI1Ljg2NyAxMjggMzYuNDk1IDEyOCA1Ny43NSAxMjhoMTIuNWMyMS4yNTUgMCAzMS44ODMgMCAzOS44NTItNC40NjNhMzUgMzUgMCAwIDAgMTMuNDM1LTEzLjQzNUMxMjggMTAyLjEzMyAxMjggOTEuNTA1IDEyOCA3MC4yNXYtMTIuNWMwLTIxLjI1NSAwLTMxLjg4My00LjQ2My0zOS44NTJhMzUgMzUgMCAwIDAtMTMuNDM1LTEzLjQzNUMxMDIuMTMzIDAgOTEuNTA1IDAgNzAuMjUgMGgtMTIuNUMzNi40OTUgMCAyNS44NjcgMCAxNy44OTggNC40NjNBMzUgMzUgMCAwIDAgNC40NjMgMTcuODk4QzAgMjUuODY3IDAgMzYuNDk1IDAgNTcuNzVaIi8+CiAgICA8cGF0aCBmaWxsPSIjZWE1NzUwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Im0zMy44NzkgMzUuMTE3LS41IDE5LjE2NWM4LjEwNyA0LjE2OCAxNS43NSA0LjA3NSAyNC43NCAyLjA2MyAzLjU2LTEuMzk3IDYuMDU2LTEuNzAyIDkuNTExIDAgOS4wNjcgMi44MTYgMTYuOTY5IDEuOTUgMjUuMTg1LTIuMjQzbC0uNDg1LTE5LjE4N2MwLTEwLjgwNS03LjAwNC0xNC45NjItMTQuNjMyLTEyLjczOS0uNzc5LjIzMi0xLjk0NCAxLjI3NC0xLjk0NCAyLjIwN2wtLjE4MSAxOC43MzNhMS43NyAxLjc3IDAgMSAxLTMuNTM4LS4wMTVWMjAuMDY3YTguODM4IDguODM4IDAgMCAwLTE3LjY3NSAwVjQzLjFhMS43NyAxLjc3IDAgMSAxLTMuNTM4LjAxNWwtLjE3Ni0xOC43NDNjMC0uOTIzLTEuMTA5LTEuOTYtMS44ODItMi4xOTItOC44LTIuNjEtMTQuODggMi41MzgtMTQuODggMTIuOTM2Wm0yLjQ3NSAyMy44NDNhNDguNDMgNDguNDMgMCAwIDEtNS4yMDktMi4yNTRjLTQuNzMtMi4yNjktMTIuMDk1LTEuNTYyLTE3LjA3MiA0LjExMS0yLjI3NCAyLjYtLjUxNSA2LjM2IDIuNzcgNy40NDggMS41ODMuNTI2IDMuMDE3IDEuNDEzIDQuMzUzIDIuNDA4bC40NjQuMzM2YzQuMTMyIDIuOTY1IDYuNzkzIDcuNDA2IDcuMDU2IDEyLjQ4NmwuMjUzIDQuODEyYTMxLjYxNiAzMS42MTYgMCAwIDAgMTkuNDI4IDI1Ljk1OSAzOC41OSAzOC41OSAwIDAgMCAyOS4zMjcgMCAzMS42MTYgMzEuNjE2IDAgMCAwIDE5LjQyOS0yNS45NTljLjA0Ni0uODI1LjA2MS0xLjY1LjA1MS0yLjQ2NWwuMTI0LTIuMzQ3Yy4yNjMtNS4wOCAyLjkyNC05LjUyIDcuMDU2LTEyLjQ4NmwuNDY0LS4zMzZjMS4zNC0uOTk1IDIuNzctMS44ODIgNC4zNTMtMi40MDggMy4yODUtMS4wODkgNS4wNS00Ljg0OSAyLjc3LTcuNDQ4LTQuOTc4LTUuNjczLTEyLjM0My02LjM3NS0xNy4wNzItNC4xMS0xLjcxOC44MjUtMy40MzUgMS42NS01LjIxIDIuMjUzbC0zLjYyIDEuMjM4LS4wMS4wNDFjLTYuNjU0IDEuODQyLTEyLjEyIDEuODQ3LTE4LjM5OC0uNzQyLTMuMTc3LTEuMzEtNi4zOC0xLjU1OC05LjQ4IDAtNS45NjcgMS44NTYtMTIuMDQ4IDIuNjQtMTguMjA2LjcwMWwtMy42MjYtMS4yMzhabTI2LjY2NSA0NC43MzJjMTMuMzkgMCAyNC4yNDEtMTUuNTk2IDI0LjI0MS0xNS41OTZTNzYuNDEgNzIuNDk5IDYzLjAyIDcyLjQ5OWMtMTMuMzg1IDAtMjQuMjM2IDE1LjU5Ny0yNC4yMzYgMTUuNTk3czEwLjg1MSAxNS41OTYgMjQuMjQgMTUuNTk2Wm0xMC44ODMtMTUuNTk2YzAgNi4wMS00Ljg3MiAxMC44ODItMTAuODgzIDEwLjg4Mi02LjAxIDAtMTAuODgyLTQuODcyLTEwLjg4Mi0xMC44ODJzNC44NzItMTAuODgzIDEwLjg4Mi0xMC44ODMgMTAuODgzIDQuODcyIDEwLjg4MyAxMC44ODNabS0xMC44ODMgNC45MzZhNC45MzYgNC45MzYgMCAxIDAgMC05Ljg3MiA0LjkzNiA0LjkzNiAwIDAgMCAwIDkuODcyWiIvPgo8L3N2Zz4K"
669
+ },
670
+ "polkadot-js": {
671
+ name: "Polkadot.js",
672
+ icon: "data:image/svg+xml;base64,ICA8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEwNi4yIDEwNi4yIj4KICAgIDxkZWZzPjwvZGVmcz4KICAgIDxnIGlkPSJMYXllcl8yIiBkYXRhLW5hbWU9IkxheWVyIDIiPgogICAgICA8ZyBpZD0iTGF5ZXJfMS0yIiBkYXRhLW5hbWU9IkxheWVyIDEiPgogICAgICAgIDxjaXJjbGUgY3g9IjUzLjEiIGN5PSI1My4xIiByPSI1My4xIiBmaWxsPSIjZjI5MjM1IiAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICBmaWxsPSIjZmZmIgogICAgICAgICAgZD0iTTU0LjQ3IDEzLjc2YTI4Ljg1IDI4Ljg1IDAgMDAtMjguNzMgMjguNzMgMjkuMzQgMjkuMzQgMCAwMDEuNTIgOS4zNCA0IDQgMCAxMDcuNDktMi41MkExOC42NyAxOC42NyAwIDAxMzMuNjMgNDJhMjAuNzIgMjAuNzIgMCAxMTIyIDIxLjMxcy00IC4yNS02IC40OWMtLjc0LjExLTEuNDguMjYtMi4yLjQ0YS4yOC4yOCAwIDAxLS4zOCAwIC4yNy4yNyAwIDAxMC0uMzJsLjYzLTMuNDEgMy43OS0xN2EzLjk0IDMuOTQgMCAxMC03LjcxLTEuNjVzLTkgNDEuNy05IDQyLjA4YTMuNzkgMy43OSAwIDAwMi43NCA0LjZoLjI4YTMuNzggMy43OCAwIDAwNC42MS0yLjcxLjQzLjQzIDAgMDAwLS4xMXYtLjE5Yy4xMS0uNDkgMS4yNS02IDEuMjUtNmExMC4yMyAxMC4yMyAwIDAxOC40Ni04Yy44Ny0uMTMgNC41My0uMzggNC41My0uMzhhMjguNzEgMjguNzEgMCAwMC0yLjExLTU3LjI3eiIKICAgICAgICAvPgogICAgICAgIDxwYXRoCiAgICAgICAgICBmaWxsPSIjZmZmIgogICAgICAgICAgZD0iTTU2LjIxIDgwYTQuNzggNC43OCAwIDAwLTUuNjYgMy43MS4yNC4yNCAwIDAxMCAuMDggNC43NyA0Ljc3IDAgMDAzLjY1IDUuNjdoLjE0QTQuNyA0LjcgMCAwMDYwIDg2di0uMzJBNSA1IDAgMDA1Ni4yMSA4MHoiCiAgICAgICAgLz4KICAgICAgPC9nPgogICAgPC9nPgogIDwvc3ZnPg=="
673
+ },
674
+ "subwallet-js": {
675
+ name: "SubWallet",
676
+ icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYwIiBoZWlnaHQ9IjE2MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNODAgNGM1Ny42MyAwIDc2IDE4LjM3IDc2IDc2IDAgNTcuNjMtMTguMzcgNzYtNzYgNzYtNTcuNjMgMC03Ni0xOC4zNy03Ni03NkM0IDIyLjM3IDIyLjM3IDQgODAgNFoiIGZpbGw9InVybCgjYSkiLz48ZyBjbGlwLXBhdGg9InVybCgjYikiPjxwYXRoIGQ9Ik0xMTIuNjE1IDY2LjcyVjUzLjM5OEw1OC43NiAzMiA0OCAzNy40MTJsLjA1NyA0MS40NjQgNDAuMjkyIDE2LjA3LTIxLjUyIDkuMDc1di03LjAxOEw1Ni45NSA5My4wM2wtOC44OTMgNC4xNjN2MjUuMzk1TDU4Ljc2OSAxMjhsNTMuODQ2LTI0LjA2MlY4Ni44NjlMNjQuMTU0IDY3LjY1N1Y1NmwzOC40NDkgMTUuMjE2IDEwLjAxMi00LjQ5NloiIGZpbGw9IiNmZmYiLz48L2c+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iODAiIHkxPSI0IiB4Mj0iODAiIHkyPSIxNTYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBzdG9wLWNvbG9yPSIjMDA0QkZGIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNENFQUFDIi8+PC9saW5lYXJHcmFkaWVudD48Y2xpcFBhdGggaWQ9ImIiPjxwYXRoIGZpbGw9IiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ4IDMyKSIgZD0iTTAgMGg2NC42MTV2OTZIMHoiLz48L2NsaXBQYXRoPjwvZGVmcz48L3N2Zz4="
677
+ },
678
+ enkrypt: {
679
+ name: "Enkrypt",
680
+ icon: "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODEiIGhlaWdodD0iODEiIHZpZXdCb3g9IjAgMCA4MSA4MSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNy4wMDU3IDE3LjAwNjJDMTguOTMwMyAxNS4wODE2IDIxLjU0MDUgMTQuMDAwNCAyNC4yNjIyIDE0LjAwMDRMNjcuMzI5NiAxNFYyMS44NzQxQzY3LjMyOTYgMjMuODMwNSA2Ni41NTIzIDI1LjcwNjcgNjUuMTY5IDI3LjA5QzYzLjc4NTcgMjguNDczMyA2MS45MDk1IDI5LjI1MDQgNTkuOTUzMiAyOS4yNTA0SDM5LjcwNDVDMzYuOTgyOCAyOS4yNTA0IDM0LjM3MjYgMzAuMzMxNiAzMi40NDggMzIuMjU2MUMzMC41MjM1IDM0LjE4MDcgMjkuNDQyMyAzNi43OTA5IDI5LjQ0MjMgMzkuNTEyNlY0Mi4xMjQyQzI5LjQ0MjMgNDQuODQ1OSAzMC41MjM1IDQ3LjQ1NjEgMzIuNDQ4IDQ5LjM4MDZDMzQuMzcyNiA1MS4zMDUxIDM2Ljk4MjggNTIuMzg2MyAzOS43MDQ1IDUyLjM4NjNINTkuOTUzMkM2MS45MDk1IDUyLjM4NjMgNjMuNzg1NyA1My4xNjM1IDY1LjE2OSA1NC41NDY4QzY2LjU1MjMgNTUuOTMwMSA2Ny4zMjk2IDU3LjgwNjMgNjcuMzI5NiA1OS43NjI2VjY3LjMzSDI0LjI2MjJDMjEuNTQwNSA2Ny4zMyAxOC45MzAzIDY2LjI0ODggMTcuMDA1NyA2NC4zMjQzQzE1LjA4MTIgNjIuMzk5NyAxNCA1OS43ODk1IDE0IDU3LjA2NzhWMjQuMjYyNkMxNCAyMS41NDA5IDE1LjA4MTIgMTguOTMwNyAxNy4wMDU3IDE3LjAwNjJaTTQwLjE0NzkgMzMuNTQyM0g2MC45MTU3QzY0LjQ1OCAzMy41NDIzIDY3LjMyOTUgMzYuNDEzOCA2Ny4zMjk1IDM5Ljk1NjFWNDEuNjgxNkM2Ny4zMjk1IDQ1LjIyMzggNjQuNDU4IDQ4LjA5NTQgNjAuOTE1NyA0OC4wOTU0SDQwLjE0NzlDMzYuNjA1NyA0OC4wOTU0IDMzLjczNDEgNDUuMjIzOCAzMy43MzQxIDQxLjY4MTZWMzkuOTU2MUMzMy43MzQxIDM2LjQxMzggMzYuNjA1NyAzMy41NDIzIDQwLjE0NzkgMzMuNTQyM1oiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8yODdfMjM1OSkiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8yODdfMjM1OSIgeDE9IjE5LjM2MDIiIHkxPSIxNCIgeDI9IjU2Ljc2OTYiIHkyPSI2OS44MDA1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNDNTQ5RkYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjNjU0QkZGIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg=="
681
+ }
682
+ };
257
683
 
258
684
  // src/api/polkadot/wallets.ts
259
685
  import { isEqual } from "lodash";
@@ -262,183 +688,118 @@ import {
262
688
  getInjectedExtensions
263
689
  } from "polkadot-api/pjs-signer";
264
690
  import {
265
- BehaviorSubject as BehaviorSubject3,
266
- combineLatest as combineLatest3,
267
- distinctUntilChanged,
268
- map as map4,
691
+ BehaviorSubject as BehaviorSubject4,
692
+ Observable as Observable6,
693
+ combineLatest as combineLatest6,
694
+ distinctUntilChanged as distinctUntilChanged4,
695
+ map as map7,
269
696
  mergeMap,
270
- Observable as Observable3,
271
- of as of2,
272
- shareReplay as shareReplay3,
697
+ of as of5,
698
+ shareReplay as shareReplay6,
273
699
  timer
274
700
  } from "rxjs";
275
701
  var getInjectedWalletsIds = () => getInjectedExtensions().map((name) => getWalletId("polkadot", name));
276
- var polkadotInjectedWallets$ = new Observable3(
277
- (subscriber) => {
278
- const enabledExtensions$ = new BehaviorSubject3(/* @__PURE__ */ new Map());
279
- const connect = async (walletId) => {
280
- if (enabledExtensions$.value.has(walletId))
281
- throw new Error(`Extension ${walletId} already connected`);
282
- const { identifier } = parseWalletId(walletId);
283
- const extension = await connectInjectedExtension(identifier);
284
- const newMap = new Map(enabledExtensions$.value);
285
- newMap.set(walletId, extension);
286
- enabledExtensions$.next(newMap);
287
- store.addEnabledWalletId(walletId);
288
- };
289
- const disconnect = (walletId) => {
290
- if (!enabledExtensions$.value.has(walletId))
291
- throw new Error(`Extension ${walletId} is not connected`);
292
- const newMap = new Map(enabledExtensions$.value);
293
- newMap.delete(walletId);
294
- enabledExtensions$.next(newMap);
295
- store.removeEnabledWalletId(walletId);
296
- };
297
- const walletIds$ = of2(0, 200, 500, 1e3).pipe(
298
- mergeMap((time) => timer(time)),
299
- map4(() => getInjectedWalletsIds()),
300
- distinctUntilChanged(isEqual)
301
- );
302
- const subscription = combineLatest3([walletIds$, enabledExtensions$]).pipe(
303
- map4(([walletIds, enabledExtensions]) => {
304
- return walletIds.map((id) => {
305
- const { identifier } = parseWalletId(id);
306
- const extension = enabledExtensions.get(id);
307
- return extension ? {
308
- id,
309
- platform: "polkadot",
310
- name: identifier,
311
- extensionId: identifier,
312
- isEnabled: true,
313
- extension,
314
- disconnect: () => disconnect(id)
315
- } : {
316
- id,
317
- platform: "polkadot",
318
- name: identifier,
319
- extensionId: identifier,
320
- isEnabled: false,
321
- connect: () => connect(id)
322
- };
323
- });
324
- })
702
+ var polkadotInjectedWallets$ = new Observable6((subscriber) => {
703
+ const enabledExtensions$ = new BehaviorSubject4(/* @__PURE__ */ new Map());
704
+ const connect = async (walletId) => {
705
+ if (enabledExtensions$.value.has(walletId))
706
+ throw new Error(`Extension ${walletId} already connected`);
707
+ const { identifier } = parseWalletId(walletId);
708
+ const extension = await connectInjectedExtension(identifier);
709
+ const newMap = new Map(enabledExtensions$.value);
710
+ newMap.set(walletId, extension);
711
+ enabledExtensions$.next(newMap);
712
+ store.addEnabledWalletId(walletId);
713
+ };
714
+ const disconnect = (walletId) => {
715
+ if (!enabledExtensions$.value.has(walletId))
716
+ throw new Error(`Extension ${walletId} is not connected`);
717
+ const newMap = new Map(enabledExtensions$.value);
718
+ newMap.delete(walletId);
719
+ enabledExtensions$.next(newMap);
720
+ store.removeEnabledWalletId(walletId);
721
+ };
722
+ const walletIds$ = of5(0, 200, 500, 1e3).pipe(
723
+ mergeMap((time) => timer(time)),
724
+ map7(() => getInjectedWalletsIds()),
725
+ distinctUntilChanged4(isEqual)
726
+ );
727
+ const subscription = combineLatest6([walletIds$, enabledExtensions$]).pipe(
728
+ map7(([walletIds, enabledExtensions]) => {
729
+ return walletIds.map((id) => {
730
+ const { identifier } = parseWalletId(id);
731
+ const extension = enabledExtensions.get(id);
732
+ const extInfo = POLKADOT_EXTENSIONS[identifier];
733
+ return {
734
+ id,
735
+ type: "injected",
736
+ platform: "polkadot",
737
+ name: extInfo?.name ?? identifier,
738
+ icon: extInfo?.icon ?? "",
739
+ extensionId: identifier,
740
+ extension,
741
+ isConnected: !!extension,
742
+ connect: () => connect(id),
743
+ disconnect: () => disconnect(id)
744
+ };
745
+ });
746
+ })
747
+ ).subscribe(subscriber);
748
+ return () => {
749
+ subscription.unsubscribe();
750
+ };
751
+ }).pipe(
752
+ // logObservable("polkadotInjectedWallets$"),
753
+ shareReplay6({ refCount: true, bufferSize: 1 })
754
+ );
755
+ var getPolkadotWallets$ = (config) => {
756
+ return new Observable6((subscriber) => {
757
+ const subscription = combineLatest6([
758
+ polkadotInjectedWallets$,
759
+ getAppKitWallets$(config)?.pipe(map7((w) => w.polkadot))
760
+ ]).pipe(
761
+ map7(
762
+ ([injectedWallets, appKitWallet]) => appKitWallet ? [...injectedWallets, appKitWallet] : injectedWallets
763
+ )
325
764
  ).subscribe(subscriber);
326
765
  return () => {
327
766
  subscription.unsubscribe();
328
767
  };
329
- }
330
- ).pipe(shareReplay3({ refCount: true, bufferSize: 1 }));
331
- var polkadotWallets$ = polkadotInjectedWallets$;
332
- polkadotWallets$.subscribe(() => {
333
- console.count("[kheopskit] polkadotWallets$ emit");
334
- });
335
-
336
- // src/api/polkadot/accounts.ts
337
- var getWalletAccounts$2 = (wallet) => {
338
- if (!wallet.isEnabled) return of3([]);
339
- return new Observable4((subscriber) => {
340
- const getAccount = (account) => ({
341
- id: getAccountId(wallet.id, account.address),
342
- ...account,
343
- platform: "polkadot",
344
- walletName: wallet.name,
345
- walletId: wallet.id
346
- });
347
- const unsubscribe = wallet.extension.subscribe((accounts) => {
348
- subscriber.next(accounts.map(getAccount));
349
- });
350
- subscriber.next(wallet.extension.getAccounts().map(getAccount));
351
- return () => {
352
- return unsubscribe();
353
- };
354
- });
355
- };
356
- var polkadotAccounts$ = new Observable4(
357
- (subscriber) => {
358
- const sub = polkadotWallets$.pipe(
359
- map5((wallets) => wallets.filter((w) => w.isEnabled)),
360
- switchMap2(
361
- (wallets) => wallets.length ? combineLatest4(wallets.map(getWalletAccounts$2)) : of3([])
362
- ),
363
- map5((accounts) => accounts.flat())
364
- ).subscribe(subscriber);
365
- return () => {
366
- sub.unsubscribe();
367
- };
368
- }
369
- ).pipe(shareReplay4({ refCount: true, bufferSize: 1 }));
370
- polkadotAccounts$.subscribe(() => {
371
- console.count("[kheopskit] polkadotAccounts$ emit");
372
- });
373
-
374
- // src/api/accounts.ts
375
- var getAccounts$ = (config) => {
376
- return new Observable5((subscriber) => {
377
- const observables = config.platforms.map(
378
- (platform) => {
379
- switch (platform) {
380
- case "polkadot":
381
- return polkadotAccounts$;
382
- case "ethereum":
383
- return ethereumAccounts$;
384
- }
385
- }
386
- );
387
- const accounts$ = observables.length ? combineLatest5(observables).pipe(map6((accounts) => accounts.flat())) : of4([]);
388
- const sub = accounts$.subscribe(subscriber);
389
- return () => {
390
- sub.unsubscribe();
391
- };
392
- }).pipe(shareReplay5({ refCount: true, bufferSize: 1 }));
393
- };
394
-
395
- // src/api/config.ts
396
- var DEFAULT_CONFIG = {
397
- autoReconnect: true,
398
- platforms: ["polkadot"]
399
- };
400
- var resolveConfig = (config) => {
401
- return Object.assign({}, DEFAULT_CONFIG, config);
768
+ }).pipe(
769
+ // logObservable("getPolkadotWallets$"),
770
+ shareReplay6({ refCount: true, bufferSize: 1 })
771
+ );
402
772
  };
403
773
 
404
774
  // src/api/wallets.ts
405
- import {
406
- combineLatest as combineLatest6,
407
- distinct,
408
- filter as filter2,
409
- map as map7,
410
- mergeMap as mergeMap2,
411
- Observable as Observable6,
412
- of as of5,
413
- shareReplay as shareReplay6,
414
- take
415
- } from "rxjs";
416
775
  var autoReconnectWalletIds$ = store.observable.pipe(
417
- map7((s) => s.autoReconnect ?? []),
776
+ map8((s) => s.autoReconnect ?? []),
418
777
  take(1),
419
- shareReplay6(1)
778
+ shareReplay7(1)
420
779
  );
421
780
  var getWallets$ = (config) => {
422
- return new Observable6((subscriber) => {
781
+ return new Observable7((subscriber) => {
423
782
  const observables = config.platforms.map(
424
783
  (platform) => {
425
784
  switch (platform) {
426
785
  case "polkadot":
427
- return polkadotWallets$;
786
+ return getPolkadotWallets$(config);
428
787
  case "ethereum":
429
- return ethereumWallets$;
788
+ return getEthereumWallets$(config);
430
789
  }
431
790
  }
432
791
  );
433
- const wallets$ = observables.length ? combineLatest6(observables).pipe(map7((wallets) => wallets.flat())) : of5([]);
434
- const subAutoReconnect = combineLatest6([wallets$, autoReconnectWalletIds$]).pipe(
792
+ const wallets$ = observables.length ? combineLatest7(observables).pipe(
793
+ map8((wallets) => wallets.flat().sort(sortWallets))
794
+ ) : of6([]);
795
+ const subAutoReconnect = combineLatest7([wallets$, autoReconnectWalletIds$]).pipe(
435
796
  filter2(([, walletIds]) => config.autoReconnect && !!walletIds?.length),
436
797
  mergeMap2(
437
798
  ([wallets, walletIds]) => wallets.filter((wallet) => walletIds?.includes(wallet.id))
438
799
  ),
439
800
  distinct((w) => w.id)
440
801
  ).subscribe(async (wallet) => {
441
- if (wallet.isEnabled) {
802
+ if (wallet.isConnected) {
442
803
  console.warn("Wallet %s already connected", wallet.id);
443
804
  return;
444
805
  }
@@ -453,22 +814,30 @@ var getWallets$ = (config) => {
453
814
  subAutoReconnect.unsubscribe();
454
815
  subWallets.unsubscribe();
455
816
  };
456
- }).pipe(shareReplay6({ refCount: true, bufferSize: 1 }));
817
+ }).pipe(shareReplay7({ refCount: true, bufferSize: 1 }));
457
818
  };
458
819
 
459
820
  // src/api/kheopskit.ts
460
821
  var getKheopskit$ = (config) => {
461
- const c = resolveConfig(config);
462
- return new Observable7(
463
- (subscriber) => {
464
- const subscription = combineLatest7([getWallets$(c), getAccounts$(c)]).pipe(map8(([wallets, accounts]) => ({ wallets, accounts }))).subscribe(subscriber);
465
- return () => {
466
- subscription.unsubscribe();
467
- };
468
- }
469
- ).pipe(shareReplay7({ bufferSize: 1, refCount: true }));
822
+ const kc = resolveConfig(config);
823
+ console.debug("[kheopskit] config", kc);
824
+ return new Observable8((subscriber) => {
825
+ const wallets$ = getWallets$(kc);
826
+ const subscription = combineLatest8({
827
+ wallets: wallets$,
828
+ accounts: getAccounts$(kc, wallets$)
829
+ }).pipe(map9(({ wallets, accounts }) => ({ config: kc, wallets, accounts }))).subscribe(subscriber);
830
+ return () => {
831
+ subscription.unsubscribe();
832
+ };
833
+ }).pipe(
834
+ throttleTime(50, void 0, { leading: true, trailing: true }),
835
+ logObservable("kheopskit$", { enabled: kc.debug, printValue: true }),
836
+ shareReplay8({ bufferSize: 1, refCount: true })
837
+ );
470
838
  };
471
839
  export {
472
- getKheopskit$
840
+ getKheopskit$,
841
+ resolveConfig
473
842
  };
474
843
  //# sourceMappingURL=index.mjs.map