@kheopskit/core 5.0.1 → 5.1.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/errors-Caq2csKx.mjs +181 -0
- package/dist/errors-Caq2csKx.mjs.map +1 -0
- package/dist/errors-DPw6pc2H.js +222 -0
- package/dist/errors-DPw6pc2H.js.map +1 -0
- package/dist/ethereum.d.mts +39 -38
- package/dist/ethereum.d.ts +39 -38
- package/dist/ethereum.js +216 -343
- package/dist/ethereum.js.map +1 -1
- package/dist/ethereum.mjs +213 -344
- package/dist/ethereum.mjs.map +1 -1
- package/dist/{getCachedObservable-C4E8dfMp.d.ts → getCachedObservable-LUq9IfEx.d.mts} +5 -2
- package/dist/{getCachedObservable-C4E8dfMp.d.mts → getCachedObservable-LUq9IfEx.d.ts} +5 -2
- package/dist/iconCache-BSa42Sui.mjs +343 -0
- package/dist/iconCache-BSa42Sui.mjs.map +1 -0
- package/dist/iconCache-DS4zNiP1.js +396 -0
- package/dist/iconCache-DS4zNiP1.js.map +1 -0
- package/dist/index.d.mts +98 -36
- package/dist/index.d.ts +98 -36
- package/dist/index.js +897 -630
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +881 -631
- package/dist/index.mjs.map +1 -1
- package/dist/injectedWallets-B1MCxAE9.js +148 -0
- package/dist/injectedWallets-B1MCxAE9.js.map +1 -0
- package/dist/injectedWallets-B3Vysfvr.mjs +119 -0
- package/dist/injectedWallets-B3Vysfvr.mjs.map +1 -0
- package/dist/internal.d.mts +18 -53
- package/dist/internal.d.ts +18 -53
- package/dist/internal.js +9 -32
- package/dist/internal.mjs +3 -32
- package/dist/polkadot.d.mts +37 -36
- package/dist/polkadot.d.ts +37 -36
- package/dist/polkadot.js +179 -294
- package/dist/polkadot.js.map +1 -1
- package/dist/polkadot.mjs +176 -295
- package/dist/polkadot.mjs.map +1 -1
- package/dist/polkadotExtensions-BoVKhNU_.mjs +23 -0
- package/dist/polkadotExtensions-BoVKhNU_.mjs.map +1 -0
- package/dist/polkadotExtensions-y4J9UzYl.js +28 -0
- package/dist/polkadotExtensions-y4J9UzYl.js.map +1 -0
- package/dist/solana.d.mts +50 -48
- package/dist/solana.d.ts +50 -48
- package/dist/solana.js +323 -449
- package/dist/solana.js.map +1 -1
- package/dist/solana.mjs +316 -449
- package/dist/solana.mjs.map +1 -1
- package/dist/types-Cb-vuEru.d.mts +330 -0
- package/dist/types-Cb-vuEru.d.ts +330 -0
- package/dist/types-DKU-SNio.js +169 -0
- package/dist/types-DKU-SNio.js.map +1 -0
- package/dist/types-jnifAAA0.mjs +104 -0
- package/dist/types-jnifAAA0.mjs.map +1 -0
- package/package.json +12 -12
- package/dist/chunk-4ENHC7G4.js +0 -210
- package/dist/chunk-4ENHC7G4.js.map +0 -1
- package/dist/chunk-6XAZANB5.mjs +0 -450
- package/dist/chunk-6XAZANB5.mjs.map +0 -1
- package/dist/chunk-7QSGAJ4A.mjs +0 -210
- package/dist/chunk-7QSGAJ4A.mjs.map +0 -1
- package/dist/chunk-B4L6GAYD.js +0 -179
- package/dist/chunk-B4L6GAYD.js.map +0 -1
- package/dist/chunk-BWUUHUDK.mjs +0 -24
- package/dist/chunk-BWUUHUDK.mjs.map +0 -1
- package/dist/chunk-D3EQMFZ2.js +0 -24
- package/dist/chunk-D3EQMFZ2.js.map +0 -1
- package/dist/chunk-XQWJM3KC.js +0 -450
- package/dist/chunk-XQWJM3KC.js.map +0 -1
- package/dist/chunk-YDLCHYHH.mjs +0 -179
- package/dist/chunk-YDLCHYHH.mjs.map +0 -1
- package/dist/internal.js.map +0 -1
- package/dist/internal.mjs.map +0 -1
- package/dist/types-C7V7DGlg.d.mts +0 -349
- package/dist/types-C7V7DGlg.d.ts +0 -349
package/dist/ethereum.mjs
CHANGED
|
@@ -1,351 +1,220 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
} from "
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
map,
|
|
20
|
-
Observable,
|
|
21
|
-
of,
|
|
22
|
-
ReplaySubject,
|
|
23
|
-
shareReplay,
|
|
24
|
-
switchMap
|
|
25
|
-
} from "rxjs";
|
|
26
|
-
import {
|
|
27
|
-
createWalletClient,
|
|
28
|
-
custom,
|
|
29
|
-
getAddress
|
|
30
|
-
} from "viem";
|
|
31
|
-
var normalizeEvmChainId = (value) => {
|
|
32
|
-
let raw = value;
|
|
33
|
-
if (typeof raw === "string" && raw.startsWith("eip155:")) {
|
|
34
|
-
raw = raw.slice("eip155:".length);
|
|
35
|
-
}
|
|
36
|
-
if (typeof raw === "bigint") {
|
|
37
|
-
return raw >= 0n ? Number(raw) : void 0;
|
|
38
|
-
}
|
|
39
|
-
if (typeof raw === "number") {
|
|
40
|
-
return Number.isInteger(raw) && raw >= 0 ? raw : void 0;
|
|
41
|
-
}
|
|
42
|
-
if (typeof raw === "string") {
|
|
43
|
-
const normalized = raw.trim().toLowerCase();
|
|
44
|
-
if (!normalized) return void 0;
|
|
45
|
-
const parsed = normalized.startsWith("0x") ? Number.parseInt(normalized, 16) : Number.parseInt(normalized, 10);
|
|
46
|
-
return Number.isNaN(parsed) ? void 0 : parsed;
|
|
47
|
-
}
|
|
48
|
-
return void 0;
|
|
49
|
-
};
|
|
50
|
-
var toCaipNetworkId = (value) => {
|
|
51
|
-
const chainId = normalizeEvmChainId(value);
|
|
52
|
-
return chainId === void 0 ? void 0 : `eip155:${chainId}`;
|
|
1
|
+
import { d as getCachedObservable$, i as getWalletId, l as clearCachedObservable, n as isWalletConnectWallet, t as isInjectedWallet } from "./types-jnifAAA0.mjs";
|
|
2
|
+
import { n as getWalletAccountId, s as isEthereumAddress } from "./errors-Caq2csKx.mjs";
|
|
3
|
+
import { i as getSessionCaip10s, n as createPlatformAccounts$, r as getCaip10Addresses, t as createInjectedWallets$ } from "./injectedWallets-B3Vysfvr.mjs";
|
|
4
|
+
import { Observable, ReplaySubject, combineLatest, distinctUntilChanged, map, of, shareReplay } from "rxjs";
|
|
5
|
+
import { createWalletClient, custom, getAddress } from "viem";
|
|
6
|
+
import { createStore } from "mipd";
|
|
7
|
+
//#region src/api/ethereum/accounts.ts
|
|
8
|
+
const normalizeEvmChainId = (value) => {
|
|
9
|
+
let raw = value;
|
|
10
|
+
if (typeof raw === "string" && raw.startsWith("eip155:")) raw = raw.slice(7);
|
|
11
|
+
if (typeof raw === "bigint") return raw >= 0n ? Number(raw) : void 0;
|
|
12
|
+
if (typeof raw === "number") return Number.isInteger(raw) && raw >= 0 ? raw : void 0;
|
|
13
|
+
if (typeof raw === "string") {
|
|
14
|
+
const normalized = raw.trim().toLowerCase();
|
|
15
|
+
if (!normalized) return void 0;
|
|
16
|
+
const parsed = normalized.startsWith("0x") ? Number.parseInt(normalized, 16) : Number.parseInt(normalized, 10);
|
|
17
|
+
return Number.isNaN(parsed) ? void 0 : parsed;
|
|
18
|
+
}
|
|
53
19
|
};
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
`accounts:${wallet.id}`,
|
|
58
|
-
() => new Observable((subscriber) => {
|
|
59
|
-
const addresses$ = new ReplaySubject(1);
|
|
60
|
-
const chainId$ = new ReplaySubject(1);
|
|
61
|
-
const getAccount = (address, chainId) => {
|
|
62
|
-
const client = createWalletClient({
|
|
63
|
-
account: address,
|
|
64
|
-
transport: custom(wallet.provider)
|
|
65
|
-
});
|
|
66
|
-
return {
|
|
67
|
-
id: getWalletAccountId(wallet.id, address),
|
|
68
|
-
platform: "ethereum",
|
|
69
|
-
client,
|
|
70
|
-
address: getAddress(address),
|
|
71
|
-
chainId,
|
|
72
|
-
walletName: wallet.name,
|
|
73
|
-
walletId: wallet.id
|
|
74
|
-
};
|
|
75
|
-
};
|
|
76
|
-
const handleAccountsChanged = (addrs) => {
|
|
77
|
-
addresses$.next(addrs);
|
|
78
|
-
};
|
|
79
|
-
const handleChainChanged = (chainIdHex) => {
|
|
80
|
-
chainId$.next(normalizeEvmChainId(chainIdHex));
|
|
81
|
-
};
|
|
82
|
-
const handleDisconnect = () => {
|
|
83
|
-
chainId$.next(void 0);
|
|
84
|
-
};
|
|
85
|
-
wallet.provider.on("accountsChanged", handleAccountsChanged);
|
|
86
|
-
wallet.provider.on("chainChanged", handleChainChanged);
|
|
87
|
-
wallet.provider.on("disconnect", handleDisconnect);
|
|
88
|
-
wallet.provider.request({ method: "eth_accounts" }).then((addrs) => addresses$.next(addrs)).catch((err) => {
|
|
89
|
-
console.error("Failed to get accounts", err);
|
|
90
|
-
addresses$.next([]);
|
|
91
|
-
});
|
|
92
|
-
wallet.provider.request({ method: "eth_chainId" }).then(handleChainChanged).catch(() => chainId$.next(void 0));
|
|
93
|
-
const sub = combineLatest([addresses$, chainId$]).pipe(
|
|
94
|
-
map(
|
|
95
|
-
([addresses, chainId]) => addresses.map((addr) => getAccount(addr, chainId))
|
|
96
|
-
)
|
|
97
|
-
).subscribe(subscriber);
|
|
98
|
-
return () => {
|
|
99
|
-
wallet.provider.removeListener(
|
|
100
|
-
"accountsChanged",
|
|
101
|
-
handleAccountsChanged
|
|
102
|
-
);
|
|
103
|
-
wallet.provider.removeListener("chainChanged", handleChainChanged);
|
|
104
|
-
wallet.provider.removeListener("disconnect", handleDisconnect);
|
|
105
|
-
sub.unsubscribe();
|
|
106
|
-
};
|
|
107
|
-
}).pipe(shareReplay({ refCount: true, bufferSize: 1 }))
|
|
108
|
-
);
|
|
20
|
+
const toCaipNetworkId = (value) => {
|
|
21
|
+
const chainId = normalizeEvmChainId(value);
|
|
22
|
+
return chainId === void 0 ? void 0 : `eip155:${chainId}`;
|
|
109
23
|
};
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
24
|
+
const getInjectedWalletAccounts$ = (wallet) => {
|
|
25
|
+
if (!wallet.isConnected) return of([]);
|
|
26
|
+
return getCachedObservable$(`accounts:${wallet.id}`, () => new Observable((subscriber) => {
|
|
27
|
+
const addresses$ = new ReplaySubject(1);
|
|
28
|
+
const chainId$ = new ReplaySubject(1);
|
|
29
|
+
const getAccount = (address, chainId) => {
|
|
30
|
+
const client = createWalletClient({
|
|
31
|
+
account: address,
|
|
32
|
+
transport: custom(wallet.provider)
|
|
33
|
+
});
|
|
34
|
+
return {
|
|
35
|
+
id: getWalletAccountId(wallet.id, address),
|
|
36
|
+
platform: "ethereum",
|
|
37
|
+
client,
|
|
38
|
+
address: getAddress(address),
|
|
39
|
+
chainId,
|
|
40
|
+
walletName: wallet.name,
|
|
41
|
+
walletId: wallet.id
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
const handleAccountsChanged = (addrs) => {
|
|
45
|
+
addresses$.next(addrs);
|
|
46
|
+
};
|
|
47
|
+
const handleChainChanged = (chainIdHex) => {
|
|
48
|
+
chainId$.next(normalizeEvmChainId(chainIdHex));
|
|
49
|
+
};
|
|
50
|
+
const handleDisconnect = () => {
|
|
51
|
+
chainId$.next(void 0);
|
|
52
|
+
};
|
|
53
|
+
wallet.provider.on("accountsChanged", handleAccountsChanged);
|
|
54
|
+
wallet.provider.on("chainChanged", handleChainChanged);
|
|
55
|
+
wallet.provider.on("disconnect", handleDisconnect);
|
|
56
|
+
wallet.provider.request({ method: "eth_accounts" }).then((addrs) => addresses$.next(addrs)).catch((err) => {
|
|
57
|
+
console.error("Failed to get accounts", err);
|
|
58
|
+
addresses$.next([]);
|
|
59
|
+
});
|
|
60
|
+
wallet.provider.request({ method: "eth_chainId" }).then(handleChainChanged).catch(() => chainId$.next(void 0));
|
|
61
|
+
const sub = combineLatest([addresses$, chainId$]).pipe(map(([addresses, chainId]) => addresses.map((addr) => getAccount(addr, chainId)))).subscribe(subscriber);
|
|
62
|
+
return () => {
|
|
63
|
+
wallet.provider.removeListener("accountsChanged", handleAccountsChanged);
|
|
64
|
+
wallet.provider.removeListener("chainChanged", handleChainChanged);
|
|
65
|
+
wallet.provider.removeListener("disconnect", handleDisconnect);
|
|
66
|
+
sub.unsubscribe();
|
|
67
|
+
};
|
|
68
|
+
}).pipe(shareReplay({
|
|
69
|
+
refCount: true,
|
|
70
|
+
bufferSize: 1
|
|
71
|
+
})));
|
|
125
72
|
};
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
const session = provider.session;
|
|
138
|
-
if (!session) return [];
|
|
139
|
-
const addresses = /* @__PURE__ */ new Set();
|
|
140
|
-
for (const namespace of Object.values(session.namespaces)) {
|
|
141
|
-
for (const account of namespace.accounts ?? []) {
|
|
142
|
-
if (!account.startsWith("eip155:")) continue;
|
|
143
|
-
const raw = account.split(":")[2];
|
|
144
|
-
if (!raw) continue;
|
|
145
|
-
try {
|
|
146
|
-
addresses.add(getAddress(raw));
|
|
147
|
-
} catch {
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
return [...addresses];
|
|
152
|
-
};
|
|
153
|
-
const readCaipNetworkId = () => {
|
|
154
|
-
const session = provider.session;
|
|
155
|
-
if (!session) return void 0;
|
|
156
|
-
for (const namespace of Object.values(session.namespaces)) {
|
|
157
|
-
for (const account of namespace.accounts ?? []) {
|
|
158
|
-
if (!account.startsWith("eip155:")) continue;
|
|
159
|
-
const ref = account.split(":")[1];
|
|
160
|
-
if (ref) return `eip155:${ref}`;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
return void 0;
|
|
164
|
-
};
|
|
165
|
-
const handleChainChanged = (chainId) => {
|
|
166
|
-
const caipNetworkId = toCaipNetworkId(chainId);
|
|
167
|
-
if (caipNetworkId) {
|
|
168
|
-
caipNetworkId$.next(caipNetworkId);
|
|
169
|
-
}
|
|
170
|
-
};
|
|
171
|
-
const handleAccountsChanged = () => addresses$.next(readAddresses());
|
|
172
|
-
provider.on("chainChanged", handleChainChanged);
|
|
173
|
-
provider.on("accountsChanged", handleAccountsChanged);
|
|
174
|
-
provider.on("session_update", handleAccountsChanged);
|
|
175
|
-
caipNetworkId$.next(readCaipNetworkId());
|
|
176
|
-
provider.request({ method: "eth_chainId" }).then(handleChainChanged).catch(() => {
|
|
177
|
-
});
|
|
178
|
-
addresses$.next(readAddresses());
|
|
179
|
-
const sub = combineLatest([
|
|
180
|
-
caipNetworkId$.pipe(distinctUntilChanged()),
|
|
181
|
-
addresses$.pipe(distinctUntilChanged(sameAddresses))
|
|
182
|
-
]).pipe(
|
|
183
|
-
map(([caipNetworkId, addresses]) => {
|
|
184
|
-
const chainId = normalizeEvmChainId(caipNetworkId);
|
|
185
|
-
const transport = custom(
|
|
186
|
-
wrapWalletConnectProvider(
|
|
187
|
-
provider,
|
|
188
|
-
// biome-ignore lint/style/noNonNullAssertion: legacy
|
|
189
|
-
provider.session.topic,
|
|
190
|
-
caipNetworkId
|
|
191
|
-
)
|
|
192
|
-
);
|
|
193
|
-
return addresses.map((addr) => {
|
|
194
|
-
const client = createWalletClient({
|
|
195
|
-
account: addr,
|
|
196
|
-
transport
|
|
197
|
-
});
|
|
198
|
-
return {
|
|
199
|
-
id: getWalletAccountId(wallet.id, addr),
|
|
200
|
-
platform: "ethereum",
|
|
201
|
-
walletName: wallet.name,
|
|
202
|
-
walletId: wallet.id,
|
|
203
|
-
address: addr,
|
|
204
|
-
client,
|
|
205
|
-
chainId
|
|
206
|
-
};
|
|
207
|
-
});
|
|
208
|
-
})
|
|
209
|
-
).subscribe(subscriber);
|
|
210
|
-
return () => {
|
|
211
|
-
provider.off("chainChanged", handleChainChanged);
|
|
212
|
-
provider.off("accountsChanged", handleAccountsChanged);
|
|
213
|
-
provider.off("session_update", handleAccountsChanged);
|
|
214
|
-
sub.unsubscribe();
|
|
215
|
-
};
|
|
216
|
-
}).pipe(shareReplay({ refCount: true, bufferSize: 1 }))
|
|
217
|
-
);
|
|
73
|
+
const wrapWalletConnectProvider = (provider, sessionTopic, caipNetworkId) => {
|
|
74
|
+
return new Proxy(provider, { get(target, prop, receiver) {
|
|
75
|
+
if (prop !== "request") return Reflect.get(target, prop, receiver);
|
|
76
|
+
return (args) => {
|
|
77
|
+
if (!args || typeof args !== "object" || !args.method) return target.request(args);
|
|
78
|
+
const next = { ...args };
|
|
79
|
+
if (next.topic === void 0) next.topic = sessionTopic;
|
|
80
|
+
if (next.chainId === void 0 && caipNetworkId !== void 0) next.chainId = caipNetworkId;
|
|
81
|
+
return target.request(next, caipNetworkId);
|
|
82
|
+
};
|
|
83
|
+
} });
|
|
218
84
|
};
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
);
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
85
|
+
const sameAddresses = (a, b) => a.length === b.length && a.every((addr, i) => addr === b[i]);
|
|
86
|
+
const getWalletConnectAccounts$ = (wallet) => {
|
|
87
|
+
const provider = wallet.appKit.getProvider("eip155");
|
|
88
|
+
if (!wallet.platforms.includes("ethereum") || !provider?.session) return of([]);
|
|
89
|
+
return getCachedObservable$(`accounts:${wallet.id}:ethereum:`, () => new Observable((subscriber) => {
|
|
90
|
+
const caipNetworkId$ = new ReplaySubject(1);
|
|
91
|
+
const addresses$ = new ReplaySubject(1);
|
|
92
|
+
const readAddresses = () => {
|
|
93
|
+
const session = provider.session;
|
|
94
|
+
if (!session) return [];
|
|
95
|
+
const addresses = /* @__PURE__ */ new Set();
|
|
96
|
+
for (const raw of getCaip10Addresses(getSessionCaip10s(session, "eip155"))) try {
|
|
97
|
+
addresses.add(getAddress(raw));
|
|
98
|
+
} catch {}
|
|
99
|
+
return [...addresses];
|
|
100
|
+
};
|
|
101
|
+
const readCaipNetworkId = () => {
|
|
102
|
+
const session = provider.session;
|
|
103
|
+
if (!session) return void 0;
|
|
104
|
+
for (const account of getSessionCaip10s(session, "eip155")) {
|
|
105
|
+
const ref = account.split(":")[1];
|
|
106
|
+
if (ref) return `eip155:${ref}`;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
const handleChainChanged = (chainId) => {
|
|
110
|
+
const caipNetworkId = toCaipNetworkId(chainId);
|
|
111
|
+
if (caipNetworkId) caipNetworkId$.next(caipNetworkId);
|
|
112
|
+
};
|
|
113
|
+
const handleAccountsChanged = () => addresses$.next(readAddresses());
|
|
114
|
+
provider.on("chainChanged", handleChainChanged);
|
|
115
|
+
provider.on("accountsChanged", handleAccountsChanged);
|
|
116
|
+
provider.on("session_update", handleAccountsChanged);
|
|
117
|
+
caipNetworkId$.next(readCaipNetworkId());
|
|
118
|
+
provider.request({ method: "eth_chainId" }).then(handleChainChanged).catch(() => {});
|
|
119
|
+
addresses$.next(readAddresses());
|
|
120
|
+
const sub = combineLatest([caipNetworkId$.pipe(distinctUntilChanged()), addresses$.pipe(distinctUntilChanged(sameAddresses))]).pipe(map(([caipNetworkId, addresses]) => {
|
|
121
|
+
const chainId = normalizeEvmChainId(caipNetworkId);
|
|
122
|
+
const transport = custom(wrapWalletConnectProvider(provider, provider.session.topic, caipNetworkId));
|
|
123
|
+
return addresses.map((addr) => {
|
|
124
|
+
const client = createWalletClient({
|
|
125
|
+
account: addr,
|
|
126
|
+
transport
|
|
127
|
+
});
|
|
128
|
+
return {
|
|
129
|
+
id: getWalletAccountId(wallet.id, addr),
|
|
130
|
+
platform: "ethereum",
|
|
131
|
+
walletName: wallet.name,
|
|
132
|
+
walletId: wallet.id,
|
|
133
|
+
address: addr,
|
|
134
|
+
client,
|
|
135
|
+
chainId
|
|
136
|
+
};
|
|
137
|
+
});
|
|
138
|
+
})).subscribe(subscriber);
|
|
139
|
+
return () => {
|
|
140
|
+
provider.off("chainChanged", handleChainChanged);
|
|
141
|
+
provider.off("accountsChanged", handleAccountsChanged);
|
|
142
|
+
provider.off("session_update", handleAccountsChanged);
|
|
143
|
+
sub.unsubscribe();
|
|
144
|
+
};
|
|
145
|
+
}).pipe(shareReplay({
|
|
146
|
+
refCount: true,
|
|
147
|
+
bufferSize: 1
|
|
148
|
+
})));
|
|
243
149
|
};
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
}
|
|
249
|
-
import {
|
|
250
|
-
BehaviorSubject,
|
|
251
|
-
combineLatest as combineLatest2,
|
|
252
|
-
distinctUntilChanged as distinctUntilChanged2,
|
|
253
|
-
map as map2,
|
|
254
|
-
Observable as Observable2,
|
|
255
|
-
shareReplay as shareReplay2
|
|
256
|
-
} from "rxjs";
|
|
257
|
-
var providersDetails$ = new Observable2(
|
|
258
|
-
(subscriber) => {
|
|
259
|
-
if (typeof window === "undefined") {
|
|
260
|
-
subscriber.next([]);
|
|
261
|
-
return () => {
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
const mipdStore = createMipdStore();
|
|
265
|
-
const unsubscribe = mipdStore.subscribe((providerDetails2) => {
|
|
266
|
-
subscriber.next(providerDetails2);
|
|
267
|
-
});
|
|
268
|
-
const providerDetails = mipdStore.getProviders();
|
|
269
|
-
subscriber.next(providerDetails);
|
|
270
|
-
return () => {
|
|
271
|
-
unsubscribe();
|
|
272
|
-
mipdStore.destroy();
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
).pipe(shareReplay2({ refCount: true, bufferSize: 1 }));
|
|
276
|
-
var createEthereumInjectedWallets$ = (store2) => new Observable2((subscriber) => {
|
|
277
|
-
const enabledWalletIds$ = new BehaviorSubject(/* @__PURE__ */ new Set());
|
|
278
|
-
const connectWallet = async (walletId, provider) => {
|
|
279
|
-
if (enabledWalletIds$.value.has(walletId))
|
|
280
|
-
throw new KheopskitError(
|
|
281
|
-
"WALLET_ALREADY_CONNECTED",
|
|
282
|
-
`wallet ${walletId} is already connected`,
|
|
283
|
-
{ walletId }
|
|
284
|
-
);
|
|
285
|
-
await provider.request({
|
|
286
|
-
method: "eth_requestAccounts"
|
|
287
|
-
});
|
|
288
|
-
const newSet = new Set(enabledWalletIds$.value);
|
|
289
|
-
newSet.add(walletId);
|
|
290
|
-
enabledWalletIds$.next(newSet);
|
|
291
|
-
store2.addEnabledWalletId(walletId);
|
|
292
|
-
};
|
|
293
|
-
const disconnectWallet = async (walletId) => {
|
|
294
|
-
if (!enabledWalletIds$.value.has(walletId))
|
|
295
|
-
throw new KheopskitError(
|
|
296
|
-
"WALLET_NOT_CONNECTED",
|
|
297
|
-
`wallet ${walletId} is not connected`,
|
|
298
|
-
{ walletId }
|
|
299
|
-
);
|
|
300
|
-
const newSet = new Set(enabledWalletIds$.value);
|
|
301
|
-
newSet.delete(walletId);
|
|
302
|
-
enabledWalletIds$.next(newSet);
|
|
303
|
-
store2.removeEnabledWalletId(walletId);
|
|
304
|
-
clearCachedObservable(`accounts:${walletId}`);
|
|
305
|
-
};
|
|
306
|
-
const sub = combineLatest2([providersDetails$, enabledWalletIds$]).pipe(
|
|
307
|
-
map2(([providerDetails, enabledWalletIds]) => {
|
|
308
|
-
return providerDetails.map((pd) => {
|
|
309
|
-
const walletId = getWalletId("ethereum", pd.info.rdns);
|
|
310
|
-
const provider = pd.provider;
|
|
311
|
-
return {
|
|
312
|
-
platform: "ethereum",
|
|
313
|
-
type: "injected",
|
|
314
|
-
id: walletId,
|
|
315
|
-
name: pd.info.name,
|
|
316
|
-
icon: pd.info.icon,
|
|
317
|
-
provider,
|
|
318
|
-
isConnected: enabledWalletIds.has(walletId),
|
|
319
|
-
sourceId: pd.info.rdns,
|
|
320
|
-
connect: () => connectWallet(walletId, provider),
|
|
321
|
-
disconnect: () => disconnectWallet(walletId)
|
|
322
|
-
};
|
|
323
|
-
});
|
|
324
|
-
}),
|
|
325
|
-
distinctUntilChanged2(walletsEqual)
|
|
326
|
-
).subscribe(subscriber);
|
|
327
|
-
return () => {
|
|
328
|
-
sub.unsubscribe();
|
|
329
|
-
};
|
|
330
|
-
}).pipe(shareReplay2({ refCount: true, bufferSize: 1 }));
|
|
331
|
-
var getEthereumWallets$ = (store2 = store) => createEthereumInjectedWallets$(store2);
|
|
332
|
-
var walletsEqual = (a, b) => {
|
|
333
|
-
if (a.length !== b.length) return false;
|
|
334
|
-
return a.every(
|
|
335
|
-
(w, i) => w.id === b[i]?.id && w.isConnected === b[i]?.isConnected && w.name === b[i]?.name
|
|
336
|
-
);
|
|
337
|
-
};
|
|
338
|
-
|
|
339
|
-
// src/api/ethereum/plugin.ts
|
|
340
|
-
var ethereum = () => ({
|
|
341
|
-
platform: "ethereum",
|
|
342
|
-
getWallets$: (ctx) => getEthereumWallets$(ctx.store),
|
|
343
|
-
getAccounts$: (wallets$) => getEthereumAccounts$(wallets$)
|
|
150
|
+
const getEthereumAccounts$ = (ethereumWallets) => createPlatformAccounts$({
|
|
151
|
+
wallets$: ethereumWallets,
|
|
152
|
+
getInjectedAccounts$: getInjectedWalletAccounts$,
|
|
153
|
+
getWalletConnectAccounts$,
|
|
154
|
+
accountChangeKey: (account) => `${account.id}|${account.chainId ?? ""}`
|
|
344
155
|
});
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
156
|
+
//#endregion
|
|
157
|
+
//#region src/api/ethereum/wallets.ts
|
|
158
|
+
/**
|
|
159
|
+
* Observable that emits EIP-6963 provider details from injected wallets.
|
|
160
|
+
* Returns empty array during SSR since browser wallet APIs are not available.
|
|
161
|
+
*/
|
|
162
|
+
const providersDetails$ = new Observable((subscriber) => {
|
|
163
|
+
if (typeof window === "undefined") {
|
|
164
|
+
subscriber.next([]);
|
|
165
|
+
return () => {};
|
|
166
|
+
}
|
|
167
|
+
const mipdStore = createStore();
|
|
168
|
+
const unsubscribe = mipdStore.subscribe((providerDetails) => {
|
|
169
|
+
subscriber.next(providerDetails);
|
|
170
|
+
});
|
|
171
|
+
const providerDetails = mipdStore.getProviders();
|
|
172
|
+
subscriber.next(providerDetails);
|
|
173
|
+
return () => {
|
|
174
|
+
unsubscribe();
|
|
175
|
+
mipdStore.destroy();
|
|
176
|
+
};
|
|
177
|
+
}).pipe(shareReplay({
|
|
178
|
+
refCount: true,
|
|
179
|
+
bufferSize: 1
|
|
180
|
+
}));
|
|
181
|
+
const getEthereumWallets$ = (store) => createInjectedWallets$(store, {
|
|
182
|
+
sources$: providersDetails$,
|
|
183
|
+
getWalletId: (pd) => getWalletId("ethereum", pd.info.rdns),
|
|
184
|
+
connect: async (pd) => {
|
|
185
|
+
await pd.provider.request({ method: "eth_requestAccounts" });
|
|
186
|
+
},
|
|
187
|
+
onDisconnected: (walletId) => clearCachedObservable(`accounts:${walletId}`),
|
|
188
|
+
buildWallet: ({ source: pd, walletId, isConnected, connect, disconnect }) => ({
|
|
189
|
+
platform: "ethereum",
|
|
190
|
+
type: "injected",
|
|
191
|
+
id: walletId,
|
|
192
|
+
name: pd.info.name,
|
|
193
|
+
icon: pd.info.icon,
|
|
194
|
+
provider: pd.provider,
|
|
195
|
+
isConnected,
|
|
196
|
+
sourceId: pd.info.rdns,
|
|
197
|
+
connect,
|
|
198
|
+
disconnect
|
|
199
|
+
})
|
|
200
|
+
});
|
|
201
|
+
//#endregion
|
|
202
|
+
//#region src/api/ethereum/plugin.ts
|
|
203
|
+
/**
|
|
204
|
+
* Ethereum platform plugin. Pass to `getKheopskit$({ platforms: [ethereum()] })`.
|
|
205
|
+
*
|
|
206
|
+
* @example
|
|
207
|
+
* ```ts
|
|
208
|
+
* import { ethereum } from "@kheopskit/core/ethereum";
|
|
209
|
+
* ethereum();
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
212
|
+
const ethereum = () => ({
|
|
213
|
+
platform: "ethereum",
|
|
214
|
+
getWallets$: (ctx) => getEthereumWallets$(ctx.store),
|
|
215
|
+
getAccounts$: (wallets$) => getEthereumAccounts$(wallets$)
|
|
216
|
+
});
|
|
217
|
+
//#endregion
|
|
218
|
+
export { ethereum, isEthereumAddress, isInjectedWallet, isWalletConnectWallet };
|
|
219
|
+
|
|
351
220
|
//# sourceMappingURL=ethereum.mjs.map
|