@kheopskit/core 5.0.1 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/dist/{chunk-7QSGAJ4A.mjs → chunk-3Y5N4N3Q.mjs} +119 -62
  2. package/dist/chunk-3Y5N4N3Q.mjs.map +1 -0
  3. package/dist/chunk-DF7EKK4G.mjs +106 -0
  4. package/dist/chunk-DF7EKK4G.mjs.map +1 -0
  5. package/dist/chunk-EH73P476.js +106 -0
  6. package/dist/chunk-EH73P476.js.map +1 -0
  7. package/dist/chunk-JVSCMJY5.mjs +147 -0
  8. package/dist/chunk-JVSCMJY5.mjs.map +1 -0
  9. package/dist/chunk-P7BPHHVV.js +76 -0
  10. package/dist/chunk-P7BPHHVV.js.map +1 -0
  11. package/dist/{chunk-4ENHC7G4.js → chunk-SO64R7Z6.js} +114 -57
  12. package/dist/chunk-SO64R7Z6.js.map +1 -0
  13. package/dist/chunk-WOPCW2OX.mjs +76 -0
  14. package/dist/chunk-WOPCW2OX.mjs.map +1 -0
  15. package/dist/chunk-XOGQMEV2.js +147 -0
  16. package/dist/chunk-XOGQMEV2.js.map +1 -0
  17. package/dist/ethereum.d.mts +2 -2
  18. package/dist/ethereum.d.ts +2 -2
  19. package/dist/ethereum.js +55 -115
  20. package/dist/ethereum.js.map +1 -1
  21. package/dist/ethereum.mjs +55 -115
  22. package/dist/ethereum.mjs.map +1 -1
  23. package/dist/index.d.mts +59 -3
  24. package/dist/index.d.ts +59 -3
  25. package/dist/index.js +442 -61
  26. package/dist/index.js.map +1 -1
  27. package/dist/index.mjs +429 -48
  28. package/dist/index.mjs.map +1 -1
  29. package/dist/internal.d.mts +2 -39
  30. package/dist/internal.d.ts +2 -39
  31. package/dist/internal.js +3 -15
  32. package/dist/internal.js.map +1 -1
  33. package/dist/internal.mjs +6 -18
  34. package/dist/polkadot.d.mts +2 -2
  35. package/dist/polkadot.d.ts +2 -2
  36. package/dist/polkadot.js +75 -148
  37. package/dist/polkadot.js.map +1 -1
  38. package/dist/polkadot.mjs +76 -149
  39. package/dist/polkadot.mjs.map +1 -1
  40. package/dist/solana.d.mts +2 -2
  41. package/dist/solana.d.ts +2 -2
  42. package/dist/solana.js +90 -158
  43. package/dist/solana.js.map +1 -1
  44. package/dist/solana.mjs +86 -154
  45. package/dist/solana.mjs.map +1 -1
  46. package/dist/{types-C7V7DGlg.d.ts → types-0iDBydsK.d.mts} +24 -46
  47. package/dist/{types-C7V7DGlg.d.mts → types-0iDBydsK.d.ts} +24 -46
  48. package/package.json +1 -1
  49. package/dist/chunk-4ENHC7G4.js.map +0 -1
  50. package/dist/chunk-6XAZANB5.mjs +0 -450
  51. package/dist/chunk-6XAZANB5.mjs.map +0 -1
  52. package/dist/chunk-7QSGAJ4A.mjs.map +0 -1
  53. package/dist/chunk-B4L6GAYD.js +0 -179
  54. package/dist/chunk-B4L6GAYD.js.map +0 -1
  55. package/dist/chunk-XQWJM3KC.js +0 -450
  56. package/dist/chunk-XQWJM3KC.js.map +0 -1
  57. package/dist/chunk-YDLCHYHH.mjs +0 -179
  58. package/dist/chunk-YDLCHYHH.mjs.map +0 -1
package/dist/polkadot.js CHANGED
@@ -6,33 +6,30 @@ var _chunkD3EQMFZ2js = require('./chunk-D3EQMFZ2.js');
6
6
 
7
7
 
8
8
 
9
- var _chunkXQWJM3KCjs = require('./chunk-XQWJM3KC.js');
10
9
 
10
+ var _chunkXOGQMEV2js = require('./chunk-XOGQMEV2.js');
11
11
 
12
12
 
13
13
 
14
14
 
15
-
16
- var _chunk4ENHC7G4js = require('./chunk-4ENHC7G4.js');
17
-
18
- // src/api/polkadot/accounts.ts
19
-
20
-
21
- var _pjssigner = require('polkadot-api/pjs-signer');
15
+ var _chunkEH73P476js = require('./chunk-EH73P476.js');
22
16
 
23
17
 
24
18
 
25
19
 
26
20
 
21
+ var _chunkP7BPHHVVjs = require('./chunk-P7BPHHVV.js');
27
22
 
23
+ // src/api/polkadot/accounts.ts
28
24
 
29
25
 
26
+ var _pjssigner = require('polkadot-api/pjs-signer');
30
27
  var _rxjs = require('rxjs');
31
28
  var getInjectedWalletAccounts$ = (wallet) => {
32
29
  if (!wallet.isConnected) return _rxjs.of.call(void 0, []);
33
30
  return new (0, _rxjs.Observable)((subscriber) => {
34
31
  const getAccount = (account) => ({
35
- id: _chunkXQWJM3KCjs.getWalletAccountId.call(void 0, wallet.id, account.address),
32
+ id: _chunkEH73P476js.getWalletAccountId.call(void 0, wallet.id, account.address),
36
33
  ...account,
37
34
  type: _nullishCoalesce(account.type, () => ( "sr25519")),
38
35
  platform: "polkadot",
@@ -51,14 +48,14 @@ var getInjectedWalletAccounts$ = (wallet) => {
51
48
  };
52
49
  var getAppKitPolkadotSigner = (appKit, address) => {
53
50
  const provider = appKit.getProvider("polkadot");
54
- if (!provider) throw new (0, _chunkXQWJM3KCjs.KheopskitError)("NO_PROVIDER", "No provider found");
51
+ if (!provider) throw new (0, _chunkEH73P476js.KheopskitError)("NO_PROVIDER", "No provider found");
55
52
  if (!provider.session)
56
- throw new (0, _chunkXQWJM3KCjs.KheopskitError)("NO_SESSION", "No session found");
53
+ throw new (0, _chunkEH73P476js.KheopskitError)("NO_SESSION", "No session found");
57
54
  return _pjssigner.getPolkadotSignerFromPjs.call(void 0,
58
55
  address,
59
56
  (transactionPayload) => {
60
57
  if (!provider.session)
61
- throw new (0, _chunkXQWJM3KCjs.KheopskitError)("NO_SESSION", "No session found");
58
+ throw new (0, _chunkEH73P476js.KheopskitError)("NO_SESSION", "No session found");
62
59
  return provider.client.request({
63
60
  topic: provider.session.topic,
64
61
  chainId: `polkadot:${transactionPayload.genesisHash.substring(2, 34)}`,
@@ -73,11 +70,11 @@ var getAppKitPolkadotSigner = (appKit, address) => {
73
70
  },
74
71
  async ({ address: address2, data }) => {
75
72
  if (!provider.session)
76
- throw new (0, _chunkXQWJM3KCjs.KheopskitError)("NO_SESSION", "No session found");
73
+ throw new (0, _chunkEH73P476js.KheopskitError)("NO_SESSION", "No session found");
77
74
  const networks = appKit.getCaipNetworks("polkadot");
78
75
  const chainId = _optionalChain([networks, 'access', _ => _[0], 'optionalAccess', _2 => _2.caipNetworkId]);
79
76
  if (!chainId)
80
- throw new (0, _chunkXQWJM3KCjs.KheopskitError)(
77
+ throw new (0, _chunkEH73P476js.KheopskitError)(
81
78
  "NO_SESSION",
82
79
  "No CAIP network available for polkadot"
83
80
  );
@@ -95,74 +92,46 @@ var getAppKitPolkadotSigner = (appKit, address) => {
95
92
  }
96
93
  );
97
94
  };
98
- var getWalletConnectAccounts$ = (wallet) => {
99
- const provider = wallet.appKit.getProvider("polkadot");
100
- if (!wallet.platforms.includes("polkadot") || !_optionalChain([provider, 'optionalAccess', _3 => _3.session]))
101
- return _rxjs.of.call(void 0, []);
102
- return _chunk4ENHC7G4js.getCachedObservable$.call(void 0,
103
- `accounts:${wallet.id}:polkadot:`,
104
- () => new (0, _rxjs.Observable)((subscriber) => {
105
- const buildAccounts = () => {
106
- const session = provider.session;
107
- if (!session) return [];
108
- const addresses = [
109
- ...new Set(
110
- Object.values(session.namespaces).flatMap((namespace) => _nullishCoalesce(namespace.accounts, () => ( []))).filter((account) => account.startsWith("polkadot:")).map((account) => account.split(":")[2]).filter((address) => !!address)
111
- )
112
- ];
113
- return addresses.map(
114
- (address) => ({
115
- id: _chunkXQWJM3KCjs.getWalletAccountId.call(void 0, wallet.id, address),
116
- platform: "polkadot",
117
- walletName: wallet.name,
118
- walletId: wallet.id,
119
- address,
120
- polkadotSigner: getAppKitPolkadotSigner(wallet.appKit, address),
121
- genesisHash: null,
122
- name: `${wallet.name} Polkadot`,
123
- // WalletConnect (Reown AppKit) doesn't expose account key type;
124
- // default to sr25519, which is the most common Polkadot key type.
125
- type: "sr25519"
126
- })
127
- );
128
- };
129
- subscriber.next(buildAccounts());
130
- const reemit = () => subscriber.next(buildAccounts());
131
- provider.on("session_update", reemit);
132
- provider.on("accountsChanged", reemit);
133
- return () => {
134
- provider.off("session_update", reemit);
135
- provider.off("accountsChanged", reemit);
136
- };
137
- }).pipe(_rxjs.shareReplay.call(void 0, { refCount: true, bufferSize: 1 }))
138
- );
139
- };
140
- var getPolkadotAccounts$ = (polkadotWallets$, polkadotAccountTypes) => new (0, _rxjs.Observable)((subscriber) => {
95
+ var getWalletConnectAccounts$ = (wallet) => _chunkXOGQMEV2js.getWalletConnectSessionAccounts$.call(void 0, {
96
+ wallet,
97
+ platform: "polkadot",
98
+ namespace: "polkadot",
99
+ cacheKey: `accounts:${wallet.id}:polkadot:`,
100
+ buildAccounts: (provider) => {
101
+ const session = provider.session;
102
+ if (!session) return [];
103
+ const addresses = _chunkXOGQMEV2js.getCaip10Addresses.call(void 0,
104
+ _chunkXOGQMEV2js.getSessionCaip10s.call(void 0, session, "polkadot")
105
+ );
106
+ return addresses.map(
107
+ (address) => ({
108
+ id: _chunkEH73P476js.getWalletAccountId.call(void 0, wallet.id, address),
109
+ platform: "polkadot",
110
+ walletName: wallet.name,
111
+ walletId: wallet.id,
112
+ address,
113
+ polkadotSigner: getAppKitPolkadotSigner(wallet.appKit, address),
114
+ genesisHash: null,
115
+ name: `${wallet.name} Polkadot`,
116
+ // WalletConnect (Reown AppKit) doesn't expose account key type;
117
+ // default to sr25519, which is the most common Polkadot key type.
118
+ type: "sr25519"
119
+ })
120
+ );
121
+ }
122
+ });
123
+ var getPolkadotAccounts$ = (polkadotWallets$, polkadotAccountTypes) => {
141
124
  if (polkadotAccountTypes.length === 0) {
142
125
  console.warn(
143
126
  "[kheopskit] config.polkadotAccountTypes is empty; all Polkadot accounts will be filtered out."
144
127
  );
145
128
  }
146
- const sub = polkadotWallets$.pipe(
147
- _rxjs.map.call(void 0, (wallets) => wallets.filter((w) => w.isConnected)),
148
- _rxjs.switchMap.call(void 0,
149
- (wallets) => wallets.length ? _rxjs.combineLatest.call(void 0, [
150
- ...wallets.filter((w) => w.type === "injected").map(getInjectedWalletAccounts$),
151
- ...wallets.filter(_chunk4ENHC7G4js.isWalletConnectWallet).map(getWalletConnectAccounts$)
152
- ]) : _rxjs.of.call(void 0, [])
153
- ),
154
- _rxjs.map.call(void 0,
155
- (accounts) => accounts.flat().filter((account) => polkadotAccountTypes.includes(account.type))
156
- ),
157
- _rxjs.distinctUntilChanged.call(void 0, isSameAccountsList)
158
- ).subscribe(subscriber);
159
- return () => {
160
- sub.unsubscribe();
161
- };
162
- }).pipe(_rxjs.shareReplay.call(void 0, { refCount: true, bufferSize: 1 }));
163
- var isSameAccountsList = (a, b) => {
164
- if (a.length !== b.length) return false;
165
- return a.every((account, i) => account.id === _optionalChain([b, 'access', _4 => _4[i], 'optionalAccess', _5 => _5.id]));
129
+ return _chunkXOGQMEV2js.createPlatformAccounts$.call(void 0, {
130
+ wallets$: polkadotWallets$,
131
+ getInjectedAccounts$: getInjectedWalletAccounts$,
132
+ getWalletConnectAccounts$,
133
+ mapAccounts: (accounts) => accounts.filter((account) => polkadotAccountTypes.includes(account.type))
134
+ });
166
135
  };
167
136
 
168
137
  // src/api/polkadot/wallets.ts
@@ -172,14 +141,7 @@ var _lodashes = require('lodash-es');
172
141
 
173
142
 
174
143
 
175
-
176
-
177
-
178
-
179
-
180
-
181
-
182
- var getInjectedWalletsIds = () => typeof window === "undefined" ? [] : _pjssigner.getInjectedExtensions.call(void 0, ).map((name) => _chunk4ENHC7G4js.getWalletId.call(void 0, "polkadot", name));
144
+ var getInjectedWalletsIds = () => typeof window === "undefined" ? [] : _pjssigner.getInjectedExtensions.call(void 0, ).map((name) => _chunkP7BPHHVVjs.getWalletId.call(void 0, "polkadot", name));
183
145
  var createWalletIdsPoller$ = () => {
184
146
  return new (0, _rxjs.Observable)((subscriber) => {
185
147
  subscriber.next(getInjectedWalletsIds());
@@ -204,68 +166,33 @@ var createWalletIdsPoller$ = () => {
204
166
  _rxjs.shareReplay.call(void 0, { refCount: true, bufferSize: 1 })
205
167
  );
206
168
  };
207
- var createPolkadotInjectedWallets$ = (store2) => new (0, _rxjs.Observable)((subscriber) => {
208
- const enabledExtensions$ = new (0, _rxjs.BehaviorSubject)(/* @__PURE__ */ new Map());
209
- const connect = async (walletId) => {
210
- if (enabledExtensions$.value.has(walletId))
211
- throw new (0, _chunkXQWJM3KCjs.KheopskitError)(
212
- "WALLET_ALREADY_CONNECTED",
213
- `wallet ${walletId} is already connected`,
214
- { walletId }
215
- );
216
- const { identifier } = _chunk4ENHC7G4js.parseWalletId.call(void 0, walletId);
217
- const extension = await _pjssigner.connectInjectedExtension.call(void 0, identifier);
218
- const newMap = new Map(enabledExtensions$.value);
219
- newMap.set(walletId, extension);
220
- enabledExtensions$.next(newMap);
221
- store2.addEnabledWalletId(walletId);
222
- };
223
- const disconnect = async (walletId) => {
224
- if (!enabledExtensions$.value.has(walletId))
225
- throw new (0, _chunkXQWJM3KCjs.KheopskitError)(
226
- "WALLET_NOT_CONNECTED",
227
- `wallet ${walletId} is not connected`,
228
- { walletId }
229
- );
230
- const newMap = new Map(enabledExtensions$.value);
231
- newMap.delete(walletId);
232
- enabledExtensions$.next(newMap);
233
- store2.removeEnabledWalletId(walletId);
234
- };
235
- const walletIds$ = createWalletIdsPoller$();
236
- const subscription = _rxjs.combineLatest.call(void 0, [walletIds$, enabledExtensions$]).pipe(
237
- _rxjs.map.call(void 0, ([walletIds, enabledExtensions]) => {
238
- return walletIds.map((id) => {
239
- const { identifier } = _chunk4ENHC7G4js.parseWalletId.call(void 0, id);
240
- const extension = enabledExtensions.get(id);
241
- const extInfo = _chunkD3EQMFZ2js.POLKADOT_EXTENSIONS[identifier];
242
- return {
243
- id,
244
- type: "injected",
245
- platform: "polkadot",
246
- name: _nullishCoalesce(_optionalChain([extInfo, 'optionalAccess', _6 => _6.name]), () => ( identifier)),
247
- icon: _nullishCoalesce(_optionalChain([extInfo, 'optionalAccess', _7 => _7.icon]), () => ( "")),
248
- sourceId: identifier,
249
- extension,
250
- isConnected: !!extension,
251
- connect: () => connect(id),
252
- disconnect: () => disconnect(id)
253
- };
254
- });
255
- }),
256
- _rxjs.distinctUntilChanged.call(void 0, walletsEqual)
257
- ).subscribe(subscriber);
258
- return () => {
259
- subscription.unsubscribe();
260
- };
261
- }).pipe(_rxjs.shareReplay.call(void 0, { refCount: true, bufferSize: 1 }));
262
- var getPolkadotWallets$ = (store2 = _chunkXQWJM3KCjs.store) => createPolkadotInjectedWallets$(store2);
263
- var walletsEqual = (a, b) => {
264
- if (a.length !== b.length) return false;
265
- return a.every(
266
- (w, i) => w.id === _optionalChain([b, 'access', _8 => _8[i], 'optionalAccess', _9 => _9.id]) && w.isConnected === _optionalChain([b, 'access', _10 => _10[i], 'optionalAccess', _11 => _11.isConnected]) && w.name === _optionalChain([b, 'access', _12 => _12[i], 'optionalAccess', _13 => _13.name])
267
- );
268
- };
169
+ var getPolkadotWallets$ = (store) => _chunkXOGQMEV2js.createInjectedWallets$.call(void 0,
170
+ store,
171
+ {
172
+ sources$: createWalletIdsPoller$(),
173
+ getWalletId: (walletId) => walletId,
174
+ connect: (walletId) => {
175
+ const { identifier } = _chunkP7BPHHVVjs.parseWalletId.call(void 0, walletId);
176
+ return _pjssigner.connectInjectedExtension.call(void 0, identifier);
177
+ },
178
+ buildWallet: ({ walletId, handle, isConnected, connect, disconnect }) => {
179
+ const { identifier } = _chunkP7BPHHVVjs.parseWalletId.call(void 0, walletId);
180
+ const extInfo = _chunkD3EQMFZ2js.POLKADOT_EXTENSIONS[identifier];
181
+ return {
182
+ id: walletId,
183
+ type: "injected",
184
+ platform: "polkadot",
185
+ name: _nullishCoalesce(_optionalChain([extInfo, 'optionalAccess', _3 => _3.name]), () => ( identifier)),
186
+ icon: _nullishCoalesce(_optionalChain([extInfo, 'optionalAccess', _4 => _4.icon]), () => ( "")),
187
+ sourceId: identifier,
188
+ extension: handle,
189
+ isConnected,
190
+ connect,
191
+ disconnect
192
+ };
193
+ }
194
+ }
195
+ );
269
196
 
270
197
  // src/api/polkadot/plugin.ts
271
198
  var DEFAULT_ACCOUNT_TYPES = [
@@ -299,5 +226,5 @@ var polkadot = (options = {}) => {
299
226
 
300
227
 
301
228
 
302
- exports.isInjectedWallet = _chunk4ENHC7G4js.isInjectedWallet; exports.isSs58Address = _chunkXQWJM3KCjs.isSs58Address; exports.isWalletConnectWallet = _chunk4ENHC7G4js.isWalletConnectWallet; exports.polkadot = polkadot;
229
+ exports.isInjectedWallet = _chunkP7BPHHVVjs.isInjectedWallet; exports.isSs58Address = _chunkEH73P476js.isSs58Address; exports.isWalletConnectWallet = _chunkP7BPHHVVjs.isWalletConnectWallet; exports.polkadot = polkadot;
303
230
  //# sourceMappingURL=polkadot.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/kheopskit/kheopskit/packages/core/dist/polkadot.js","../src/api/polkadot/accounts.ts","../src/api/polkadot/wallets.ts","../src/api/polkadot/plugin.ts"],"names":["address","combineLatest","distinctUntilChanged","map","Observable","shareReplay","store"],"mappings":"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","file":"/home/runner/work/kheopskit/kheopskit/packages/core/dist/polkadot.js","sourcesContent":[null,"import {\n\tgetPolkadotSignerFromPjs,\n\ttype InjectedExtension,\n\ttype InjectedPolkadotAccount,\n} from \"polkadot-api/pjs-signer\";\nimport {\n\tcombineLatest,\n\tdistinctUntilChanged,\n\tmap,\n\tObservable,\n\tof,\n\tshareReplay,\n\tswitchMap,\n} from \"rxjs\";\nimport { getWalletAccountId } from \"../../utils\";\nimport { getCachedObservable$ } from \"../../utils/getCachedObservable\";\nimport { KheopskitError } from \"../errors\";\nimport type {\n\tAppKitInstance,\n\tPolkadotAccountType,\n\tWalletConnectWallet,\n} from \"../types\";\nimport { isWalletConnectWallet } from \"../types\";\nimport type {\n\tPolkadotAccount,\n\tPolkadotInjectedWallet,\n\tPolkadotWallet,\n} from \"./types\";\n\nconst getInjectedWalletAccounts$ = (\n\twallet: PolkadotInjectedWallet,\n): Observable<PolkadotAccount[]> => {\n\tif (!wallet.isConnected) return of([]);\n\n\treturn new Observable<PolkadotAccount[]>((subscriber) => {\n\t\tconst getAccount = (account: InjectedPolkadotAccount): PolkadotAccount => ({\n\t\t\tid: getWalletAccountId(wallet.id, account.address),\n\t\t\t...account,\n\t\t\ttype: account.type ?? \"sr25519\",\n\t\t\tplatform: \"polkadot\",\n\t\t\twalletName: wallet.name,\n\t\t\twalletId: wallet.id,\n\t\t});\n\n\t\tconst extension = wallet.extension as InjectedExtension;\n\n\t\t// subscribe to changes\n\t\tconst unsubscribe = extension.subscribe((accounts) => {\n\t\t\tsubscriber.next(accounts.map(getAccount));\n\t\t});\n\n\t\t// initial value\n\t\tsubscriber.next(extension.getAccounts().map(getAccount));\n\n\t\treturn () => {\n\t\t\treturn unsubscribe();\n\t\t};\n\t});\n};\n\nconst getAppKitPolkadotSigner = (appKit: AppKitInstance, address: string) => {\n\tconst provider = appKit.getProvider(\"polkadot\");\n\tif (!provider) throw new KheopskitError(\"NO_PROVIDER\", \"No provider found\");\n\tif (!provider.session)\n\t\tthrow new KheopskitError(\"NO_SESSION\", \"No session found\");\n\n\treturn getPolkadotSignerFromPjs(\n\t\taddress,\n\t\t(transactionPayload) => {\n\t\t\tif (!provider.session)\n\t\t\t\tthrow new KheopskitError(\"NO_SESSION\", \"No session found\");\n\n\t\t\treturn provider.client.request({\n\t\t\t\ttopic: provider.session.topic,\n\t\t\t\tchainId: `polkadot:${transactionPayload.genesisHash.substring(2, 34)}`,\n\t\t\t\trequest: {\n\t\t\t\t\tmethod: \"polkadot_signTransaction\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\ttransactionPayload,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tasync ({ address, data }) => {\n\t\t\tif (!provider.session)\n\t\t\t\tthrow new KheopskitError(\"NO_SESSION\", \"No session found\");\n\t\t\tconst networks = appKit.getCaipNetworks(\"polkadot\");\n\t\t\tconst chainId = networks[0]?.caipNetworkId;\n\t\t\tif (!chainId)\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"NO_SESSION\",\n\t\t\t\t\t\"No CAIP network available for polkadot\",\n\t\t\t\t);\n\n\t\t\treturn provider.client.request({\n\t\t\t\ttopic: provider.session.topic,\n\t\t\t\tchainId,\n\t\t\t\trequest: {\n\t\t\t\t\tmethod: \"polkadot_signMessage\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\tmessage: data,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t);\n};\n\nconst getWalletConnectAccounts$ = (\n\twallet: WalletConnectWallet,\n): Observable<PolkadotAccount[]> => {\n\tconst provider = wallet.appKit.getProvider(\"polkadot\");\n\n\tif (!wallet.platforms.includes(\"polkadot\") || !provider?.session)\n\t\treturn of([]);\n\n\treturn getCachedObservable$(`accounts:${wallet.id}:polkadot:`, () =>\n\t\tnew Observable<PolkadotAccount[]>((subscriber) => {\n\t\t\t// AppKit's getAccount(\"polkadot\").allAccounts is always empty because\n\t\t\t// AppKit has no native polkadot adapter; the WalletConnect session is the\n\t\t\t// source of truth. Accounts are CAIP-10 strings\n\t\t\t// (\"polkadot:<chainRef>:<address>\"), one entry per chain, so dedupe to\n\t\t\t// unique addresses.\n\t\t\tconst buildAccounts = (): PolkadotAccount[] => {\n\t\t\t\tconst session = provider.session;\n\t\t\t\tif (!session) return [];\n\n\t\t\t\tconst addresses = [\n\t\t\t\t\t...new Set(\n\t\t\t\t\t\tObject.values(session.namespaces)\n\t\t\t\t\t\t\t.flatMap((namespace) => namespace.accounts ?? [])\n\t\t\t\t\t\t\t.filter((account) => account.startsWith(\"polkadot:\"))\n\t\t\t\t\t\t\t.map((account) => account.split(\":\")[2])\n\t\t\t\t\t\t\t.filter((address): address is string => !!address),\n\t\t\t\t\t),\n\t\t\t\t];\n\n\t\t\t\treturn addresses.map(\n\t\t\t\t\t(address): PolkadotAccount => ({\n\t\t\t\t\t\tid: getWalletAccountId(wallet.id, address),\n\t\t\t\t\t\tplatform: \"polkadot\",\n\t\t\t\t\t\twalletName: wallet.name,\n\t\t\t\t\t\twalletId: wallet.id,\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\tpolkadotSigner: getAppKitPolkadotSigner(wallet.appKit, address),\n\t\t\t\t\t\tgenesisHash: null,\n\t\t\t\t\t\tname: `${wallet.name} Polkadot`,\n\t\t\t\t\t\t// WalletConnect (Reown AppKit) doesn't expose account key type;\n\t\t\t\t\t\t// default to sr25519, which is the most common Polkadot key type.\n\t\t\t\t\t\ttype: \"sr25519\",\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tsubscriber.next(buildAccounts());\n\n\t\t\t// Re-derive when the WalletConnect session's accounts change, mirroring\n\t\t\t// the injected extension's subscribe and the Solana AppKit path.\n\t\t\tconst reemit = () => subscriber.next(buildAccounts());\n\t\t\tprovider.on(\"session_update\", reemit);\n\t\t\tprovider.on(\"accountsChanged\", reemit);\n\n\t\t\treturn () => {\n\t\t\t\tprovider.off(\"session_update\", reemit);\n\t\t\t\tprovider.off(\"accountsChanged\", reemit);\n\t\t\t};\n\t\t}).pipe(shareReplay({ refCount: true, bufferSize: 1 })),\n\t);\n};\n\nexport const getPolkadotAccounts$ = (\n\tpolkadotWallets$: Observable<(PolkadotWallet | WalletConnectWallet)[]>,\n\tpolkadotAccountTypes: PolkadotAccountType[],\n) =>\n\tnew Observable<PolkadotAccount[]>((subscriber) => {\n\t\tif (polkadotAccountTypes.length === 0) {\n\t\t\tconsole.warn(\n\t\t\t\t\"[kheopskit] config.polkadotAccountTypes is empty; all Polkadot accounts will be filtered out.\",\n\t\t\t);\n\t\t}\n\n\t\tconst sub = polkadotWallets$\n\t\t\t.pipe(\n\t\t\t\tmap((wallets) => wallets.filter((w) => w.isConnected)),\n\t\t\t\tswitchMap((wallets) =>\n\t\t\t\t\twallets.length\n\t\t\t\t\t\t? combineLatest([\n\t\t\t\t\t\t\t\t...wallets\n\t\t\t\t\t\t\t\t\t.filter((w) => w.type === \"injected\")\n\t\t\t\t\t\t\t\t\t.map(getInjectedWalletAccounts$),\n\t\t\t\t\t\t\t\t...wallets\n\t\t\t\t\t\t\t\t\t.filter(isWalletConnectWallet)\n\t\t\t\t\t\t\t\t\t.map(getWalletConnectAccounts$),\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t: of([]),\n\t\t\t\t),\n\t\t\t\tmap((accounts) =>\n\t\t\t\t\taccounts\n\t\t\t\t\t\t.flat()\n\t\t\t\t\t\t.filter((account) => polkadotAccountTypes.includes(account.type)),\n\t\t\t\t),\n\t\t\t\tdistinctUntilChanged(isSameAccountsList),\n\t\t\t)\n\t\t\t.subscribe(subscriber);\n\n\t\treturn () => {\n\t\t\tsub.unsubscribe();\n\t\t};\n\t}).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\nconst isSameAccountsList = (a: PolkadotAccount[], b: PolkadotAccount[]) => {\n\tif (a.length !== b.length) return false;\n\treturn a.every((account, i) => account.id === b[i]?.id);\n};\n","import { isEqual } from \"lodash-es\";\nimport {\n\tconnectInjectedExtension,\n\tgetInjectedExtensions,\n\ttype InjectedExtension,\n} from \"polkadot-api/pjs-signer\";\nimport {\n\tBehaviorSubject,\n\tcombineLatest,\n\tdistinctUntilChanged,\n\tmap,\n\tObservable,\n\tshareReplay,\n} from \"rxjs\";\nimport { POLKADOT_EXTENSIONS } from \"../../utils/polkadotExtensions\";\nimport {\n\tgetWalletId,\n\tparseWalletId,\n\ttype WalletId,\n} from \"../../utils/WalletId\";\nimport { KheopskitError } from \"../errors\";\nimport { store as defaultStore, type KheopskitStore } from \"../store\";\nimport type { PolkadotInjectedWallet } from \"./types\";\n\nconst getInjectedWalletsIds = () =>\n\ttypeof window === \"undefined\"\n\t\t? []\n\t\t: getInjectedExtensions().map((name) => getWalletId(\"polkadot\", name));\n\n// Create a polling observable that starts immediately and polls at intervals\nconst createWalletIdsPoller$ = () => {\n\treturn new Observable<WalletId[]>((subscriber) => {\n\t\t// Emit immediately on subscribe\n\t\tsubscriber.next(getInjectedWalletsIds());\n\n\t\t// Poll at shorter intervals initially, then slow down\n\t\tconst intervals = [100, 200, 300, 500];\n\t\tlet index = 0;\n\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\n\t\tconst poll = () => {\n\t\t\tsubscriber.next(getInjectedWalletsIds());\n\t\t\tif (index < intervals.length) {\n\t\t\t\tconst delay = intervals[index++];\n\t\t\t\ttimer = setTimeout(poll, delay);\n\t\t\t}\n\t\t};\n\n\t\t// Start polling after first immediate emission\n\t\tif (intervals.length > 0) {\n\t\t\ttimer = setTimeout(poll, intervals[index++] ?? 100);\n\t\t}\n\n\t\treturn () => {\n\t\t\t// Cancel any pending poll so it can't fire after unsubscribe.\n\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t};\n\t}).pipe(\n\t\tdistinctUntilChanged<WalletId[]>(isEqual),\n\t\tshareReplay({ refCount: true, bufferSize: 1 }),\n\t);\n};\n\nconst createPolkadotInjectedWallets$ = (store: KheopskitStore) =>\n\tnew Observable<PolkadotInjectedWallet[]>((subscriber) => {\n\t\tconst enabledExtensions$ = new BehaviorSubject<\n\t\t\tMap<WalletId, InjectedExtension>\n\t\t>(new Map());\n\n\t\tconst connect = async (walletId: WalletId) => {\n\t\t\tif (enabledExtensions$.value.has(walletId))\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"WALLET_ALREADY_CONNECTED\",\n\t\t\t\t\t`wallet ${walletId} is already connected`,\n\t\t\t\t\t{ walletId },\n\t\t\t\t);\n\t\t\tconst { identifier } = parseWalletId(walletId);\n\t\t\tconst extension = await connectInjectedExtension(identifier);\n\n\t\t\tconst newMap = new Map(enabledExtensions$.value);\n\t\t\tnewMap.set(walletId, extension);\n\t\t\tenabledExtensions$.next(newMap);\n\n\t\t\tstore.addEnabledWalletId(walletId);\n\t\t};\n\n\t\tconst disconnect = async (walletId: WalletId) => {\n\t\t\tif (!enabledExtensions$.value.has(walletId))\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"WALLET_NOT_CONNECTED\",\n\t\t\t\t\t`wallet ${walletId} is not connected`,\n\t\t\t\t\t{ walletId },\n\t\t\t\t);\n\n\t\t\tconst newMap = new Map(enabledExtensions$.value);\n\t\t\tnewMap.delete(walletId);\n\t\t\tenabledExtensions$.next(newMap);\n\n\t\t\tstore.removeEnabledWalletId(walletId);\n\t\t};\n\n\t\tconst walletIds$ = createWalletIdsPoller$();\n\n\t\tconst subscription = combineLatest([walletIds$, enabledExtensions$])\n\t\t\t.pipe(\n\t\t\t\tmap(([walletIds, enabledExtensions]) => {\n\t\t\t\t\treturn walletIds.map((id): PolkadotInjectedWallet => {\n\t\t\t\t\t\tconst { identifier } = parseWalletId(id);\n\t\t\t\t\t\tconst extension = enabledExtensions.get(id);\n\t\t\t\t\t\tconst extInfo = POLKADOT_EXTENSIONS[identifier];\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid,\n\t\t\t\t\t\t\ttype: \"injected\",\n\t\t\t\t\t\t\tplatform: \"polkadot\",\n\t\t\t\t\t\t\tname: extInfo?.name ?? identifier,\n\t\t\t\t\t\t\ticon: extInfo?.icon ?? \"\",\n\t\t\t\t\t\t\tsourceId: identifier,\n\t\t\t\t\t\t\textension,\n\t\t\t\t\t\t\tisConnected: !!extension,\n\t\t\t\t\t\t\tconnect: () => connect(id),\n\t\t\t\t\t\t\tdisconnect: () => disconnect(id),\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t\tdistinctUntilChanged(walletsEqual),\n\t\t\t)\n\t\t\t.subscribe(subscriber);\n\n\t\treturn () => {\n\t\t\tsubscription.unsubscribe();\n\t\t};\n\t}).pipe(shareReplay({ refCount: true, bufferSize: 1 }));\n\n// The shared WalletConnect connector is emitted once by core (see\n// `getWallets$`), not per platform — so this returns only injected wallets.\nexport const getPolkadotWallets$ = (store: KheopskitStore = defaultStore) =>\n\tcreatePolkadotInjectedWallets$(store);\n\n/**\n * Compare two wallet arrays by their relevant properties (not functions).\n */\nconst walletsEqual = (\n\ta: PolkadotInjectedWallet[],\n\tb: PolkadotInjectedWallet[],\n): boolean => {\n\tif (a.length !== b.length) return false;\n\treturn a.every(\n\t\t(w, i) =>\n\t\t\tw.id === b[i]?.id &&\n\t\t\tw.isConnected === b[i]?.isConnected &&\n\t\t\tw.name === b[i]?.name,\n\t);\n};\n","import type {\n\tKheopskitPlatform,\n\tPlatformContext,\n\tPolkadotAccountType,\n} from \"../types\";\nimport { getPolkadotAccounts$ } from \"./accounts\";\nimport type { PolkadotAccount, PolkadotWallet } from \"./types\";\nimport { getPolkadotWallets$ } from \"./wallets\";\n\nconst DEFAULT_ACCOUNT_TYPES: PolkadotAccountType[] = [\n\t\"sr25519\",\n\t\"ed25519\",\n\t\"ecdsa\",\n];\n\nconst VALID_ACCOUNT_TYPES = new Set<string>([\n\t\"sr25519\",\n\t\"ed25519\",\n\t\"ecdsa\",\n\t\"ethereum\",\n]);\n\nexport type PolkadotPluginOptions = {\n\t/**\n\t * Allowed Polkadot account key types. Accounts with other key types are\n\t * filtered out from kheopskit state.\n\t *\n\t * @default [\"sr25519\", \"ed25519\", \"ecdsa\"]\n\t */\n\taccountTypes?: PolkadotAccountType[];\n};\n\n/**\n * Polkadot platform plugin. Pass to `getKheopskit$({ platforms: [polkadot()] })`.\n *\n * @example\n * ```ts\n * import { polkadot } from \"@kheopskit/core/polkadot\";\n * polkadot({ accountTypes: [\"sr25519\", \"ed25519\", \"ecdsa\"] });\n * ```\n */\nexport const polkadot = (\n\toptions: PolkadotPluginOptions = {},\n): KheopskitPlatform<\"polkadot\", PolkadotWallet, PolkadotAccount> => {\n\tconst accountTypes = options.accountTypes ?? DEFAULT_ACCOUNT_TYPES;\n\n\tconst invalid = accountTypes.filter((t) => !VALID_ACCOUNT_TYPES.has(t));\n\tif (invalid.length > 0) {\n\t\tconsole.warn(\n\t\t\t`[kheopskit] Unknown polkadot accountTypes: ${JSON.stringify(invalid)}. Valid values: \"sr25519\", \"ed25519\", \"ecdsa\", \"ethereum\".`,\n\t\t);\n\t}\n\n\treturn {\n\t\tplatform: \"polkadot\",\n\t\tgetWallets$: (ctx: PlatformContext) => getPolkadotWallets$(ctx.store),\n\t\tgetAccounts$: (wallets$) => getPolkadotAccounts$(wallets$, accountTypes),\n\t\tacceptsCachedAccount: (cached) =>\n\t\t\taccountTypes.includes(cached.polkadotAccountType ?? \"sr25519\"),\n\t};\n};\n"]}
1
+ {"version":3,"sources":["/home/runner/work/kheopskit/kheopskit/packages/core/dist/polkadot.js","../src/api/polkadot/accounts.ts","../src/api/polkadot/wallets.ts","../src/api/polkadot/plugin.ts"],"names":["address"],"mappings":"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","file":"/home/runner/work/kheopskit/kheopskit/packages/core/dist/polkadot.js","sourcesContent":[null,"import {\n\tgetPolkadotSignerFromPjs,\n\ttype InjectedExtension,\n\ttype InjectedPolkadotAccount,\n} from \"polkadot-api/pjs-signer\";\nimport { Observable, of } from \"rxjs\";\nimport { getWalletAccountId } from \"../../utils\";\nimport { KheopskitError } from \"../errors\";\nimport {\n\tcreatePlatformAccounts$,\n\tgetCaip10Addresses,\n\tgetSessionCaip10s,\n\tgetWalletConnectSessionAccounts$,\n} from \"../platformAccounts\";\nimport type {\n\tAppKitInstance,\n\tPolkadotAccountType,\n\tWalletConnectWallet,\n} from \"../types\";\nimport type {\n\tPolkadotAccount,\n\tPolkadotInjectedWallet,\n\tPolkadotWallet,\n} from \"./types\";\n\nconst getInjectedWalletAccounts$ = (\n\twallet: PolkadotInjectedWallet,\n): Observable<PolkadotAccount[]> => {\n\tif (!wallet.isConnected) return of([]);\n\n\treturn new Observable<PolkadotAccount[]>((subscriber) => {\n\t\tconst getAccount = (account: InjectedPolkadotAccount): PolkadotAccount => ({\n\t\t\tid: getWalletAccountId(wallet.id, account.address),\n\t\t\t...account,\n\t\t\ttype: account.type ?? \"sr25519\",\n\t\t\tplatform: \"polkadot\",\n\t\t\twalletName: wallet.name,\n\t\t\twalletId: wallet.id,\n\t\t});\n\n\t\tconst extension = wallet.extension as InjectedExtension;\n\n\t\t// subscribe to changes\n\t\tconst unsubscribe = extension.subscribe((accounts) => {\n\t\t\tsubscriber.next(accounts.map(getAccount));\n\t\t});\n\n\t\t// initial value\n\t\tsubscriber.next(extension.getAccounts().map(getAccount));\n\n\t\treturn () => {\n\t\t\treturn unsubscribe();\n\t\t};\n\t});\n};\n\nconst getAppKitPolkadotSigner = (appKit: AppKitInstance, address: string) => {\n\tconst provider = appKit.getProvider(\"polkadot\");\n\tif (!provider) throw new KheopskitError(\"NO_PROVIDER\", \"No provider found\");\n\tif (!provider.session)\n\t\tthrow new KheopskitError(\"NO_SESSION\", \"No session found\");\n\n\treturn getPolkadotSignerFromPjs(\n\t\taddress,\n\t\t(transactionPayload) => {\n\t\t\tif (!provider.session)\n\t\t\t\tthrow new KheopskitError(\"NO_SESSION\", \"No session found\");\n\n\t\t\treturn provider.client.request({\n\t\t\t\ttopic: provider.session.topic,\n\t\t\t\tchainId: `polkadot:${transactionPayload.genesisHash.substring(2, 34)}`,\n\t\t\t\trequest: {\n\t\t\t\t\tmethod: \"polkadot_signTransaction\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\ttransactionPayload,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t\tasync ({ address, data }) => {\n\t\t\tif (!provider.session)\n\t\t\t\tthrow new KheopskitError(\"NO_SESSION\", \"No session found\");\n\t\t\tconst networks = appKit.getCaipNetworks(\"polkadot\");\n\t\t\tconst chainId = networks[0]?.caipNetworkId;\n\t\t\tif (!chainId)\n\t\t\t\tthrow new KheopskitError(\n\t\t\t\t\t\"NO_SESSION\",\n\t\t\t\t\t\"No CAIP network available for polkadot\",\n\t\t\t\t);\n\n\t\t\treturn provider.client.request({\n\t\t\t\ttopic: provider.session.topic,\n\t\t\t\tchainId,\n\t\t\t\trequest: {\n\t\t\t\t\tmethod: \"polkadot_signMessage\",\n\t\t\t\t\tparams: {\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\tmessage: data,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\t\t},\n\t);\n};\n\nconst getWalletConnectAccounts$ = (\n\twallet: WalletConnectWallet,\n): Observable<PolkadotAccount[]> =>\n\tgetWalletConnectSessionAccounts$({\n\t\twallet,\n\t\tplatform: \"polkadot\",\n\t\tnamespace: \"polkadot\",\n\t\tcacheKey: `accounts:${wallet.id}:polkadot:`,\n\t\tbuildAccounts: (provider) => {\n\t\t\tconst session = provider.session;\n\t\t\tif (!session) return [];\n\n\t\t\tconst addresses = getCaip10Addresses(\n\t\t\t\tgetSessionCaip10s(session, \"polkadot\"),\n\t\t\t);\n\n\t\t\treturn addresses.map(\n\t\t\t\t(address): PolkadotAccount => ({\n\t\t\t\t\tid: getWalletAccountId(wallet.id, address),\n\t\t\t\t\tplatform: \"polkadot\",\n\t\t\t\t\twalletName: wallet.name,\n\t\t\t\t\twalletId: wallet.id,\n\t\t\t\t\taddress,\n\t\t\t\t\tpolkadotSigner: getAppKitPolkadotSigner(wallet.appKit, address),\n\t\t\t\t\tgenesisHash: null,\n\t\t\t\t\tname: `${wallet.name} Polkadot`,\n\t\t\t\t\t// WalletConnect (Reown AppKit) doesn't expose account key type;\n\t\t\t\t\t// default to sr25519, which is the most common Polkadot key type.\n\t\t\t\t\ttype: \"sr25519\",\n\t\t\t\t}),\n\t\t\t);\n\t\t},\n\t});\n\nexport const getPolkadotAccounts$ = (\n\tpolkadotWallets$: Observable<(PolkadotWallet | WalletConnectWallet)[]>,\n\tpolkadotAccountTypes: PolkadotAccountType[],\n) => {\n\tif (polkadotAccountTypes.length === 0) {\n\t\tconsole.warn(\n\t\t\t\"[kheopskit] config.polkadotAccountTypes is empty; all Polkadot accounts will be filtered out.\",\n\t\t);\n\t}\n\n\treturn createPlatformAccounts$({\n\t\twallets$: polkadotWallets$,\n\t\tgetInjectedAccounts$: getInjectedWalletAccounts$,\n\t\tgetWalletConnectAccounts$,\n\t\tmapAccounts: (accounts) =>\n\t\t\taccounts.filter((account) => polkadotAccountTypes.includes(account.type)),\n\t});\n};\n","import { isEqual } from \"lodash-es\";\nimport {\n\tconnectInjectedExtension,\n\tgetInjectedExtensions,\n\ttype InjectedExtension,\n} from \"polkadot-api/pjs-signer\";\nimport { distinctUntilChanged, Observable, shareReplay } from \"rxjs\";\nimport { POLKADOT_EXTENSIONS } from \"../../utils/polkadotExtensions\";\nimport {\n\tgetWalletId,\n\tparseWalletId,\n\ttype WalletId,\n} from \"../../utils/WalletId\";\nimport { createInjectedWallets$ } from \"../injectedWallets\";\nimport type { KheopskitStore } from \"../store\";\nimport type { PolkadotInjectedWallet } from \"./types\";\n\nconst getInjectedWalletsIds = () =>\n\ttypeof window === \"undefined\"\n\t\t? []\n\t\t: getInjectedExtensions().map((name) => getWalletId(\"polkadot\", name));\n\n// Create a polling observable that starts immediately and polls at intervals\nconst createWalletIdsPoller$ = () => {\n\treturn new Observable<WalletId[]>((subscriber) => {\n\t\t// Emit immediately on subscribe\n\t\tsubscriber.next(getInjectedWalletsIds());\n\n\t\t// Poll at shorter intervals initially, then slow down\n\t\tconst intervals = [100, 200, 300, 500];\n\t\tlet index = 0;\n\t\tlet timer: ReturnType<typeof setTimeout> | undefined;\n\n\t\tconst poll = () => {\n\t\t\tsubscriber.next(getInjectedWalletsIds());\n\t\t\tif (index < intervals.length) {\n\t\t\t\tconst delay = intervals[index++];\n\t\t\t\ttimer = setTimeout(poll, delay);\n\t\t\t}\n\t\t};\n\n\t\t// Start polling after first immediate emission\n\t\tif (intervals.length > 0) {\n\t\t\ttimer = setTimeout(poll, intervals[index++] ?? 100);\n\t\t}\n\n\t\treturn () => {\n\t\t\t// Cancel any pending poll so it can't fire after unsubscribe.\n\t\t\tif (timer !== undefined) clearTimeout(timer);\n\t\t};\n\t}).pipe(\n\t\tdistinctUntilChanged<WalletId[]>(isEqual),\n\t\tshareReplay({ refCount: true, bufferSize: 1 }),\n\t);\n};\n\n// The shared WalletConnect connector is emitted once by core (see\n// `getWallets$`), not per platform — so this returns only injected wallets.\nexport const getPolkadotWallets$ = (store: KheopskitStore) =>\n\tcreateInjectedWallets$<WalletId, PolkadotInjectedWallet, InjectedExtension>(\n\t\tstore,\n\t\t{\n\t\t\tsources$: createWalletIdsPoller$(),\n\t\t\tgetWalletId: (walletId) => walletId,\n\t\t\tconnect: (walletId) => {\n\t\t\t\tconst { identifier } = parseWalletId(walletId);\n\t\t\t\treturn connectInjectedExtension(identifier);\n\t\t\t},\n\t\t\tbuildWallet: ({ walletId, handle, isConnected, connect, disconnect }) => {\n\t\t\t\tconst { identifier } = parseWalletId(walletId);\n\t\t\t\tconst extInfo = POLKADOT_EXTENSIONS[identifier];\n\n\t\t\t\treturn {\n\t\t\t\t\tid: walletId,\n\t\t\t\t\ttype: \"injected\",\n\t\t\t\t\tplatform: \"polkadot\",\n\t\t\t\t\tname: extInfo?.name ?? identifier,\n\t\t\t\t\ticon: extInfo?.icon ?? \"\",\n\t\t\t\t\tsourceId: identifier,\n\t\t\t\t\textension: handle,\n\t\t\t\t\tisConnected,\n\t\t\t\t\tconnect,\n\t\t\t\t\tdisconnect,\n\t\t\t\t};\n\t\t\t},\n\t\t},\n\t);\n","import type {\n\tKheopskitPlatform,\n\tPlatformContext,\n\tPolkadotAccountType,\n} from \"../types\";\nimport { getPolkadotAccounts$ } from \"./accounts\";\nimport type { PolkadotAccount, PolkadotWallet } from \"./types\";\nimport { getPolkadotWallets$ } from \"./wallets\";\n\nconst DEFAULT_ACCOUNT_TYPES: PolkadotAccountType[] = [\n\t\"sr25519\",\n\t\"ed25519\",\n\t\"ecdsa\",\n];\n\nconst VALID_ACCOUNT_TYPES = new Set<string>([\n\t\"sr25519\",\n\t\"ed25519\",\n\t\"ecdsa\",\n\t\"ethereum\",\n]);\n\nexport type PolkadotPluginOptions = {\n\t/**\n\t * Allowed Polkadot account key types. Accounts with other key types are\n\t * filtered out from kheopskit state.\n\t *\n\t * @default [\"sr25519\", \"ed25519\", \"ecdsa\"]\n\t */\n\taccountTypes?: PolkadotAccountType[];\n};\n\n/**\n * Polkadot platform plugin. Pass to `getKheopskit$({ platforms: [polkadot()] })`.\n *\n * @example\n * ```ts\n * import { polkadot } from \"@kheopskit/core/polkadot\";\n * polkadot({ accountTypes: [\"sr25519\", \"ed25519\", \"ecdsa\"] });\n * ```\n */\nexport const polkadot = (\n\toptions: PolkadotPluginOptions = {},\n): KheopskitPlatform<\"polkadot\", PolkadotWallet, PolkadotAccount> => {\n\tconst accountTypes = options.accountTypes ?? DEFAULT_ACCOUNT_TYPES;\n\n\tconst invalid = accountTypes.filter((t) => !VALID_ACCOUNT_TYPES.has(t));\n\tif (invalid.length > 0) {\n\t\tconsole.warn(\n\t\t\t`[kheopskit] Unknown polkadot accountTypes: ${JSON.stringify(invalid)}. Valid values: \"sr25519\", \"ed25519\", \"ecdsa\", \"ethereum\".`,\n\t\t);\n\t}\n\n\treturn {\n\t\tplatform: \"polkadot\",\n\t\tgetWallets$: (ctx: PlatformContext) => getPolkadotWallets$(ctx.store),\n\t\tgetAccounts$: (wallets$) => getPolkadotAccounts$(wallets$, accountTypes),\n\t\tacceptsCachedAccount: (cached) =>\n\t\t\taccountTypes.includes(cached.polkadotAccountType ?? \"sr25519\"),\n\t};\n};\n"]}
package/dist/polkadot.mjs CHANGED
@@ -1,33 +1,30 @@
1
1
  import {
2
2
  POLKADOT_EXTENSIONS
3
3
  } from "./chunk-BWUUHUDK.mjs";
4
+ import {
5
+ createInjectedWallets$,
6
+ createPlatformAccounts$,
7
+ getCaip10Addresses,
8
+ getSessionCaip10s,
9
+ getWalletConnectSessionAccounts$
10
+ } from "./chunk-JVSCMJY5.mjs";
4
11
  import {
5
12
  KheopskitError,
6
13
  getWalletAccountId,
7
- isSs58Address,
8
- store
9
- } from "./chunk-6XAZANB5.mjs";
14
+ isSs58Address
15
+ } from "./chunk-DF7EKK4G.mjs";
10
16
  import {
11
- getCachedObservable$,
12
17
  getWalletId,
13
18
  isInjectedWallet,
14
19
  isWalletConnectWallet,
15
20
  parseWalletId
16
- } from "./chunk-7QSGAJ4A.mjs";
21
+ } from "./chunk-WOPCW2OX.mjs";
17
22
 
18
23
  // src/api/polkadot/accounts.ts
19
24
  import {
20
25
  getPolkadotSignerFromPjs
21
26
  } from "polkadot-api/pjs-signer";
22
- import {
23
- combineLatest,
24
- distinctUntilChanged,
25
- map,
26
- Observable,
27
- of,
28
- shareReplay,
29
- switchMap
30
- } from "rxjs";
27
+ import { Observable, of } from "rxjs";
31
28
  var getInjectedWalletAccounts$ = (wallet) => {
32
29
  if (!wallet.isConnected) return of([]);
33
30
  return new Observable((subscriber) => {
@@ -95,74 +92,46 @@ var getAppKitPolkadotSigner = (appKit, address) => {
95
92
  }
96
93
  );
97
94
  };
98
- var getWalletConnectAccounts$ = (wallet) => {
99
- const provider = wallet.appKit.getProvider("polkadot");
100
- if (!wallet.platforms.includes("polkadot") || !provider?.session)
101
- return of([]);
102
- return getCachedObservable$(
103
- `accounts:${wallet.id}:polkadot:`,
104
- () => new Observable((subscriber) => {
105
- const buildAccounts = () => {
106
- const session = provider.session;
107
- if (!session) return [];
108
- const addresses = [
109
- ...new Set(
110
- Object.values(session.namespaces).flatMap((namespace) => namespace.accounts ?? []).filter((account) => account.startsWith("polkadot:")).map((account) => account.split(":")[2]).filter((address) => !!address)
111
- )
112
- ];
113
- return addresses.map(
114
- (address) => ({
115
- id: getWalletAccountId(wallet.id, address),
116
- platform: "polkadot",
117
- walletName: wallet.name,
118
- walletId: wallet.id,
119
- address,
120
- polkadotSigner: getAppKitPolkadotSigner(wallet.appKit, address),
121
- genesisHash: null,
122
- name: `${wallet.name} Polkadot`,
123
- // WalletConnect (Reown AppKit) doesn't expose account key type;
124
- // default to sr25519, which is the most common Polkadot key type.
125
- type: "sr25519"
126
- })
127
- );
128
- };
129
- subscriber.next(buildAccounts());
130
- const reemit = () => subscriber.next(buildAccounts());
131
- provider.on("session_update", reemit);
132
- provider.on("accountsChanged", reemit);
133
- return () => {
134
- provider.off("session_update", reemit);
135
- provider.off("accountsChanged", reemit);
136
- };
137
- }).pipe(shareReplay({ refCount: true, bufferSize: 1 }))
138
- );
139
- };
140
- var getPolkadotAccounts$ = (polkadotWallets$, polkadotAccountTypes) => new Observable((subscriber) => {
95
+ var getWalletConnectAccounts$ = (wallet) => getWalletConnectSessionAccounts$({
96
+ wallet,
97
+ platform: "polkadot",
98
+ namespace: "polkadot",
99
+ cacheKey: `accounts:${wallet.id}:polkadot:`,
100
+ buildAccounts: (provider) => {
101
+ const session = provider.session;
102
+ if (!session) return [];
103
+ const addresses = getCaip10Addresses(
104
+ getSessionCaip10s(session, "polkadot")
105
+ );
106
+ return addresses.map(
107
+ (address) => ({
108
+ id: getWalletAccountId(wallet.id, address),
109
+ platform: "polkadot",
110
+ walletName: wallet.name,
111
+ walletId: wallet.id,
112
+ address,
113
+ polkadotSigner: getAppKitPolkadotSigner(wallet.appKit, address),
114
+ genesisHash: null,
115
+ name: `${wallet.name} Polkadot`,
116
+ // WalletConnect (Reown AppKit) doesn't expose account key type;
117
+ // default to sr25519, which is the most common Polkadot key type.
118
+ type: "sr25519"
119
+ })
120
+ );
121
+ }
122
+ });
123
+ var getPolkadotAccounts$ = (polkadotWallets$, polkadotAccountTypes) => {
141
124
  if (polkadotAccountTypes.length === 0) {
142
125
  console.warn(
143
126
  "[kheopskit] config.polkadotAccountTypes is empty; all Polkadot accounts will be filtered out."
144
127
  );
145
128
  }
146
- const sub = polkadotWallets$.pipe(
147
- map((wallets) => wallets.filter((w) => w.isConnected)),
148
- switchMap(
149
- (wallets) => wallets.length ? combineLatest([
150
- ...wallets.filter((w) => w.type === "injected").map(getInjectedWalletAccounts$),
151
- ...wallets.filter(isWalletConnectWallet).map(getWalletConnectAccounts$)
152
- ]) : of([])
153
- ),
154
- map(
155
- (accounts) => accounts.flat().filter((account) => polkadotAccountTypes.includes(account.type))
156
- ),
157
- distinctUntilChanged(isSameAccountsList)
158
- ).subscribe(subscriber);
159
- return () => {
160
- sub.unsubscribe();
161
- };
162
- }).pipe(shareReplay({ refCount: true, bufferSize: 1 }));
163
- var isSameAccountsList = (a, b) => {
164
- if (a.length !== b.length) return false;
165
- return a.every((account, i) => account.id === b[i]?.id);
129
+ return createPlatformAccounts$({
130
+ wallets$: polkadotWallets$,
131
+ getInjectedAccounts$: getInjectedWalletAccounts$,
132
+ getWalletConnectAccounts$,
133
+ mapAccounts: (accounts) => accounts.filter((account) => polkadotAccountTypes.includes(account.type))
134
+ });
166
135
  };
167
136
 
168
137
  // src/api/polkadot/wallets.ts
@@ -171,14 +140,7 @@ import {
171
140
  connectInjectedExtension,
172
141
  getInjectedExtensions
173
142
  } from "polkadot-api/pjs-signer";
174
- import {
175
- BehaviorSubject,
176
- combineLatest as combineLatest2,
177
- distinctUntilChanged as distinctUntilChanged2,
178
- map as map2,
179
- Observable as Observable2,
180
- shareReplay as shareReplay2
181
- } from "rxjs";
143
+ import { distinctUntilChanged, Observable as Observable2, shareReplay } from "rxjs";
182
144
  var getInjectedWalletsIds = () => typeof window === "undefined" ? [] : getInjectedExtensions().map((name) => getWalletId("polkadot", name));
183
145
  var createWalletIdsPoller$ = () => {
184
146
  return new Observable2((subscriber) => {
@@ -200,72 +162,37 @@ var createWalletIdsPoller$ = () => {
200
162
  if (timer !== void 0) clearTimeout(timer);
201
163
  };
202
164
  }).pipe(
203
- distinctUntilChanged2(isEqual),
204
- shareReplay2({ refCount: true, bufferSize: 1 })
205
- );
206
- };
207
- var createPolkadotInjectedWallets$ = (store2) => new Observable2((subscriber) => {
208
- const enabledExtensions$ = new BehaviorSubject(/* @__PURE__ */ new Map());
209
- const connect = async (walletId) => {
210
- if (enabledExtensions$.value.has(walletId))
211
- throw new KheopskitError(
212
- "WALLET_ALREADY_CONNECTED",
213
- `wallet ${walletId} is already connected`,
214
- { walletId }
215
- );
216
- const { identifier } = parseWalletId(walletId);
217
- const extension = await connectInjectedExtension(identifier);
218
- const newMap = new Map(enabledExtensions$.value);
219
- newMap.set(walletId, extension);
220
- enabledExtensions$.next(newMap);
221
- store2.addEnabledWalletId(walletId);
222
- };
223
- const disconnect = async (walletId) => {
224
- if (!enabledExtensions$.value.has(walletId))
225
- throw new KheopskitError(
226
- "WALLET_NOT_CONNECTED",
227
- `wallet ${walletId} is not connected`,
228
- { walletId }
229
- );
230
- const newMap = new Map(enabledExtensions$.value);
231
- newMap.delete(walletId);
232
- enabledExtensions$.next(newMap);
233
- store2.removeEnabledWalletId(walletId);
234
- };
235
- const walletIds$ = createWalletIdsPoller$();
236
- const subscription = combineLatest2([walletIds$, enabledExtensions$]).pipe(
237
- map2(([walletIds, enabledExtensions]) => {
238
- return walletIds.map((id) => {
239
- const { identifier } = parseWalletId(id);
240
- const extension = enabledExtensions.get(id);
241
- const extInfo = POLKADOT_EXTENSIONS[identifier];
242
- return {
243
- id,
244
- type: "injected",
245
- platform: "polkadot",
246
- name: extInfo?.name ?? identifier,
247
- icon: extInfo?.icon ?? "",
248
- sourceId: identifier,
249
- extension,
250
- isConnected: !!extension,
251
- connect: () => connect(id),
252
- disconnect: () => disconnect(id)
253
- };
254
- });
255
- }),
256
- distinctUntilChanged2(walletsEqual)
257
- ).subscribe(subscriber);
258
- return () => {
259
- subscription.unsubscribe();
260
- };
261
- }).pipe(shareReplay2({ refCount: true, bufferSize: 1 }));
262
- var getPolkadotWallets$ = (store2 = store) => createPolkadotInjectedWallets$(store2);
263
- var walletsEqual = (a, b) => {
264
- if (a.length !== b.length) return false;
265
- return a.every(
266
- (w, i) => w.id === b[i]?.id && w.isConnected === b[i]?.isConnected && w.name === b[i]?.name
165
+ distinctUntilChanged(isEqual),
166
+ shareReplay({ refCount: true, bufferSize: 1 })
267
167
  );
268
168
  };
169
+ var getPolkadotWallets$ = (store) => createInjectedWallets$(
170
+ store,
171
+ {
172
+ sources$: createWalletIdsPoller$(),
173
+ getWalletId: (walletId) => walletId,
174
+ connect: (walletId) => {
175
+ const { identifier } = parseWalletId(walletId);
176
+ return connectInjectedExtension(identifier);
177
+ },
178
+ buildWallet: ({ walletId, handle, isConnected, connect, disconnect }) => {
179
+ const { identifier } = parseWalletId(walletId);
180
+ const extInfo = POLKADOT_EXTENSIONS[identifier];
181
+ return {
182
+ id: walletId,
183
+ type: "injected",
184
+ platform: "polkadot",
185
+ name: extInfo?.name ?? identifier,
186
+ icon: extInfo?.icon ?? "",
187
+ sourceId: identifier,
188
+ extension: handle,
189
+ isConnected,
190
+ connect,
191
+ disconnect
192
+ };
193
+ }
194
+ }
195
+ );
269
196
 
270
197
  // src/api/polkadot/plugin.ts
271
198
  var DEFAULT_ACCOUNT_TYPES = [