@talismn/balances 1.3.7 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -7,20 +7,20 @@ import {
7
7
  getAccountPlatformFromAddress,
8
8
  normalizeAddress
9
9
  } from "@talismn/crypto";
10
- import { getSharedObservable, isNotNil as isNotNil9, isTruthy, keepAlive } from "@talismn/util";
11
- import { assign as assign11, fromPairs as fromPairs2, isEqual as isEqual10, keyBy as keyBy8, keys as keys3, toPairs as toPairs2, uniq as uniq5, values as values2 } from "lodash-es";
10
+ import { getSharedObservable, isNotNil as isNotNil10, isTruthy, keepAlive } from "@talismn/util";
11
+ import { assign as assign12, fromPairs as fromPairs2, isEqual as isEqual11, keyBy as keyBy9, keys as keys3, toPairs as toPairs2, uniq as uniq6, values as values2 } from "lodash-es";
12
12
  import {
13
13
  BehaviorSubject as BehaviorSubject2,
14
14
  catchError,
15
15
  combineLatest,
16
16
  defer,
17
- distinctUntilChanged as distinctUntilChanged10,
17
+ distinctUntilChanged as distinctUntilChanged11,
18
18
  EMPTY,
19
19
  filter,
20
20
  firstValueFrom,
21
21
  from,
22
22
  map as map6,
23
- of as of14,
23
+ of as of15,
24
24
  shareReplay,
25
25
  startWith,
26
26
  switchMap as switchMap2,
@@ -38,7 +38,7 @@ import anylogger from "anylogger";
38
38
  // package.json
39
39
  var package_default = {
40
40
  name: "@talismn/balances",
41
- version: "1.3.7",
41
+ version: "1.4.0",
42
42
  author: "Talisman",
43
43
  homepage: "https://talisman.xyz",
44
44
  license: "GPL-3.0-or-later",
@@ -90,7 +90,6 @@ var package_default = {
90
90
  devDependencies: {
91
91
  "@polkadot/api-contract": "16.1.2",
92
92
  "@polkadot/types": "16.1.2",
93
- "@polkadot/util": "13.5.3",
94
93
  "@talismn/tsconfig": "workspace:*",
95
94
  "@types/lodash-es": "4.17.12",
96
95
  typescript: "^5.6.3"
@@ -98,8 +97,6 @@ var package_default = {
98
97
  peerDependencies: {
99
98
  "@polkadot/api-contract": "*",
100
99
  "@polkadot/types": "*",
101
- "@polkadot/util": "*",
102
- "@polkadot/util-crypto": "*",
103
100
  "@substrate/txwrapper-core": "*"
104
101
  },
105
102
  types: "./dist/index.d.ts",
@@ -1852,8 +1849,8 @@ var fetchBalances4 = async ({
1852
1849
  const results = await Promise.allSettled(
1853
1850
  balanceDefs.map(async ({ token, address }) => {
1854
1851
  try {
1855
- const publicKey2 = new PublicKey(address);
1856
- const lamports = await connection.getBalance(publicKey2);
1852
+ const publicKey3 = new PublicKey(address);
1853
+ const lamports = await connection.getBalance(publicKey3);
1857
1854
  return {
1858
1855
  address,
1859
1856
  tokenId: token.id,
@@ -2009,8 +2006,8 @@ var MODULE_TYPE5 = SolSplTokenSchema.shape.type.value;
2009
2006
  var PLATFORM5 = SolSplTokenSchema.shape.platform.value;
2010
2007
 
2011
2008
  // src/modules/sol-spl/fetchBalances.ts
2012
- import { PublicKey as PublicKey3 } from "@solana/web3.js";
2013
- import { solSplTokenId } from "@talismn/chaindata-provider";
2009
+ import { PublicKey as PublicKey4 } from "@solana/web3.js";
2010
+ import { SolSplTokenSchema as SolSplTokenSchema3, solSplTokenId } from "@talismn/chaindata-provider";
2014
2011
  import { isNotNil as isNotNil2 } from "@talismn/util";
2015
2012
  import { keyBy as keyBy2, uniq as uniq2 } from "lodash-es";
2016
2013
 
@@ -2172,8 +2169,77 @@ var getDetectedTokensIds$ = (address) => tokenIdsByAddress.pipe(
2172
2169
  distinctUntilChanged5(isEqual5)
2173
2170
  );
2174
2171
 
2172
+ // src/modules/sol-spl/onChainTokenMetadata.ts
2173
+ import { deserializeMetadata } from "@metaplex-foundation/mpl-token-metadata";
2174
+ import { publicKey, sol } from "@metaplex-foundation/umi";
2175
+ import { MintLayout } from "@solana/spl-token";
2176
+ import { PublicKey as PublicKey3 } from "@solana/web3.js";
2177
+ import { parseSolSplTokenId, SolSplTokenSchema as SolSplTokenSchema2 } from "@talismn/chaindata-provider";
2178
+ import z7 from "zod/v4";
2179
+ var TokenCacheSchema3 = z7.discriminatedUnion("isValid", [
2180
+ z7.strictObject({
2181
+ id: SolSplTokenSchema2.shape.id,
2182
+ isValid: z7.literal(true),
2183
+ ...SolSplTokenSchema2.pick({ symbol: true, decimals: true, name: true, logo: true }).shape
2184
+ }),
2185
+ z7.strictObject({
2186
+ id: SolSplTokenSchema2.shape.id,
2187
+ isValid: z7.literal(false)
2188
+ })
2189
+ ]);
2190
+ var METAPLEX_PROGRAM_ID = new PublicKey3("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
2191
+ var ERROR_NO_MINT = "No mint info available";
2192
+ var ERROR_NO_METADATA = "No metadata account found";
2193
+ var ERROR_INVALID_DATA = "Invalid on-chain data";
2194
+ var fetchOnChainTokenData = async (connector, tokenId) => {
2195
+ try {
2196
+ const { networkId, mintAddress } = parseSolSplTokenId(tokenId);
2197
+ const connection = await connector.getConnection(networkId);
2198
+ if (!connection) {
2199
+ log_default.warn(`No connection found for network ${networkId}`);
2200
+ return null;
2201
+ }
2202
+ const mintPubKey = new PublicKey3(mintAddress);
2203
+ const mintInfo = await connection.getAccountInfo(mintPubKey);
2204
+ if (!mintInfo?.data) throw new Error(ERROR_NO_MINT);
2205
+ const mint = MintLayout.decode(mintInfo.data);
2206
+ const [metadataPDA] = PublicKey3.findProgramAddressSync(
2207
+ [Buffer.from("metadata"), METAPLEX_PROGRAM_ID.toBuffer(), mintPubKey.toBuffer()],
2208
+ METAPLEX_PROGRAM_ID
2209
+ );
2210
+ const metadataAccount = await connection.getAccountInfo(new PublicKey3(metadataPDA));
2211
+ if (!metadataAccount) throw new Error(ERROR_NO_METADATA);
2212
+ const metadata = deserializeMetadata({
2213
+ publicKey: publicKey(metadataPDA),
2214
+ executable: metadataAccount.executable,
2215
+ owner: publicKey(metadataAccount.owner),
2216
+ lamports: sol(metadataAccount.lamports),
2217
+ data: metadataAccount.data
2218
+ });
2219
+ const parsed = TokenCacheSchema3.safeParse({
2220
+ id: tokenId,
2221
+ symbol: metadata.symbol.trim(),
2222
+ name: metadata.name.trim(),
2223
+ decimals: mint.decimals,
2224
+ isValid: true
2225
+ });
2226
+ if (!parsed.success) throw new Error(ERROR_INVALID_DATA);
2227
+ return parsed.data;
2228
+ } catch (err) {
2229
+ const msg = err.message;
2230
+ if ([ERROR_NO_MINT, ERROR_NO_METADATA, ERROR_INVALID_DATA].includes(msg))
2231
+ return TokenCacheSchema3.parse({
2232
+ id: tokenId,
2233
+ isValid: false
2234
+ });
2235
+ log_default.warn("Failed to fetch sol-spl token data for %s", tokenId, { err });
2236
+ }
2237
+ return null;
2238
+ };
2239
+
2175
2240
  // src/modules/sol-spl/fetchBalances.ts
2176
2241
  var SPL_PROGRAM_ID = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
2242
+ var dynamicTokenMetadataCache = /* @__PURE__ */ new Map();
2177
2243
  var fetchBalances5 = async ({
2178
2244
  networkId,
2179
2245
  tokensWithAddresses,
@@ -2183,18 +2249,22 @@ var fetchBalances5 = async ({
2183
2249
  const connection = await connector.getConnection(networkId);
2184
2250
  if (!connection) throw new Error(`Could not get connection for Solana network ${networkId}`);
2185
2251
  const accountAddresses = uniq2(tokensWithAddresses.flatMap(([, addresses]) => addresses));
2252
+ const knownTokenIds = new Set(tokensWithAddresses.map(([token]) => token.id));
2253
+ const unknownMints = /* @__PURE__ */ new Set();
2186
2254
  const balancesPerAddress = await Promise.all(
2187
2255
  accountAddresses.map(async (address) => {
2188
- const tokenAccounts = await connection.getParsedTokenAccountsByOwner(new PublicKey3(address), {
2189
- programId: new PublicKey3(SPL_PROGRAM_ID)
2256
+ const tokenAccounts = await connection.getParsedTokenAccountsByOwner(new PublicKey4(address), {
2257
+ programId: new PublicKey4(SPL_PROGRAM_ID)
2190
2258
  // SPL Token Program ID
2191
2259
  });
2192
2260
  const balances = tokenAccounts.value.map((d) => {
2193
2261
  try {
2194
2262
  const mintAddress = d.account.data.parsed.info.mint;
2195
2263
  const value = d.account.data.parsed.info.tokenAmount.amount ?? "0";
2264
+ const tokenId = solSplTokenId(networkId, mintAddress);
2265
+ if (!knownTokenIds.has(tokenId) && value !== "0") unknownMints.add(mintAddress);
2196
2266
  return {
2197
- tokenId: solSplTokenId(networkId, mintAddress),
2267
+ tokenId,
2198
2268
  networkId,
2199
2269
  address,
2200
2270
  source: MODULE_TYPE5,
@@ -2217,6 +2287,42 @@ var fetchBalances5 = async ({
2217
2287
  return [address, balances];
2218
2288
  })
2219
2289
  );
2290
+ const dynamicTokens = [];
2291
+ if (unknownMints.size) {
2292
+ await Promise.all(
2293
+ Array.from(unknownMints).map(async (mintAddress) => {
2294
+ const tokenId = solSplTokenId(networkId, mintAddress);
2295
+ let cached = dynamicTokenMetadataCache.get(tokenId);
2296
+ if (!cached) {
2297
+ const fetched = await fetchOnChainTokenData(connector, tokenId);
2298
+ if (fetched) {
2299
+ dynamicTokenMetadataCache.set(tokenId, fetched);
2300
+ cached = fetched;
2301
+ }
2302
+ }
2303
+ if (!cached || !cached.isValid) return;
2304
+ const token = {
2305
+ id: tokenId,
2306
+ type: MODULE_TYPE5,
2307
+ platform: PLATFORM5,
2308
+ networkId,
2309
+ mintAddress,
2310
+ isDefault: true,
2311
+ symbol: cached.symbol,
2312
+ decimals: cached.decimals,
2313
+ ...cached.name !== void 0 ? { name: cached.name } : {},
2314
+ ...cached.logo !== void 0 ? { logo: cached.logo } : {}
2315
+ };
2316
+ const parsed = SolSplTokenSchema3.safeParse(token);
2317
+ if (!parsed.success) {
2318
+ log_default.warn("Ignoring dynamic sol-spl token with invalid schema", { token });
2319
+ return;
2320
+ }
2321
+ dynamicTokens.push(parsed.data);
2322
+ })
2323
+ );
2324
+ }
2325
+ const registeredDynamicIds = new Set(dynamicTokens.map((t) => t.id));
2220
2326
  const allBalancesByKey = keyBy2(
2221
2327
  balancesPerAddress.flatMap(([, addressBalances]) => addressBalances),
2222
2328
  (b) => getBalanceKey(b.tokenId, b.address)
@@ -2233,34 +2339,16 @@ var fetchBalances5 = async ({
2233
2339
  value: "0"
2234
2340
  };
2235
2341
  });
2236
- return { success, errors: [] };
2342
+ for (const balance of balancesPerAddress.flatMap(([, addressBalances]) => addressBalances)) {
2343
+ if (registeredDynamicIds.has(balance.tokenId)) success.push(balance);
2344
+ }
2345
+ return { success, errors: [], dynamicTokens };
2237
2346
  };
2238
2347
  var getBalanceKey = (tokenId, address) => `${tokenId}:${address}`;
2239
2348
 
2240
2349
  // src/modules/sol-spl/fetchTokens.ts
2241
- import { deserializeMetadata } from "@metaplex-foundation/mpl-token-metadata";
2242
- import { publicKey, sol } from "@metaplex-foundation/umi";
2243
- import { MintLayout } from "@solana/spl-token";
2244
- import { PublicKey as PublicKey4 } from "@solana/web3.js";
2245
- import {
2246
- parseSolSplTokenId,
2247
- SolSplTokenSchema as SolSplTokenSchema2,
2248
- solSplTokenId as solSplTokenId2
2249
- } from "@talismn/chaindata-provider";
2350
+ import { SolSplTokenSchema as SolSplTokenSchema4, solSplTokenId as solSplTokenId2 } from "@talismn/chaindata-provider";
2250
2351
  import { assign as assign5, omit as omit3 } from "lodash-es";
2251
- import z7 from "zod/v4";
2252
- var TokenCacheSchema3 = z7.discriminatedUnion("isValid", [
2253
- z7.strictObject({
2254
- id: SolSplTokenSchema2.shape.id,
2255
- isValid: z7.literal(true),
2256
- ...SolSplTokenSchema2.pick({ symbol: true, decimals: true, name: true, logo: true }).shape
2257
- }),
2258
- z7.strictObject({
2259
- id: SolSplTokenSchema2.shape.id,
2260
- isValid: z7.literal(false)
2261
- })
2262
- ]);
2263
- var METAPLEX_PROGRAM_ID = new PublicKey4("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
2264
2352
  var fetchTokens5 = async ({
2265
2353
  networkId,
2266
2354
  tokens,
@@ -2288,7 +2376,7 @@ var fetchTokens5 = async ({
2288
2376
  cached?.isValid ? omit3(cached, ["isValid"]) : {},
2289
2377
  tokenConfig
2290
2378
  );
2291
- const parsed = SolSplTokenSchema2.safeParse(token);
2379
+ const parsed = SolSplTokenSchema4.safeParse(token);
2292
2380
  if (!parsed.success) {
2293
2381
  log_default.warn("Ignoring token with invalid SolSplTokenSchema", {
2294
2382
  token
@@ -2299,54 +2387,6 @@ var fetchTokens5 = async ({
2299
2387
  }
2300
2388
  return result;
2301
2389
  };
2302
- var ERROR_NO_MINT = "No mint info available";
2303
- var ERROR_NO_METADATA = "No metadata account found";
2304
- var ERROR_INVALID_DATA = "Invalid on-chain data";
2305
- var fetchOnChainTokenData = async (connector, tokenId) => {
2306
- try {
2307
- const { networkId, mintAddress } = parseSolSplTokenId(tokenId);
2308
- const connection = await connector.getConnection(networkId);
2309
- if (!connection) {
2310
- log_default.warn(`No connection found for network ${networkId}`);
2311
- return null;
2312
- }
2313
- const mintPubKey = new PublicKey4(mintAddress);
2314
- const mintInfo = await connection.getAccountInfo(mintPubKey);
2315
- if (!mintInfo?.data) throw new Error(ERROR_NO_MINT);
2316
- const mint = MintLayout.decode(mintInfo.data);
2317
- const [metadataPDA] = PublicKey4.findProgramAddressSync(
2318
- [Buffer.from("metadata"), METAPLEX_PROGRAM_ID.toBuffer(), mintPubKey.toBuffer()],
2319
- METAPLEX_PROGRAM_ID
2320
- );
2321
- const metadataAccount = await connection.getAccountInfo(new PublicKey4(metadataPDA));
2322
- if (!metadataAccount) throw new Error(ERROR_NO_METADATA);
2323
- const metadata = deserializeMetadata({
2324
- publicKey: publicKey(metadataPDA),
2325
- executable: metadataAccount.executable,
2326
- owner: publicKey(metadataAccount.owner),
2327
- lamports: sol(metadataAccount.lamports),
2328
- data: metadataAccount.data
2329
- });
2330
- const parsed = TokenCacheSchema3.safeParse({
2331
- id: tokenId,
2332
- symbol: metadata.symbol.trim(),
2333
- name: metadata.name.trim(),
2334
- decimals: mint.decimals,
2335
- isValid: true
2336
- });
2337
- if (!parsed.success) throw new Error(ERROR_INVALID_DATA);
2338
- return parsed.data;
2339
- } catch (err) {
2340
- const msg = err.message;
2341
- if ([ERROR_NO_MINT, ERROR_NO_METADATA, ERROR_INVALID_DATA].includes(msg))
2342
- return TokenCacheSchema3.parse({
2343
- id: tokenId,
2344
- isValid: false
2345
- });
2346
- log_default.warn("Failed to fetch sol-spl token data for %s", tokenId, { err });
2347
- }
2348
- return null;
2349
- };
2350
2390
 
2351
2391
  // src/modules/sol-spl/getMiniMetadata.ts
2352
2392
  var getMiniMetadata5 = () => {
@@ -2457,21 +2497,496 @@ var SolSplBalanceModule = {
2457
2497
  };
2458
2498
 
2459
2499
  // src/modules/sol-spl/types.ts
2460
- import { SolSplTokenSchema as SolSplTokenSchema3 } from "@talismn/chaindata-provider";
2500
+ import { SolSplTokenSchema as SolSplTokenSchema5 } from "@talismn/chaindata-provider";
2461
2501
  import z8 from "zod/v4";
2462
2502
  var SolSplTokenConfigSchema = z8.strictObject({
2463
- mintAddress: SolSplTokenSchema3.shape.mintAddress,
2503
+ mintAddress: SolSplTokenSchema5.shape.mintAddress,
2504
+ ...TokenConfigBaseSchema.shape
2505
+ });
2506
+
2507
+ // src/modules/sol-token2022/config.ts
2508
+ import { SolToken2022TokenSchema } from "@talismn/chaindata-provider";
2509
+ var MODULE_TYPE6 = SolToken2022TokenSchema.shape.type.value;
2510
+ var PLATFORM6 = SolToken2022TokenSchema.shape.platform.value;
2511
+
2512
+ // src/modules/sol-token2022/fetchBalances.ts
2513
+ import { PublicKey as PublicKey7 } from "@solana/web3.js";
2514
+ import {
2515
+ SolToken2022TokenSchema as SolToken2022TokenSchema3,
2516
+ solToken2022TokenId
2517
+ } from "@talismn/chaindata-provider";
2518
+ import { isNotNil as isNotNil3 } from "@talismn/util";
2519
+ import { keyBy as keyBy3, uniq as uniq3 } from "lodash-es";
2520
+
2521
+ // src/modules/sol-token2022/onChainTokenMetadata.ts
2522
+ import { deserializeMetadata as deserializeMetadata2 } from "@metaplex-foundation/mpl-token-metadata";
2523
+ import { publicKey as publicKey2, sol as sol2 } from "@metaplex-foundation/umi";
2524
+ import { MintLayout as MintLayout2 } from "@solana/spl-token";
2525
+ import { PublicKey as PublicKey6 } from "@solana/web3.js";
2526
+ import { parseSolToken2022TokenId, SolToken2022TokenSchema as SolToken2022TokenSchema2 } from "@talismn/chaindata-provider";
2527
+ import z9 from "zod/v4";
2528
+ var TokenCacheSchema4 = z9.discriminatedUnion("isValid", [
2529
+ z9.strictObject({
2530
+ id: SolToken2022TokenSchema2.shape.id,
2531
+ isValid: z9.literal(true),
2532
+ ...SolToken2022TokenSchema2.pick({ symbol: true, decimals: true, name: true, logo: true }).shape
2533
+ }),
2534
+ z9.strictObject({
2535
+ id: SolToken2022TokenSchema2.shape.id,
2536
+ isValid: z9.literal(false)
2537
+ })
2538
+ ]);
2539
+ var METAPLEX_PROGRAM_ID2 = new PublicKey6("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
2540
+ var ERROR_NO_MINT2 = "No mint info available";
2541
+ var ERROR_NO_METADATA2 = "No metadata account found";
2542
+ var ERROR_INVALID_DATA2 = "Invalid on-chain data";
2543
+ var fetchOnChainTokenData2 = async (connector, tokenId) => {
2544
+ try {
2545
+ const { networkId, mintAddress } = parseSolToken2022TokenId(tokenId);
2546
+ const connection = await connector.getConnection(networkId);
2547
+ if (!connection) {
2548
+ log_default.warn(`No connection found for network ${networkId}`);
2549
+ return null;
2550
+ }
2551
+ const mintPubKey = new PublicKey6(mintAddress);
2552
+ const mintInfo = await connection.getAccountInfo(mintPubKey);
2553
+ if (!mintInfo?.data) throw new Error(ERROR_NO_MINT2);
2554
+ const mint = MintLayout2.decode(mintInfo.data);
2555
+ const token2022Metadata = tryParseToken2022Metadata(mintInfo.data);
2556
+ if (token2022Metadata) {
2557
+ const parsed2 = TokenCacheSchema4.safeParse({
2558
+ id: tokenId,
2559
+ symbol: token2022Metadata.symbol.trim(),
2560
+ name: token2022Metadata.name.trim(),
2561
+ decimals: mint.decimals,
2562
+ isValid: true
2563
+ });
2564
+ if (parsed2.success) return parsed2.data;
2565
+ }
2566
+ const [metadataPDA] = PublicKey6.findProgramAddressSync(
2567
+ [Buffer.from("metadata"), METAPLEX_PROGRAM_ID2.toBuffer(), mintPubKey.toBuffer()],
2568
+ METAPLEX_PROGRAM_ID2
2569
+ );
2570
+ const metadataAccount = await connection.getAccountInfo(new PublicKey6(metadataPDA));
2571
+ if (!metadataAccount) throw new Error(ERROR_NO_METADATA2);
2572
+ const metadata = deserializeMetadata2({
2573
+ publicKey: publicKey2(metadataPDA),
2574
+ executable: metadataAccount.executable,
2575
+ owner: publicKey2(metadataAccount.owner),
2576
+ lamports: sol2(metadataAccount.lamports),
2577
+ data: metadataAccount.data
2578
+ });
2579
+ const parsed = TokenCacheSchema4.safeParse({
2580
+ id: tokenId,
2581
+ symbol: metadata.symbol.trim(),
2582
+ name: metadata.name.trim(),
2583
+ decimals: mint.decimals,
2584
+ isValid: true
2585
+ });
2586
+ if (!parsed.success) throw new Error(ERROR_INVALID_DATA2);
2587
+ return parsed.data;
2588
+ } catch (err) {
2589
+ const msg = err.message;
2590
+ if ([ERROR_NO_MINT2, ERROR_NO_METADATA2, ERROR_INVALID_DATA2].includes(msg))
2591
+ return TokenCacheSchema4.parse({
2592
+ id: tokenId,
2593
+ isValid: false
2594
+ });
2595
+ log_default.warn("Failed to fetch sol-token2022 token data for %s", tokenId, { err });
2596
+ }
2597
+ return null;
2598
+ };
2599
+ var tryParseToken2022Metadata = (data) => {
2600
+ try {
2601
+ const TLV_START = 166;
2602
+ if (data.length <= TLV_START) return null;
2603
+ let offset = TLV_START;
2604
+ while (offset + 4 <= data.length) {
2605
+ const extType = data.readUInt16LE(offset);
2606
+ const extLen = data.readUInt16LE(offset + 2);
2607
+ const extDataStart = offset + 4;
2608
+ if (extType === 19 && extDataStart + extLen <= data.length) {
2609
+ let pos = extDataStart;
2610
+ pos += 64;
2611
+ const readLenPrefixed = () => {
2612
+ if (pos + 4 > data.length) throw new Error("out of bounds");
2613
+ const len = data.readUInt32LE(pos);
2614
+ pos += 4;
2615
+ if (pos + len > data.length) throw new Error("out of bounds");
2616
+ const str = data.subarray(pos, pos + len).toString("utf8");
2617
+ pos += len;
2618
+ return str;
2619
+ };
2620
+ const name = readLenPrefixed();
2621
+ const symbol = readLenPrefixed();
2622
+ const uri = readLenPrefixed();
2623
+ if (name && symbol) return { name, symbol, uri };
2624
+ }
2625
+ offset = extDataStart + extLen;
2626
+ }
2627
+ } catch {
2628
+ }
2629
+ return null;
2630
+ };
2631
+
2632
+ // src/modules/sol-token2022/fetchBalances.ts
2633
+ var TOKEN_2022_PROGRAM_ID = "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb";
2634
+ var dynamicTokenMetadataCache2 = /* @__PURE__ */ new Map();
2635
+ var fetchBalances6 = async ({
2636
+ networkId,
2637
+ tokensWithAddresses,
2638
+ connector
2639
+ }) => {
2640
+ if (!tokensWithAddresses.length) return { success: [], errors: [] };
2641
+ const connection = await connector.getConnection(networkId);
2642
+ if (!connection) throw new Error(`Could not get connection for Solana network ${networkId}`);
2643
+ const accountAddresses = uniq3(tokensWithAddresses.flatMap(([, addresses]) => addresses));
2644
+ const knownTokenIds = new Set(tokensWithAddresses.map(([token]) => token.id));
2645
+ const unknownMints = /* @__PURE__ */ new Set();
2646
+ const balancesPerAddress = await Promise.all(
2647
+ accountAddresses.map(async (address) => {
2648
+ const tokenAccounts = await connection.getParsedTokenAccountsByOwner(new PublicKey7(address), {
2649
+ programId: new PublicKey7(TOKEN_2022_PROGRAM_ID)
2650
+ });
2651
+ const balances = tokenAccounts.value.map((d) => {
2652
+ try {
2653
+ const mintAddress = d.account.data.parsed.info.mint;
2654
+ const value = d.account.data.parsed.info.tokenAmount.amount ?? "0";
2655
+ const tokenId = solToken2022TokenId(networkId, mintAddress);
2656
+ if (!knownTokenIds.has(tokenId) && value !== "0") unknownMints.add(mintAddress);
2657
+ return {
2658
+ tokenId,
2659
+ networkId,
2660
+ address,
2661
+ source: MODULE_TYPE6,
2662
+ status: "live",
2663
+ value
2664
+ };
2665
+ } catch {
2666
+ log_default.warn("Failed to parse token amount", {
2667
+ address,
2668
+ d
2669
+ });
2670
+ return null;
2671
+ }
2672
+ }).filter(isNotNil3);
2673
+ setDetectedTokenIds(
2674
+ address,
2675
+ MODULE_TYPE6,
2676
+ balances.map((b) => b.tokenId)
2677
+ );
2678
+ return [address, balances];
2679
+ })
2680
+ );
2681
+ const dynamicTokens = [];
2682
+ if (unknownMints.size) {
2683
+ await Promise.all(
2684
+ Array.from(unknownMints).map(async (mintAddress) => {
2685
+ const tokenId = solToken2022TokenId(networkId, mintAddress);
2686
+ let cached = dynamicTokenMetadataCache2.get(tokenId);
2687
+ if (!cached) {
2688
+ const fetched = await fetchOnChainTokenData2(connector, tokenId);
2689
+ if (fetched) {
2690
+ dynamicTokenMetadataCache2.set(tokenId, fetched);
2691
+ cached = fetched;
2692
+ }
2693
+ }
2694
+ if (!cached || !cached.isValid) return;
2695
+ const token = {
2696
+ id: tokenId,
2697
+ type: MODULE_TYPE6,
2698
+ platform: PLATFORM6,
2699
+ networkId,
2700
+ mintAddress,
2701
+ isDefault: true,
2702
+ symbol: cached.symbol,
2703
+ decimals: cached.decimals,
2704
+ ...cached.name !== void 0 ? { name: cached.name } : {},
2705
+ ...cached.logo !== void 0 ? { logo: cached.logo } : {}
2706
+ };
2707
+ const parsed = SolToken2022TokenSchema3.safeParse(token);
2708
+ if (!parsed.success) {
2709
+ log_default.warn("Ignoring dynamic sol-token2022 token with invalid schema", { token });
2710
+ return;
2711
+ }
2712
+ dynamicTokens.push(parsed.data);
2713
+ })
2714
+ );
2715
+ }
2716
+ const registeredDynamicIds = new Set(dynamicTokens.map((t) => t.id));
2717
+ const allBalancesByKey = keyBy3(
2718
+ balancesPerAddress.flatMap(([, addressBalances]) => addressBalances),
2719
+ (b) => getBalanceKey2(b.tokenId, b.address)
2720
+ );
2721
+ const balanceDefs = getBalanceDefs(tokensWithAddresses);
2722
+ const success = balanceDefs.map((bd) => {
2723
+ const found = allBalancesByKey[getBalanceKey2(bd.token.id, bd.address)];
2724
+ return found ?? {
2725
+ tokenId: bd.token.id,
2726
+ networkId: bd.token.networkId,
2727
+ address: bd.address,
2728
+ source: MODULE_TYPE6,
2729
+ status: "live",
2730
+ value: "0"
2731
+ };
2732
+ });
2733
+ for (const balance of balancesPerAddress.flatMap(([, addressBalances]) => addressBalances)) {
2734
+ if (registeredDynamicIds.has(balance.tokenId)) success.push(balance);
2735
+ }
2736
+ return { success, errors: [], dynamicTokens };
2737
+ };
2738
+ var getBalanceKey2 = (tokenId, address) => `${tokenId}:${address}`;
2739
+
2740
+ // src/modules/sol-token2022/fetchTokens.ts
2741
+ import {
2742
+ SolToken2022TokenSchema as SolToken2022TokenSchema4,
2743
+ solToken2022TokenId as solToken2022TokenId2
2744
+ } from "@talismn/chaindata-provider";
2745
+ import { assign as assign6, omit as omit4 } from "lodash-es";
2746
+ var fetchTokens6 = async ({
2747
+ networkId,
2748
+ tokens,
2749
+ connector,
2750
+ cache
2751
+ }) => {
2752
+ const result = [];
2753
+ for (const tokenConfig of tokens) {
2754
+ const tokenId = solToken2022TokenId2(networkId, tokenConfig.mintAddress);
2755
+ let cached = cache[tokenId] && TokenCacheSchema4.safeParse(cache[tokenId]).data;
2756
+ if (!cached) {
2757
+ const tokenInfo = await fetchOnChainTokenData2(connector, tokenId);
2758
+ if (tokenInfo) cache[tokenId] = tokenInfo;
2759
+ }
2760
+ cached = cache[tokenId] && TokenCacheSchema4.safeParse(cache[tokenId]).data;
2761
+ if (cached?.isValid === false) continue;
2762
+ const base = {
2763
+ id: tokenId,
2764
+ type: MODULE_TYPE6,
2765
+ platform: PLATFORM6,
2766
+ networkId
2767
+ };
2768
+ const token = assign6(
2769
+ base,
2770
+ cached?.isValid ? omit4(cached, ["isValid"]) : {},
2771
+ tokenConfig
2772
+ );
2773
+ const parsed = SolToken2022TokenSchema4.safeParse(token);
2774
+ if (!parsed.success) {
2775
+ log_default.warn("Ignoring token with invalid SolToken2022TokenSchema", {
2776
+ token
2777
+ });
2778
+ continue;
2779
+ }
2780
+ result.push(parsed.data);
2781
+ }
2782
+ return result;
2783
+ };
2784
+
2785
+ // src/modules/sol-token2022/getMiniMetadata.ts
2786
+ var getMiniMetadata6 = () => {
2787
+ throw new Error("MiniMetadata is not supported for solana tokens");
2788
+ };
2789
+
2790
+ // src/modules/sol-token2022/getTransferCallData.ts
2791
+ import {
2792
+ calculateEpochFee,
2793
+ createAssociatedTokenAccountInstruction as createAssociatedTokenAccountInstruction2,
2794
+ createTransferCheckedInstruction,
2795
+ createTransferCheckedWithFeeAndTransferHookInstruction,
2796
+ createTransferCheckedWithFeeInstruction,
2797
+ createTransferCheckedWithTransferHookInstruction,
2798
+ getAccount as getAccount2,
2799
+ getAssociatedTokenAddress as getAssociatedTokenAddress2,
2800
+ getMint,
2801
+ getNonTransferable,
2802
+ getTransferFeeConfig,
2803
+ getTransferHook,
2804
+ TOKEN_2022_PROGRAM_ID as TOKEN_2022_PROGRAM_ID2
2805
+ } from "@solana/spl-token";
2806
+ import { PublicKey as PublicKey8 } from "@solana/web3.js";
2807
+ import { isTokenOfType as isTokenOfType6 } from "@talismn/chaindata-provider";
2808
+ var getTransferCallData6 = async ({ from: from2, to, value, token, connector }) => {
2809
+ if (!isTokenOfType6(token, MODULE_TYPE6))
2810
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE6}.`);
2811
+ const connection = await connector.getConnection(token.networkId);
2812
+ const mintPubkey = new PublicKey8(token.mintAddress);
2813
+ const fromWallet = new PublicKey8(from2);
2814
+ const toWallet = new PublicKey8(to);
2815
+ const mintAccount = await getMint(connection, mintPubkey, void 0, TOKEN_2022_PROGRAM_ID2);
2816
+ const nonTransferable = getNonTransferable(mintAccount);
2817
+ if (nonTransferable) throw new Error("This token is non-transferable.");
2818
+ const transferFeeConfig = getTransferFeeConfig(mintAccount);
2819
+ const transferHook = getTransferHook(mintAccount);
2820
+ const instructions = [];
2821
+ const fromTokenAccount = await getAssociatedTokenAddress2(
2822
+ mintPubkey,
2823
+ fromWallet,
2824
+ false,
2825
+ TOKEN_2022_PROGRAM_ID2
2826
+ );
2827
+ const toTokenAccount = await getAssociatedTokenAddress2(
2828
+ mintPubkey,
2829
+ toWallet,
2830
+ false,
2831
+ TOKEN_2022_PROGRAM_ID2
2832
+ );
2833
+ if (!await tokenAccountExists2(connection, toTokenAccount)) {
2834
+ instructions.push(
2835
+ createAssociatedTokenAccountInstruction2(
2836
+ fromWallet,
2837
+ toTokenAccount,
2838
+ toWallet,
2839
+ mintPubkey,
2840
+ TOKEN_2022_PROGRAM_ID2
2841
+ )
2842
+ );
2843
+ }
2844
+ const amount = BigInt(value);
2845
+ const transferFee = transferFeeConfig ? await calculateCurrentEpochTransferFee(connection, transferFeeConfig, amount) : 0n;
2846
+ if (transferFeeConfig && transferHook) {
2847
+ instructions.push(
2848
+ await createTransferCheckedWithFeeAndTransferHookInstruction(
2849
+ connection,
2850
+ fromTokenAccount,
2851
+ mintPubkey,
2852
+ toTokenAccount,
2853
+ fromWallet,
2854
+ amount,
2855
+ token.decimals,
2856
+ transferFee,
2857
+ [],
2858
+ void 0,
2859
+ TOKEN_2022_PROGRAM_ID2
2860
+ )
2861
+ );
2862
+ } else if (transferFeeConfig) {
2863
+ instructions.push(
2864
+ createTransferCheckedWithFeeInstruction(
2865
+ fromTokenAccount,
2866
+ mintPubkey,
2867
+ toTokenAccount,
2868
+ fromWallet,
2869
+ amount,
2870
+ token.decimals,
2871
+ transferFee,
2872
+ [],
2873
+ TOKEN_2022_PROGRAM_ID2
2874
+ )
2875
+ );
2876
+ } else if (transferHook) {
2877
+ instructions.push(
2878
+ await createTransferCheckedWithTransferHookInstruction(
2879
+ connection,
2880
+ fromTokenAccount,
2881
+ mintPubkey,
2882
+ toTokenAccount,
2883
+ fromWallet,
2884
+ amount,
2885
+ token.decimals,
2886
+ [],
2887
+ void 0,
2888
+ TOKEN_2022_PROGRAM_ID2
2889
+ )
2890
+ );
2891
+ } else {
2892
+ instructions.push(
2893
+ createTransferCheckedInstruction(
2894
+ fromTokenAccount,
2895
+ mintPubkey,
2896
+ toTokenAccount,
2897
+ fromWallet,
2898
+ amount,
2899
+ token.decimals,
2900
+ [],
2901
+ TOKEN_2022_PROGRAM_ID2
2902
+ )
2903
+ );
2904
+ }
2905
+ return instructions;
2906
+ };
2907
+ var tokenAccountExists2 = async (connection, address) => {
2908
+ try {
2909
+ await getAccount2(connection, address, void 0, TOKEN_2022_PROGRAM_ID2);
2910
+ return true;
2911
+ } catch {
2912
+ return false;
2913
+ }
2914
+ };
2915
+ var calculateToken2022TransferFee = (transferFeeConfig, epoch, amount) => {
2916
+ return calculateEpochFee(transferFeeConfig, epoch, amount);
2917
+ };
2918
+ var calculateCurrentEpochTransferFee = async (connection, transferFeeConfig, amount) => {
2919
+ const { epoch } = await connection.getEpochInfo();
2920
+ return calculateToken2022TransferFee(transferFeeConfig, BigInt(epoch), amount);
2921
+ };
2922
+
2923
+ // src/modules/sol-token2022/subscribeBalances.ts
2924
+ import { isEqual as isEqual7 } from "lodash-es";
2925
+ import { distinctUntilChanged as distinctUntilChanged7, Observable as Observable7, of as of7 } from "rxjs";
2926
+ var SUBSCRIPTION_INTERVAL6 = 6e3;
2927
+ var subscribeBalances6 = ({
2928
+ networkId,
2929
+ tokensWithAddresses,
2930
+ connector
2931
+ }) => {
2932
+ if (!tokensWithAddresses.length) return of7({ success: [], errors: [] });
2933
+ return new Observable7((subscriber) => {
2934
+ const abortController = new AbortController();
2935
+ const poll = async () => {
2936
+ try {
2937
+ if (abortController.signal.aborted) return;
2938
+ const balances = await fetchBalances6({
2939
+ networkId,
2940
+ tokensWithAddresses,
2941
+ connector
2942
+ });
2943
+ if (abortController.signal.aborted) return;
2944
+ subscriber.next(balances);
2945
+ setTimeout(poll, SUBSCRIPTION_INTERVAL6);
2946
+ } catch (error) {
2947
+ log_default.error("Error", {
2948
+ module: MODULE_TYPE6,
2949
+ networkId,
2950
+ addressesByToken: tokensWithAddresses,
2951
+ error
2952
+ });
2953
+ subscriber.error(error);
2954
+ }
2955
+ };
2956
+ poll();
2957
+ return () => {
2958
+ abortController.abort();
2959
+ };
2960
+ }).pipe(distinctUntilChanged7(isEqual7));
2961
+ };
2962
+
2963
+ // src/modules/sol-token2022/module.ts
2964
+ var SolToken2022BalanceModule = {
2965
+ type: MODULE_TYPE6,
2966
+ platform: PLATFORM6,
2967
+ getMiniMetadata: getMiniMetadata6,
2968
+ fetchTokens: fetchTokens6,
2969
+ fetchBalances: fetchBalances6,
2970
+ subscribeBalances: subscribeBalances6,
2971
+ getTransferCallData: getTransferCallData6
2972
+ };
2973
+
2974
+ // src/modules/sol-token2022/types.ts
2975
+ import { SolToken2022TokenSchema as SolToken2022TokenSchema5 } from "@talismn/chaindata-provider";
2976
+ import z10 from "zod/v4";
2977
+ var SolToken2022TokenConfigSchema = z10.strictObject({
2978
+ mintAddress: SolToken2022TokenSchema5.shape.mintAddress,
2464
2979
  ...TokenConfigBaseSchema.shape
2465
2980
  });
2466
2981
 
2467
2982
  // src/modules/substrate-assets/config.ts
2468
2983
  import { SubAssetsTokenSchema } from "@talismn/chaindata-provider";
2469
- var MODULE_TYPE6 = SubAssetsTokenSchema.shape.type.value;
2470
- var PLATFORM6 = SubAssetsTokenSchema.shape.platform.value;
2984
+ var MODULE_TYPE7 = SubAssetsTokenSchema.shape.type.value;
2985
+ var PLATFORM7 = SubAssetsTokenSchema.shape.platform.value;
2471
2986
 
2472
2987
  // src/modules/substrate-assets/buildQueries.ts
2473
2988
  import { decodeScale } from "@talismn/scale";
2474
- import { isNotNil as isNotNil3 } from "@talismn/util";
2989
+ import { isNotNil as isNotNil4 } from "@talismn/util";
2475
2990
  var buildQueries = (networkId, balanceDefs, miniMetadata) => {
2476
2991
  const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
2477
2992
  storage: ["Assets", "Account"]
@@ -2520,7 +3035,7 @@ var buildQueries = (networkId, balanceDefs, miniMetadata) => {
2520
3035
  stateKeys: [stateKey],
2521
3036
  decodeResult
2522
3037
  };
2523
- }).filter(isNotNil3);
3038
+ }).filter(isNotNil4);
2524
3039
  };
2525
3040
  var tryEncode = (scaleCoder, ...args) => {
2526
3041
  try {
@@ -2531,7 +3046,7 @@ var tryEncode = (scaleCoder, ...args) => {
2531
3046
  };
2532
3047
 
2533
3048
  // src/modules/substrate-assets/fetchBalances.ts
2534
- var fetchBalances6 = async ({
3049
+ var fetchBalances7 = async ({
2535
3050
  networkId,
2536
3051
  tokensWithAddresses,
2537
3052
  connector,
@@ -2540,7 +3055,7 @@ var fetchBalances6 = async ({
2540
3055
  if (!tokensWithAddresses.length) return { success: [], errors: [] };
2541
3056
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
2542
3057
  if (!miniMetadata?.data) {
2543
- log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE6} balances on ${networkId}.`);
3058
+ log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE7} balances on ${networkId}.`);
2544
3059
  return {
2545
3060
  success: [],
2546
3061
  errors: balanceDefs.map((def) => ({
@@ -2550,20 +3065,20 @@ var fetchBalances6 = async ({
2550
3065
  }))
2551
3066
  };
2552
3067
  }
2553
- if (miniMetadata.source !== MODULE_TYPE6) {
2554
- log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE6}.`);
3068
+ if (miniMetadata.source !== MODULE_TYPE7) {
3069
+ log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE7}.`);
2555
3070
  return {
2556
3071
  success: [],
2557
3072
  errors: balanceDefs.map((def) => ({
2558
3073
  tokenId: def.token.id,
2559
3074
  address: def.address,
2560
- error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE6}`)
3075
+ error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE7}`)
2561
3076
  }))
2562
3077
  };
2563
3078
  }
2564
3079
  if (miniMetadata.chainId !== networkId) {
2565
3080
  log_default.warn(
2566
- `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE6}. Expected chainId is ${networkId}`
3081
+ `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE7}. Expected chainId is ${networkId}`
2567
3082
  );
2568
3083
  return {
2569
3084
  success: [],
@@ -2587,7 +3102,7 @@ var fetchBalances6 = async ({
2587
3102
  address: def.address,
2588
3103
  networkId,
2589
3104
  tokenId: def.token.id,
2590
- source: MODULE_TYPE6,
3105
+ source: MODULE_TYPE7,
2591
3106
  status: "live",
2592
3107
  values: [
2593
3108
  { type: "free", label: "free", amount: "0" },
@@ -2606,8 +3121,8 @@ import {
2606
3121
  subAssetTokenId
2607
3122
  } from "@talismn/chaindata-provider";
2608
3123
  import { getStorageKeyPrefix, parseMetadataRpc as parseMetadataRpc3 } from "@talismn/scale";
2609
- import { assign as assign6, keyBy as keyBy3, keys } from "lodash-es";
2610
- var fetchTokens6 = async ({
3124
+ import { assign as assign7, keyBy as keyBy4, keys } from "lodash-es";
3125
+ var fetchTokens7 = async ({
2611
3126
  networkId,
2612
3127
  tokens,
2613
3128
  connector,
@@ -2632,7 +3147,7 @@ var fetchTokens6 = async ({
2632
3147
  ]);
2633
3148
  const assetStorageEntries = assetStorageResults.length ? assetStorageResults[0].changes : [];
2634
3149
  const metadataStorageEntries = metadataStorageResults.length ? metadataStorageResults[0].changes : [];
2635
- const assetByAssetId = keyBy3(
3150
+ const assetByAssetId = keyBy4(
2636
3151
  assetStorageEntries.map(([key, value]) => {
2637
3152
  const [assetId] = assetCodec.keys.dec(key);
2638
3153
  const asset = assetCodec.value.dec(value);
@@ -2640,7 +3155,7 @@ var fetchTokens6 = async ({
2640
3155
  }),
2641
3156
  (a) => a.assetId
2642
3157
  );
2643
- const metadataByAssetId = keyBy3(
3158
+ const metadataByAssetId = keyBy4(
2644
3159
  metadataStorageEntries.map(([key, value]) => {
2645
3160
  const [assetId] = metadataCodec.keys.dec(key);
2646
3161
  const metadata = metadataCodec.value.dec(value);
@@ -2655,13 +3170,13 @@ var fetchTokens6 = async ({
2655
3170
  (a) => a.assetId
2656
3171
  );
2657
3172
  const allTokens = keys(assetByAssetId).map(
2658
- (assetId) => assign6({}, assetByAssetId[assetId], metadataByAssetId[assetId] ?? void 0)
3173
+ (assetId) => assign7({}, assetByAssetId[assetId], metadataByAssetId[assetId] ?? void 0)
2659
3174
  );
2660
- const configTokenByAssetId = keyBy3(tokens, (t) => t.assetId);
3175
+ const configTokenByAssetId = keyBy4(tokens, (t) => t.assetId);
2661
3176
  return allTokens.map(
2662
3177
  (asset) => ({
2663
3178
  id: subAssetTokenId(networkId, String(asset.assetId)),
2664
- type: MODULE_TYPE6,
3179
+ type: MODULE_TYPE7,
2665
3180
  platform: "polkadot",
2666
3181
  networkId,
2667
3182
  assetId: String(asset.assetId),
@@ -2678,7 +3193,7 @@ var fetchTokens6 = async ({
2678
3193
  return configToken || token.isSufficient;
2679
3194
  }).map((token) => {
2680
3195
  const configToken = configTokenByAssetId[token.assetId];
2681
- return configToken ? assign6({}, token, configToken) : token;
3196
+ return configToken ? assign7({}, token, configToken) : token;
2682
3197
  }).filter((t) => {
2683
3198
  const parsed = SubAssetsTokenSchema2.safeParse(t);
2684
3199
  return parsed.success;
@@ -2754,8 +3269,8 @@ var getDTaoTokenRates = (token, tokenRates, scaledAlphaPrice) => {
2754
3269
 
2755
3270
  // src/modules/substrate-dtao/config.ts
2756
3271
  import { SubDTaoTokenSchema } from "@talismn/chaindata-provider";
2757
- var MODULE_TYPE7 = SubDTaoTokenSchema.shape.type.value;
2758
- var PLATFORM7 = SubDTaoTokenSchema.shape.platform.value;
3272
+ var MODULE_TYPE8 = SubDTaoTokenSchema.shape.type.value;
3273
+ var PLATFORM8 = SubDTaoTokenSchema.shape.platform.value;
2759
3274
 
2760
3275
  // src/modules/substrate-dtao/fetchBalances.ts
2761
3276
  import {
@@ -2764,8 +3279,8 @@ import {
2764
3279
  TokenSchema
2765
3280
  } from "@talismn/chaindata-provider";
2766
3281
  import { decodeScale as decodeScale2, parseMetadataRpc as parseMetadataRpc4 } from "@talismn/scale";
2767
- import { isNotNil as isNotNil4 } from "@talismn/util";
2768
- import { keyBy as keyBy4, uniq as uniq3 } from "lodash-es";
3282
+ import { isNotNil as isNotNil5 } from "@talismn/util";
3283
+ import { keyBy as keyBy5, uniq as uniq4 } from "lodash-es";
2769
3284
 
2770
3285
  // src/modules/substrate-dtao/calculatePendingRootClaimable.ts
2771
3286
  import { subDTaoTokenId } from "@talismn/chaindata-provider";
@@ -2804,7 +3319,7 @@ var calculatePendingRootClaimable = ({
2804
3319
 
2805
3320
  // src/modules/substrate-dtao/fetchBalances.ts
2806
3321
  var ROOT_NETUID = 0;
2807
- var fetchBalances7 = async ({
3322
+ var fetchBalances8 = async ({
2808
3323
  networkId,
2809
3324
  tokensWithAddresses,
2810
3325
  connector,
@@ -2813,7 +3328,7 @@ var fetchBalances7 = async ({
2813
3328
  if (!tokensWithAddresses.length) return { success: [], errors: [] };
2814
3329
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
2815
3330
  if (!miniMetadata?.data) {
2816
- log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE7} balances on ${networkId}.`, {
3331
+ log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE8} balances on ${networkId}.`, {
2817
3332
  tokensWithAddresses
2818
3333
  });
2819
3334
  return {
@@ -2825,20 +3340,20 @@ var fetchBalances7 = async ({
2825
3340
  }))
2826
3341
  };
2827
3342
  }
2828
- if (miniMetadata.source !== MODULE_TYPE7) {
2829
- log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE7}.`);
3343
+ if (miniMetadata.source !== MODULE_TYPE8) {
3344
+ log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE8}.`);
2830
3345
  return {
2831
3346
  success: [],
2832
3347
  errors: balanceDefs.map((def) => ({
2833
3348
  tokenId: def.token.id,
2834
3349
  address: def.address,
2835
- error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE7}`)
3350
+ error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE8}`)
2836
3351
  }))
2837
3352
  };
2838
3353
  }
2839
3354
  if (miniMetadata.chainId !== networkId) {
2840
3355
  log_default.warn(
2841
- `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE7}. Expected chainId is ${networkId}`
3356
+ `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE8}. Expected chainId is ${networkId}`
2842
3357
  );
2843
3358
  return {
2844
3359
  success: [],
@@ -2849,7 +3364,7 @@ var fetchBalances7 = async ({
2849
3364
  }))
2850
3365
  };
2851
3366
  }
2852
- const addresses = uniq3(balanceDefs.map((def) => def.address));
3367
+ const addresses = uniq4(balanceDefs.map((def) => def.address));
2853
3368
  try {
2854
3369
  const [stakeInfos, dynamicInfos] = await Promise.all([
2855
3370
  fetchRuntimeCallResult(
@@ -2869,7 +3384,7 @@ var fetchBalances7 = async ({
2869
3384
  []
2870
3385
  )
2871
3386
  ]);
2872
- const rootHotkeys = uniq3(
3387
+ const rootHotkeys = uniq4(
2873
3388
  stakeInfos.flatMap(
2874
3389
  ([, stakes]) => stakes.filter((stake) => stake.netuid === ROOT_NETUID).map((stake) => stake.hotkey)
2875
3390
  )
@@ -2894,7 +3409,7 @@ var fetchBalances7 = async ({
2894
3409
  miniMetadata.data,
2895
3410
  addressHotkeyNetuidPairs
2896
3411
  ) : /* @__PURE__ */ new Map();
2897
- const dynamicInfoByNetuid = keyBy4(dynamicInfos.filter(isNotNil4), (info) => info.netuid);
3412
+ const dynamicInfoByNetuid = keyBy5(dynamicInfos.filter(isNotNil5), (info) => info.netuid);
2898
3413
  const upsertBalance = (acc, address, tokenId, balance) => {
2899
3414
  const key = `${address}:${tokenId}`;
2900
3415
  const recordedBalance = acc[key];
@@ -2948,7 +3463,7 @@ var fetchBalances7 = async ({
2948
3463
  {}
2949
3464
  );
2950
3465
  const balances = Object.values(balancesRaw);
2951
- const tokensById = keyBy4(
3466
+ const tokensById = keyBy5(
2952
3467
  tokensWithAddresses.map(([token]) => token),
2953
3468
  (t) => t.id
2954
3469
  );
@@ -3002,7 +3517,7 @@ var fetchBalances7 = async ({
3002
3517
  address: def.address,
3003
3518
  networkId,
3004
3519
  tokenId: def.token.id,
3005
- source: MODULE_TYPE7,
3520
+ source: MODULE_TYPE8,
3006
3521
  status: "live",
3007
3522
  values: values3
3008
3523
  };
@@ -3174,13 +3689,13 @@ import {
3174
3689
  subDTaoTokenId as subDTaoTokenId3
3175
3690
  } from "@talismn/chaindata-provider";
3176
3691
  import { getStorageKeyPrefix as getStorageKeyPrefix2, parseMetadataRpc as parseMetadataRpc5 } from "@talismn/scale";
3177
- import { isNotNil as isNotNil5 } from "@talismn/util";
3692
+ import { isNotNil as isNotNil6 } from "@talismn/util";
3178
3693
  import { fromPairs } from "lodash-es";
3179
3694
  var NATIVE_TOKEN_SYMBOLS = {
3180
3695
  "bittensor": "TAO",
3181
3696
  "bittensor-testnet": "testTAO"
3182
3697
  };
3183
- var fetchTokens7 = async ({
3698
+ var fetchTokens8 = async ({
3184
3699
  networkId,
3185
3700
  connector,
3186
3701
  tokens,
@@ -3199,7 +3714,7 @@ var fetchTokens7 = async ({
3199
3714
  []
3200
3715
  )
3201
3716
  ]);
3202
- return dynamicInfos.filter(isNotNil5).map((info) => {
3717
+ return dynamicInfos.filter(isNotNil6).map((info) => {
3203
3718
  const config = tokens.find((t) => t.netuid === info.netuid);
3204
3719
  let symbol = new TextDecoder().decode(Uint8Array.from(info.token_symbol));
3205
3720
  const subnetName = info.subnet_identity?.subnet_name?.asText() ?? (info.netuid === 0 ? "Root" : `Subnet ${info.netuid}`);
@@ -3209,8 +3724,8 @@ var fetchTokens7 = async ({
3209
3724
  const isTransferable = transferableTokensMap[info.netuid] ?? true;
3210
3725
  const token = {
3211
3726
  id: subDTaoTokenId3(networkId, info.netuid),
3212
- type: MODULE_TYPE7,
3213
- platform: PLATFORM7,
3727
+ type: MODULE_TYPE8,
3728
+ platform: PLATFORM8,
3214
3729
  networkId,
3215
3730
  netuid: info.netuid,
3216
3731
  isDefault: true,
@@ -3250,12 +3765,12 @@ var fetchTransferableTokensMap = async (connector, metadata, networkId) => {
3250
3765
  // src/modules/substrate-dtao/getMiniMetadata.ts
3251
3766
  import { MINIMETADATA_VERSION } from "@talismn/chaindata-provider";
3252
3767
  import { compactMetadata, encodeMetadata, parseMetadataRpc as parseMetadataRpc6 } from "@talismn/scale";
3253
- var getMiniMetadata6 = ({
3768
+ var getMiniMetadata7 = ({
3254
3769
  networkId,
3255
3770
  specVersion,
3256
3771
  metadataRpc
3257
3772
  }) => {
3258
- const source = MODULE_TYPE7;
3773
+ const source = MODULE_TYPE8;
3259
3774
  const chainId = networkId;
3260
3775
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
3261
3776
  if (specVersion !== systemVersion.spec_version)
@@ -3301,18 +3816,18 @@ var getData = (metadataRpc) => {
3301
3816
 
3302
3817
  // src/modules/substrate-dtao/getTransferCallData.ts
3303
3818
  import { mergeUint8 } from "@polkadot-api/utils";
3304
- import { isTokenOfType as isTokenOfType6, parseSubDTaoTokenId } from "@talismn/chaindata-provider";
3819
+ import { isTokenOfType as isTokenOfType7, parseSubDTaoTokenId } from "@talismn/chaindata-provider";
3305
3820
  import { parseMetadataRpc as parseMetadataRpc7 } from "@talismn/scale";
3306
3821
  import { Binary } from "polkadot-api";
3307
- var getTransferCallData6 = ({
3822
+ var getTransferCallData7 = ({
3308
3823
  from: from2,
3309
3824
  to,
3310
3825
  value,
3311
3826
  token,
3312
3827
  metadataRpc
3313
3828
  }) => {
3314
- if (!isTokenOfType6(token, MODULE_TYPE7))
3315
- throw new Error(`Token type ${token.type} is not ${MODULE_TYPE7}.`);
3829
+ if (!isTokenOfType7(token, MODULE_TYPE8))
3830
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE8}.`);
3316
3831
  const { netuid: subnetId, hotkey } = parseSubDTaoTokenId(token.id);
3317
3832
  if (!hotkey) throw new Error(`Missing hotkey`);
3318
3833
  const { builder } = parseMetadataRpc7(metadataRpc);
@@ -3332,22 +3847,22 @@ var getTransferCallData6 = ({
3332
3847
  };
3333
3848
 
3334
3849
  // src/modules/substrate-dtao/subscribeBalances.ts
3335
- import { isEqual as isEqual7 } from "lodash-es";
3336
- import { distinctUntilChanged as distinctUntilChanged7, Observable as Observable7, of as of7 } from "rxjs";
3337
- var SUBSCRIPTION_INTERVAL6 = 6e3;
3338
- var subscribeBalances6 = ({
3850
+ import { isEqual as isEqual8 } from "lodash-es";
3851
+ import { distinctUntilChanged as distinctUntilChanged8, Observable as Observable8, of as of8 } from "rxjs";
3852
+ var SUBSCRIPTION_INTERVAL7 = 6e3;
3853
+ var subscribeBalances7 = ({
3339
3854
  networkId,
3340
3855
  tokensWithAddresses,
3341
3856
  connector,
3342
3857
  miniMetadata
3343
3858
  }) => {
3344
- if (!tokensWithAddresses.length) return of7({ success: [], errors: [] });
3345
- return new Observable7((subscriber) => {
3859
+ if (!tokensWithAddresses.length) return of8({ success: [], errors: [] });
3860
+ return new Observable8((subscriber) => {
3346
3861
  const abortController = new AbortController();
3347
3862
  const poll = async () => {
3348
3863
  try {
3349
3864
  if (abortController.signal.aborted) return;
3350
- const balances = await fetchBalances7({
3865
+ const balances = await fetchBalances8({
3351
3866
  networkId,
3352
3867
  tokensWithAddresses,
3353
3868
  connector,
@@ -3355,10 +3870,10 @@ var subscribeBalances6 = ({
3355
3870
  });
3356
3871
  if (abortController.signal.aborted) return;
3357
3872
  subscriber.next(balances);
3358
- setTimeout(poll, SUBSCRIPTION_INTERVAL6);
3873
+ setTimeout(poll, SUBSCRIPTION_INTERVAL7);
3359
3874
  } catch (error) {
3360
3875
  log_default.error("Error", {
3361
- module: MODULE_TYPE7,
3876
+ module: MODULE_TYPE8,
3362
3877
  networkId,
3363
3878
  miniMetadata,
3364
3879
  addressesByToken: tokensWithAddresses,
@@ -3371,24 +3886,24 @@ var subscribeBalances6 = ({
3371
3886
  return () => {
3372
3887
  abortController.abort();
3373
3888
  };
3374
- }).pipe(distinctUntilChanged7(isEqual7));
3889
+ }).pipe(distinctUntilChanged8(isEqual8));
3375
3890
  };
3376
3891
 
3377
3892
  // src/modules/substrate-dtao/module.ts
3378
3893
  var SubDTaoBalanceModule = {
3379
- type: MODULE_TYPE7,
3380
- platform: PLATFORM7,
3381
- getMiniMetadata: getMiniMetadata6,
3382
- fetchTokens: fetchTokens7,
3383
- fetchBalances: fetchBalances7,
3384
- subscribeBalances: subscribeBalances6,
3385
- getTransferCallData: getTransferCallData6
3894
+ type: MODULE_TYPE8,
3895
+ platform: PLATFORM8,
3896
+ getMiniMetadata: getMiniMetadata7,
3897
+ fetchTokens: fetchTokens8,
3898
+ fetchBalances: fetchBalances8,
3899
+ subscribeBalances: subscribeBalances7,
3900
+ getTransferCallData: getTransferCallData7
3386
3901
  };
3387
3902
 
3388
3903
  // src/modules/substrate-dtao/types.ts
3389
3904
  import { SubDTaoTokenSchema as SubDTaoTokenSchema3 } from "@talismn/chaindata-provider";
3390
- import z9 from "zod/v4";
3391
- var SubDTaoTokenConfigSchema = z9.strictObject({
3905
+ import z11 from "zod/v4";
3906
+ var SubDTaoTokenConfigSchema = z11.strictObject({
3392
3907
  netuid: SubDTaoTokenSchema3.shape.netuid,
3393
3908
  ...TokenConfigBaseSchema.shape
3394
3909
  });
@@ -4056,12 +4571,12 @@ var deriveMiniMetadataId = ({
4056
4571
  ).slice(-32);
4057
4572
 
4058
4573
  // src/modules/substrate-assets/getMiniMetadata.ts
4059
- var getMiniMetadata7 = ({
4574
+ var getMiniMetadata8 = ({
4060
4575
  networkId,
4061
4576
  specVersion,
4062
4577
  metadataRpc
4063
4578
  }) => {
4064
- const source = MODULE_TYPE6;
4579
+ const source = MODULE_TYPE7;
4065
4580
  const chainId = networkId;
4066
4581
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
4067
4582
  if (specVersion !== systemVersion.spec_version)
@@ -4093,10 +4608,10 @@ var getData2 = (metadataRpc) => {
4093
4608
 
4094
4609
  // src/modules/substrate-assets/getTransferCallData.ts
4095
4610
  import { mergeUint8 as mergeUint82 } from "@polkadot-api/utils";
4096
- import { isTokenOfType as isTokenOfType7 } from "@talismn/chaindata-provider";
4611
+ import { isTokenOfType as isTokenOfType8 } from "@talismn/chaindata-provider";
4097
4612
  import { parseMetadataRpc as parseMetadataRpc9 } from "@talismn/scale";
4098
4613
  import { Binary as Binary2, Enum } from "polkadot-api";
4099
- var getTransferCallData7 = ({
4614
+ var getTransferCallData8 = ({
4100
4615
  from: from2,
4101
4616
  to,
4102
4617
  value,
@@ -4104,8 +4619,8 @@ var getTransferCallData7 = ({
4104
4619
  type,
4105
4620
  metadataRpc
4106
4621
  }) => {
4107
- if (!isTokenOfType7(token, MODULE_TYPE6))
4108
- throw new Error(`Token type ${token.type} is not ${MODULE_TYPE6}.`);
4622
+ if (!isTokenOfType8(token, MODULE_TYPE7))
4623
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE7}.`);
4109
4624
  const { builder } = parseMetadataRpc9(metadataRpc);
4110
4625
  const method = getTransferMethod(type);
4111
4626
  const { codec, location } = builder.buildCall("Assets", method);
@@ -4194,14 +4709,14 @@ var getTransferAllEncodedArgs = (assetId, to, codec) => {
4194
4709
  };
4195
4710
 
4196
4711
  // src/modules/substrate-assets/subscribeBalances.ts
4197
- import { map as map2, of as of8 } from "rxjs";
4198
- var subscribeBalances7 = ({
4712
+ import { map as map2, of as of9 } from "rxjs";
4713
+ var subscribeBalances8 = ({
4199
4714
  networkId,
4200
4715
  tokensWithAddresses,
4201
4716
  connector,
4202
4717
  miniMetadata
4203
4718
  }) => {
4204
- if (!tokensWithAddresses.length) return of8({ success: [], errors: [] });
4719
+ if (!tokensWithAddresses.length) return of9({ success: [], errors: [] });
4205
4720
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
4206
4721
  const queries = buildQueries(networkId, balanceDefs, miniMetadata);
4207
4722
  return getRpcQueryPack$(connector, networkId, queries).pipe(
@@ -4214,31 +4729,31 @@ var subscribeBalances7 = ({
4214
4729
 
4215
4730
  // src/modules/substrate-assets/module.ts
4216
4731
  var SubAssetsBalanceModule = {
4217
- type: MODULE_TYPE6,
4218
- platform: PLATFORM6,
4219
- getMiniMetadata: getMiniMetadata7,
4220
- fetchTokens: fetchTokens6,
4221
- fetchBalances: fetchBalances6,
4222
- subscribeBalances: subscribeBalances7,
4223
- getTransferCallData: getTransferCallData7
4732
+ type: MODULE_TYPE7,
4733
+ platform: PLATFORM7,
4734
+ getMiniMetadata: getMiniMetadata8,
4735
+ fetchTokens: fetchTokens7,
4736
+ fetchBalances: fetchBalances7,
4737
+ subscribeBalances: subscribeBalances8,
4738
+ getTransferCallData: getTransferCallData8
4224
4739
  };
4225
4740
 
4226
4741
  // src/modules/substrate-assets/types.ts
4227
4742
  import { SubAssetsTokenSchema as SubAssetsTokenSchema3 } from "@talismn/chaindata-provider";
4228
- import z10 from "zod/v4";
4229
- var SubAssetsTokenConfigSchema = z10.strictObject({
4743
+ import z12 from "zod/v4";
4744
+ var SubAssetsTokenConfigSchema = z12.strictObject({
4230
4745
  assetId: SubAssetsTokenSchema3.shape.assetId,
4231
4746
  ...TokenConfigBaseSchema.shape
4232
4747
  });
4233
4748
 
4234
4749
  // src/modules/substrate-foreignassets/config.ts
4235
4750
  import { SubForeignAssetsTokenSchema } from "@talismn/chaindata-provider";
4236
- var MODULE_TYPE8 = SubForeignAssetsTokenSchema.shape.type.value;
4237
- var PLATFORM8 = SubForeignAssetsTokenSchema.shape.platform.value;
4751
+ var MODULE_TYPE9 = SubForeignAssetsTokenSchema.shape.type.value;
4752
+ var PLATFORM9 = SubForeignAssetsTokenSchema.shape.platform.value;
4238
4753
 
4239
4754
  // src/modules/substrate-foreignassets/buildQueries.ts
4240
4755
  import { decodeScale as decodeScale3, papiParse } from "@talismn/scale";
4241
- import { isNotNil as isNotNil6 } from "@talismn/util";
4756
+ import { isNotNil as isNotNil7 } from "@talismn/util";
4242
4757
  var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
4243
4758
  const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
4244
4759
  storage: ["ForeignAssets", "Account"]
@@ -4293,11 +4808,11 @@ var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
4293
4808
  stateKeys: [stateKey],
4294
4809
  decodeResult
4295
4810
  };
4296
- }).filter(isNotNil6);
4811
+ }).filter(isNotNil7);
4297
4812
  };
4298
4813
 
4299
4814
  // src/modules/substrate-foreignassets/fetchBalances.ts
4300
- var fetchBalances8 = async ({
4815
+ var fetchBalances9 = async ({
4301
4816
  networkId,
4302
4817
  tokensWithAddresses,
4303
4818
  connector,
@@ -4306,7 +4821,7 @@ var fetchBalances8 = async ({
4306
4821
  if (!tokensWithAddresses.length) return { success: [], errors: [] };
4307
4822
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
4308
4823
  if (!miniMetadata?.data) {
4309
- log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE8} balances on ${networkId}.`);
4824
+ log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE9} balances on ${networkId}.`);
4310
4825
  return {
4311
4826
  success: [],
4312
4827
  errors: balanceDefs.map((def) => ({
@@ -4316,20 +4831,20 @@ var fetchBalances8 = async ({
4316
4831
  }))
4317
4832
  };
4318
4833
  }
4319
- if (miniMetadata.source !== MODULE_TYPE8) {
4320
- log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE8}.`);
4834
+ if (miniMetadata.source !== MODULE_TYPE9) {
4835
+ log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE9}.`);
4321
4836
  return {
4322
4837
  success: [],
4323
4838
  errors: balanceDefs.map((def) => ({
4324
4839
  tokenId: def.token.id,
4325
4840
  address: def.address,
4326
- error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE8}`)
4841
+ error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE9}`)
4327
4842
  }))
4328
4843
  };
4329
4844
  }
4330
4845
  if (miniMetadata.chainId !== networkId) {
4331
4846
  log_default.warn(
4332
- `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE8}. Expected chainId is ${networkId}`
4847
+ `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE9}. Expected chainId is ${networkId}`
4333
4848
  );
4334
4849
  return {
4335
4850
  success: [],
@@ -4353,7 +4868,7 @@ var fetchBalances8 = async ({
4353
4868
  address: def.address,
4354
4869
  networkId,
4355
4870
  tokenId: def.token.id,
4356
- source: MODULE_TYPE8,
4871
+ source: MODULE_TYPE9,
4357
4872
  status: "live",
4358
4873
  values: [
4359
4874
  { type: "free", label: "free", amount: "0" },
@@ -4372,8 +4887,8 @@ import {
4372
4887
  subForeignAssetTokenId
4373
4888
  } from "@talismn/chaindata-provider";
4374
4889
  import { getStorageKeyPrefix as getStorageKeyPrefix3, papiStringify, parseMetadataRpc as parseMetadataRpc10 } from "@talismn/scale";
4375
- import { assign as assign7, keyBy as keyBy5, keys as keys2 } from "lodash-es";
4376
- var fetchTokens8 = async ({
4890
+ import { assign as assign8, keyBy as keyBy6, keys as keys2 } from "lodash-es";
4891
+ var fetchTokens9 = async ({
4377
4892
  networkId,
4378
4893
  tokens,
4379
4894
  connector,
@@ -4398,7 +4913,7 @@ var fetchTokens8 = async ({
4398
4913
  ]);
4399
4914
  const assetStorageEntries = assetStorageResults[0]?.changes ?? [];
4400
4915
  const metadataStorageEntries = metadataStorageResults[0]?.changes ?? [];
4401
- const assetByOnChainId = keyBy5(
4916
+ const assetByOnChainId = keyBy6(
4402
4917
  assetStorageEntries.map(([key, value]) => {
4403
4918
  const [decodedKey] = assetCodec.keys.dec(key);
4404
4919
  const onChainId = papiStringify(decodedKey);
@@ -4407,7 +4922,7 @@ var fetchTokens8 = async ({
4407
4922
  }),
4408
4923
  (a) => a.onChainId
4409
4924
  );
4410
- const metadataByOnChainId = keyBy5(
4925
+ const metadataByOnChainId = keyBy6(
4411
4926
  metadataStorageEntries.map(([key, value]) => {
4412
4927
  const [decodedKey] = metadataCodec.keys.dec(key);
4413
4928
  const onChainId = papiStringify(decodedKey);
@@ -4423,13 +4938,13 @@ var fetchTokens8 = async ({
4423
4938
  (a) => a.onChainId
4424
4939
  );
4425
4940
  const allTokens = keys2(assetByOnChainId).map(
4426
- (onChainId) => assign7({}, assetByOnChainId[onChainId], metadataByOnChainId[onChainId] ?? void 0)
4941
+ (onChainId) => assign8({}, assetByOnChainId[onChainId], metadataByOnChainId[onChainId] ?? void 0)
4427
4942
  );
4428
- const configTokenByOnChainId = keyBy5(tokens, (t) => t.onChainId);
4943
+ const configTokenByOnChainId = keyBy6(tokens, (t) => t.onChainId);
4429
4944
  return allTokens.map(
4430
4945
  (asset) => ({
4431
4946
  id: subForeignAssetTokenId(networkId, asset.onChainId),
4432
- type: MODULE_TYPE8,
4947
+ type: MODULE_TYPE9,
4433
4948
  platform: "polkadot",
4434
4949
  networkId,
4435
4950
  onChainId: String(asset.onChainId),
@@ -4446,7 +4961,7 @@ var fetchTokens8 = async ({
4446
4961
  return configToken || token.isSufficient;
4447
4962
  }).map((token) => {
4448
4963
  const configToken = configTokenByOnChainId[token.onChainId];
4449
- return configToken ? assign7({}, token, configToken) : token;
4964
+ return configToken ? assign8({}, token, configToken) : token;
4450
4965
  }).filter((t) => {
4451
4966
  const parsed = SubForeignAssetsTokenSchema2.safeParse(t);
4452
4967
  return parsed.success;
@@ -4456,12 +4971,12 @@ var fetchTokens8 = async ({
4456
4971
  // src/modules/substrate-foreignassets/getMiniMetadata.ts
4457
4972
  import { MINIMETADATA_VERSION as MINIMETADATA_VERSION4 } from "@talismn/chaindata-provider";
4458
4973
  import { compactMetadata as compactMetadata3, encodeMetadata as encodeMetadata3, parseMetadataRpc as parseMetadataRpc11 } from "@talismn/scale";
4459
- var getMiniMetadata8 = ({
4974
+ var getMiniMetadata9 = ({
4460
4975
  networkId,
4461
4976
  specVersion,
4462
4977
  metadataRpc
4463
4978
  }) => {
4464
- const source = MODULE_TYPE8;
4979
+ const source = MODULE_TYPE9;
4465
4980
  const chainId = networkId;
4466
4981
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
4467
4982
  if (specVersion !== systemVersion.spec_version)
@@ -4494,10 +5009,10 @@ var getData3 = (metadataRpc) => {
4494
5009
 
4495
5010
  // src/modules/substrate-foreignassets/getTransferCallData.ts
4496
5011
  import { mergeUint8 as mergeUint83 } from "@polkadot-api/utils";
4497
- import { isTokenOfType as isTokenOfType8 } from "@talismn/chaindata-provider";
5012
+ import { isTokenOfType as isTokenOfType9 } from "@talismn/chaindata-provider";
4498
5013
  import { papiParse as papiParse2, parseMetadataRpc as parseMetadataRpc12 } from "@talismn/scale";
4499
5014
  import { Binary as Binary3, Enum as Enum2 } from "polkadot-api";
4500
- var getTransferCallData8 = ({
5015
+ var getTransferCallData9 = ({
4501
5016
  from: from2,
4502
5017
  to,
4503
5018
  value,
@@ -4505,8 +5020,8 @@ var getTransferCallData8 = ({
4505
5020
  type,
4506
5021
  metadataRpc
4507
5022
  }) => {
4508
- if (!isTokenOfType8(token, MODULE_TYPE8))
4509
- throw new Error(`Token type ${token.type} is not ${MODULE_TYPE8}.`);
5023
+ if (!isTokenOfType9(token, MODULE_TYPE9))
5024
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE9}.`);
4510
5025
  const { builder } = parseMetadataRpc12(metadataRpc);
4511
5026
  const method = getTransferMethod2(type);
4512
5027
  const { codec, location } = builder.buildCall("ForeignAssets", method);
@@ -4585,14 +5100,14 @@ var getTransferAllEncodedArgs2 = (onChainId, to, codec) => {
4585
5100
  };
4586
5101
 
4587
5102
  // src/modules/substrate-foreignassets/subscribeBalances.ts
4588
- import { map as map3, of as of9 } from "rxjs";
4589
- var subscribeBalances8 = ({
5103
+ import { map as map3, of as of10 } from "rxjs";
5104
+ var subscribeBalances9 = ({
4590
5105
  networkId,
4591
5106
  tokensWithAddresses,
4592
5107
  connector,
4593
5108
  miniMetadata
4594
5109
  }) => {
4595
- if (!tokensWithAddresses.length) return of9({ success: [], errors: [] });
5110
+ if (!tokensWithAddresses.length) return of10({ success: [], errors: [] });
4596
5111
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
4597
5112
  const queries = buildQueries2(networkId, balanceDefs, miniMetadata);
4598
5113
  return getRpcQueryPack$(connector, networkId, queries).pipe(
@@ -4605,31 +5120,31 @@ var subscribeBalances8 = ({
4605
5120
 
4606
5121
  // src/modules/substrate-foreignassets/module.ts
4607
5122
  var SubForeignAssetsBalanceModule = {
4608
- type: MODULE_TYPE8,
4609
- platform: PLATFORM8,
4610
- getMiniMetadata: getMiniMetadata8,
4611
- fetchTokens: fetchTokens8,
4612
- fetchBalances: fetchBalances8,
4613
- subscribeBalances: subscribeBalances8,
4614
- getTransferCallData: getTransferCallData8
5123
+ type: MODULE_TYPE9,
5124
+ platform: PLATFORM9,
5125
+ getMiniMetadata: getMiniMetadata9,
5126
+ fetchTokens: fetchTokens9,
5127
+ fetchBalances: fetchBalances9,
5128
+ subscribeBalances: subscribeBalances9,
5129
+ getTransferCallData: getTransferCallData9
4615
5130
  };
4616
5131
 
4617
5132
  // src/modules/substrate-foreignassets/types.ts
4618
5133
  import { SubForeignAssetsTokenSchema as SubForeignAssetsTokenSchema3 } from "@talismn/chaindata-provider";
4619
- import z11 from "zod/v4";
4620
- var SubForeignAssetsTokenConfigSchema = z11.strictObject({
5134
+ import z13 from "zod/v4";
5135
+ var SubForeignAssetsTokenConfigSchema = z13.strictObject({
4621
5136
  onChainId: SubForeignAssetsTokenSchema3.shape.onChainId,
4622
5137
  ...TokenConfigBaseSchema.shape
4623
5138
  });
4624
5139
 
4625
5140
  // src/modules/substrate-hydration/config.ts
4626
5141
  import { SubHydrationTokenSchema } from "@talismn/chaindata-provider";
4627
- var MODULE_TYPE9 = SubHydrationTokenSchema.shape.type.value;
4628
- var PLATFORM9 = SubHydrationTokenSchema.shape.platform.value;
5142
+ var MODULE_TYPE10 = SubHydrationTokenSchema.shape.type.value;
5143
+ var PLATFORM10 = SubHydrationTokenSchema.shape.platform.value;
4629
5144
 
4630
5145
  // src/modules/substrate-hydration/fetchBalances.ts
4631
- import { keyBy as keyBy6, uniq as uniq4 } from "lodash-es";
4632
- var fetchBalances9 = async ({
5146
+ import { keyBy as keyBy7, uniq as uniq5 } from "lodash-es";
5147
+ var fetchBalances10 = async ({
4633
5148
  networkId,
4634
5149
  tokensWithAddresses,
4635
5150
  connector,
@@ -4638,7 +5153,7 @@ var fetchBalances9 = async ({
4638
5153
  if (!tokensWithAddresses.length) return { success: [], errors: [] };
4639
5154
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
4640
5155
  if (!miniMetadata?.data) {
4641
- log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE9} balances on ${networkId}.`, {
5156
+ log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE10} balances on ${networkId}.`, {
4642
5157
  tokensWithAddresses
4643
5158
  });
4644
5159
  return {
@@ -4650,20 +5165,20 @@ var fetchBalances9 = async ({
4650
5165
  }))
4651
5166
  };
4652
5167
  }
4653
- if (miniMetadata.source !== MODULE_TYPE9) {
4654
- log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE9}.`);
5168
+ if (miniMetadata.source !== MODULE_TYPE10) {
5169
+ log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE10}.`);
4655
5170
  return {
4656
5171
  success: [],
4657
5172
  errors: balanceDefs.map((def) => ({
4658
5173
  tokenId: def.token.id,
4659
5174
  address: def.address,
4660
- error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE9}`)
5175
+ error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE10}`)
4661
5176
  }))
4662
5177
  };
4663
5178
  }
4664
5179
  if (miniMetadata.chainId !== networkId) {
4665
5180
  log_default.warn(
4666
- `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE9}. Expected chainId is ${networkId}`
5181
+ `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE10}. Expected chainId is ${networkId}`
4667
5182
  );
4668
5183
  return {
4669
5184
  success: [],
@@ -4674,7 +5189,7 @@ var fetchBalances9 = async ({
4674
5189
  }))
4675
5190
  };
4676
5191
  }
4677
- const addresses = uniq4(balanceDefs.map((def) => def.address));
5192
+ const addresses = uniq5(balanceDefs.map((def) => def.address));
4678
5193
  try {
4679
5194
  const res = await Promise.all(
4680
5195
  addresses.map(
@@ -4690,16 +5205,16 @@ var fetchBalances9 = async ({
4690
5205
  frozen: balance.frozen.toString()
4691
5206
  })).filter((b) => b.onChainId !== void 0);
4692
5207
  });
4693
- const balancesByKey = keyBy6(fetchedBalances, (b) => `${b.address}:${b.onChainId}`);
5208
+ const balancesByKey = keyBy7(fetchedBalances, (b) => `${b.address}:${b.onChainId}`);
4694
5209
  const success = tokensWithAddresses.reduce((acc, [token, addresses2]) => {
4695
- if (token.type === MODULE_TYPE9)
5210
+ if (token.type === MODULE_TYPE10)
4696
5211
  for (const address of addresses2) {
4697
5212
  const rawBalance = balancesByKey[`${address}:${token.onChainId}`];
4698
5213
  const balance = {
4699
5214
  address,
4700
5215
  networkId,
4701
5216
  tokenId: token.id,
4702
- source: MODULE_TYPE9,
5217
+ source: MODULE_TYPE10,
4703
5218
  status: "live",
4704
5219
  values: [
4705
5220
  {
@@ -4747,8 +5262,8 @@ import {
4747
5262
  subHydrationTokenId
4748
5263
  } from "@talismn/chaindata-provider";
4749
5264
  import { getStorageKeyPrefix as getStorageKeyPrefix4, parseMetadataRpc as parseMetadataRpc13 } from "@talismn/scale";
4750
- import { assign as assign8, keyBy as keyBy7 } from "lodash-es";
4751
- var fetchTokens9 = async ({
5265
+ import { assign as assign9, keyBy as keyBy8 } from "lodash-es";
5266
+ var fetchTokens10 = async ({
4752
5267
  networkId,
4753
5268
  tokens,
4754
5269
  connector,
@@ -4767,7 +5282,7 @@ var fetchTokens9 = async ({
4767
5282
  [allAssetStorageKeys]
4768
5283
  );
4769
5284
  const assetStorageEntries = assetStorageResults.length ? assetStorageResults[0].changes : [];
4770
- const configTokenByAssetId = keyBy7(tokens, (t) => t.onChainId);
5285
+ const configTokenByAssetId = keyBy8(tokens, (t) => t.onChainId);
4771
5286
  return assetStorageEntries.map(([key, value]) => {
4772
5287
  const [onChainId] = assetsCodec.keys.dec(key);
4773
5288
  const asset = assetsCodec.value.dec(value);
@@ -4783,7 +5298,7 @@ var fetchTokens9 = async ({
4783
5298
  }).map(
4784
5299
  (asset) => ({
4785
5300
  id: subHydrationTokenId(networkId, asset.onChainId),
4786
- type: MODULE_TYPE9,
5301
+ type: MODULE_TYPE10,
4787
5302
  platform: "polkadot",
4788
5303
  networkId,
4789
5304
  onChainId: asset.onChainId,
@@ -4801,7 +5316,7 @@ var fetchTokens9 = async ({
4801
5316
  return configToken || token.isSufficient;
4802
5317
  }).map((token) => {
4803
5318
  const configToken = configTokenByAssetId[token.onChainId];
4804
- return configToken ? assign8({}, token, configToken) : token;
5319
+ return configToken ? assign9({}, token, configToken) : token;
4805
5320
  }).filter((t) => {
4806
5321
  const parsed = SubHydrationTokenSchema2.safeParse(t);
4807
5322
  return parsed.success;
@@ -4811,12 +5326,12 @@ var fetchTokens9 = async ({
4811
5326
  // src/modules/substrate-hydration/getMiniMetadata.ts
4812
5327
  import { MINIMETADATA_VERSION as MINIMETADATA_VERSION5 } from "@talismn/chaindata-provider";
4813
5328
  import { compactMetadata as compactMetadata4, encodeMetadata as encodeMetadata4, parseMetadataRpc as parseMetadataRpc14 } from "@talismn/scale";
4814
- var getMiniMetadata9 = ({
5329
+ var getMiniMetadata10 = ({
4815
5330
  networkId,
4816
5331
  specVersion,
4817
5332
  metadataRpc
4818
5333
  }) => {
4819
- const source = MODULE_TYPE9;
5334
+ const source = MODULE_TYPE10;
4820
5335
  const chainId = networkId;
4821
5336
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
4822
5337
  if (specVersion !== systemVersion.spec_version)
@@ -4863,18 +5378,18 @@ var getData4 = (metadataRpc) => {
4863
5378
 
4864
5379
  // src/modules/substrate-hydration/getTransferCallData.ts
4865
5380
  import { mergeUint8 as mergeUint84 } from "@polkadot-api/utils";
4866
- import { isTokenOfType as isTokenOfType9 } from "@talismn/chaindata-provider";
5381
+ import { isTokenOfType as isTokenOfType10 } from "@talismn/chaindata-provider";
4867
5382
  import { parseMetadataRpc as parseMetadataRpc15 } from "@talismn/scale";
4868
5383
  import { Binary as Binary4 } from "polkadot-api";
4869
- var getTransferCallData9 = ({
5384
+ var getTransferCallData10 = ({
4870
5385
  from: from2,
4871
5386
  to,
4872
5387
  value,
4873
5388
  token,
4874
5389
  metadataRpc
4875
5390
  }) => {
4876
- if (!isTokenOfType9(token, MODULE_TYPE9))
4877
- throw new Error(`Token type ${token.type} is not ${MODULE_TYPE9}.`);
5391
+ if (!isTokenOfType10(token, MODULE_TYPE10))
5392
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE10}.`);
4878
5393
  const { builder } = parseMetadataRpc15(metadataRpc);
4879
5394
  const { codec, location } = builder.buildCall("Currencies", "transfer");
4880
5395
  const args = {
@@ -4890,22 +5405,22 @@ var getTransferCallData9 = ({
4890
5405
  };
4891
5406
 
4892
5407
  // src/modules/substrate-hydration/subscribeBalances.ts
4893
- import { isEqual as isEqual8 } from "lodash-es";
4894
- import { distinctUntilChanged as distinctUntilChanged8, Observable as Observable8, of as of10 } from "rxjs";
4895
- var SUBSCRIPTION_INTERVAL7 = 6e3;
4896
- var subscribeBalances9 = ({
5408
+ import { isEqual as isEqual9 } from "lodash-es";
5409
+ import { distinctUntilChanged as distinctUntilChanged9, Observable as Observable9, of as of11 } from "rxjs";
5410
+ var SUBSCRIPTION_INTERVAL8 = 6e3;
5411
+ var subscribeBalances10 = ({
4897
5412
  networkId,
4898
5413
  tokensWithAddresses,
4899
5414
  connector,
4900
5415
  miniMetadata
4901
5416
  }) => {
4902
- if (!tokensWithAddresses.length) return of10({ success: [], errors: [] });
4903
- return new Observable8((subscriber) => {
5417
+ if (!tokensWithAddresses.length) return of11({ success: [], errors: [] });
5418
+ return new Observable9((subscriber) => {
4904
5419
  const abortController = new AbortController();
4905
5420
  const poll = async () => {
4906
5421
  try {
4907
5422
  if (abortController.signal.aborted) return;
4908
- const balances = await fetchBalances9({
5423
+ const balances = await fetchBalances10({
4909
5424
  networkId,
4910
5425
  tokensWithAddresses,
4911
5426
  connector,
@@ -4913,10 +5428,10 @@ var subscribeBalances9 = ({
4913
5428
  });
4914
5429
  if (abortController.signal.aborted) return;
4915
5430
  subscriber.next(balances);
4916
- setTimeout(poll, SUBSCRIPTION_INTERVAL7);
5431
+ setTimeout(poll, SUBSCRIPTION_INTERVAL8);
4917
5432
  } catch (error) {
4918
5433
  log_default.error("Error", {
4919
- module: MODULE_TYPE9,
5434
+ module: MODULE_TYPE10,
4920
5435
  networkId,
4921
5436
  miniMetadata,
4922
5437
  addressesByToken: tokensWithAddresses,
@@ -4929,36 +5444,36 @@ var subscribeBalances9 = ({
4929
5444
  return () => {
4930
5445
  abortController.abort();
4931
5446
  };
4932
- }).pipe(distinctUntilChanged8(isEqual8));
5447
+ }).pipe(distinctUntilChanged9(isEqual9));
4933
5448
  };
4934
5449
 
4935
5450
  // src/modules/substrate-hydration/module.ts
4936
5451
  var SubHydrationBalanceModule = {
4937
- type: MODULE_TYPE9,
4938
- platform: PLATFORM9,
4939
- getMiniMetadata: getMiniMetadata9,
4940
- fetchTokens: fetchTokens9,
4941
- fetchBalances: fetchBalances9,
4942
- subscribeBalances: subscribeBalances9,
4943
- getTransferCallData: getTransferCallData9
5452
+ type: MODULE_TYPE10,
5453
+ platform: PLATFORM10,
5454
+ getMiniMetadata: getMiniMetadata10,
5455
+ fetchTokens: fetchTokens10,
5456
+ fetchBalances: fetchBalances10,
5457
+ subscribeBalances: subscribeBalances10,
5458
+ getTransferCallData: getTransferCallData10
4944
5459
  };
4945
5460
 
4946
5461
  // src/modules/substrate-hydration/types.ts
4947
5462
  import { SubHydrationTokenSchema as SubHydrationTokenSchema3 } from "@talismn/chaindata-provider";
4948
- import z12 from "zod/v4";
4949
- var SubHydrationTokenConfigSchema = z12.strictObject({
5463
+ import z14 from "zod/v4";
5464
+ var SubHydrationTokenConfigSchema = z14.strictObject({
4950
5465
  onChainId: SubHydrationTokenSchema3.shape.onChainId,
4951
5466
  ...TokenConfigBaseSchema.shape
4952
5467
  });
4953
5468
 
4954
5469
  // src/modules/substrate-native/config.ts
4955
5470
  import { SubNativeTokenSchema } from "@talismn/chaindata-provider";
4956
- var MODULE_TYPE10 = SubNativeTokenSchema.shape.type.value;
4957
- var PLATFORM10 = SubNativeTokenSchema.shape.platform.value;
5471
+ var MODULE_TYPE11 = SubNativeTokenSchema.shape.type.value;
5472
+ var PLATFORM11 = SubNativeTokenSchema.shape.platform.value;
4958
5473
 
4959
5474
  // src/modules/substrate-native/queries/buildBaseQueries.ts
4960
5475
  import { decodeScale as decodeScale4 } from "@talismn/scale";
4961
- import { isNotNil as isNotNil7 } from "@talismn/util";
5476
+ import { isNotNil as isNotNil8 } from "@talismn/util";
4962
5477
 
4963
5478
  // src/modules/substrate-native/util/lockTypes.ts
4964
5479
  import upperFirst from "lodash-es/upperFirst";
@@ -5119,7 +5634,7 @@ var buildBaseQueries = (networkId, balanceDefs, miniMetadata) => {
5119
5634
  return { balance, nomPoolMemberInfo };
5120
5635
  }
5121
5636
  };
5122
- }).filter(isNotNil7);
5637
+ }).filter(isNotNil8);
5123
5638
  };
5124
5639
  var decodeBaseResult = (coder, value, networkId) => {
5125
5640
  const decoded = decodeScale4(
@@ -5359,11 +5874,11 @@ var getNomPoolStateKeys = (coders, nomPoolMemberInfo, extra) => {
5359
5874
  };
5360
5875
 
5361
5876
  // src/modules/substrate-native/fetchBalances.ts
5362
- var fetchBalances10 = async ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
5877
+ var fetchBalances11 = async ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
5363
5878
  if (!tokensWithAddresses.length) return { success: [], errors: [] };
5364
5879
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
5365
5880
  if (!miniMetadata?.data) {
5366
- log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE10} balances on ${networkId}.`);
5881
+ log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE11} balances on ${networkId}.`);
5367
5882
  return {
5368
5883
  success: [],
5369
5884
  errors: balanceDefs.map((def) => ({
@@ -5373,20 +5888,20 @@ var fetchBalances10 = async ({ networkId, tokensWithAddresses, connector, miniMe
5373
5888
  }))
5374
5889
  };
5375
5890
  }
5376
- if (miniMetadata.source !== MODULE_TYPE10) {
5377
- log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE10}.`);
5891
+ if (miniMetadata.source !== MODULE_TYPE11) {
5892
+ log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE11}.`);
5378
5893
  return {
5379
5894
  success: [],
5380
5895
  errors: balanceDefs.map((def) => ({
5381
5896
  tokenId: def.token.id,
5382
5897
  address: def.address,
5383
- error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE10}`)
5898
+ error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE11}`)
5384
5899
  }))
5385
5900
  };
5386
5901
  }
5387
5902
  if (miniMetadata.chainId !== networkId) {
5388
5903
  log_default.warn(
5389
- `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE10}. Expected chainId is ${networkId}`
5904
+ `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE11}. Expected chainId is ${networkId}`
5390
5905
  );
5391
5906
  return {
5392
5907
  success: [],
@@ -5409,9 +5924,9 @@ import {
5409
5924
  SubNativeTokenSchema as SubNativeTokenSchema2,
5410
5925
  subNativeTokenId as subNativeTokenId2
5411
5926
  } from "@talismn/chaindata-provider";
5412
- import { assign as assign9 } from "lodash-es";
5413
- import z13 from "zod/v4";
5414
- var fetchTokens10 = async ({ networkId, tokens, connector, miniMetadata }) => {
5927
+ import { assign as assign10 } from "lodash-es";
5928
+ import z15 from "zod/v4";
5929
+ var fetchTokens11 = async ({ networkId, tokens, connector, miniMetadata }) => {
5415
5930
  if (miniMetadata.extra.disable) return [];
5416
5931
  const { tokenSymbol: symbol, tokenDecimals: decimals } = await getChainProperties(
5417
5932
  connector,
@@ -5431,22 +5946,22 @@ var fetchTokens10 = async ({ networkId, tokens, connector, miniMetadata }) => {
5431
5946
  decimals,
5432
5947
  existentialDeposit: miniMetadata.extra.existentialDeposit ?? "0"
5433
5948
  };
5434
- const token = assign9(nativeToken, tokenConfig);
5949
+ const token = assign10(nativeToken, tokenConfig);
5435
5950
  const parsed = SubNativeTokenSchema2.safeParse(token);
5436
5951
  if (!parsed.success) {
5437
5952
  return [];
5438
5953
  }
5439
5954
  return [parsed.data];
5440
5955
  };
5441
- var DotNetworkPropertiesSimple = z13.object({
5442
- tokenDecimals: z13.number().optional().default(0),
5443
- tokenSymbol: z13.string().optional().default("Unit")
5956
+ var DotNetworkPropertiesSimple = z15.object({
5957
+ tokenDecimals: z15.number().optional().default(0),
5958
+ tokenSymbol: z15.string().optional().default("Unit")
5444
5959
  });
5445
- var DotNetworkPropertiesArray = z13.object({
5446
- tokenDecimals: z13.array(z13.number()).nonempty(),
5447
- tokenSymbol: z13.array(z13.string()).nonempty()
5960
+ var DotNetworkPropertiesArray = z15.object({
5961
+ tokenDecimals: z15.array(z15.number()).nonempty(),
5962
+ tokenSymbol: z15.array(z15.string()).nonempty()
5448
5963
  });
5449
- var DotNetworkPropertiesSchema = z13.union([DotNetworkPropertiesSimple, DotNetworkPropertiesArray]).transform((val) => ({
5964
+ var DotNetworkPropertiesSchema = z15.union([DotNetworkPropertiesSimple, DotNetworkPropertiesArray]).transform((val) => ({
5450
5965
  tokenDecimals: Array.isArray(val.tokenDecimals) ? val.tokenDecimals[0] : val.tokenDecimals,
5451
5966
  tokenSymbol: Array.isArray(val.tokenSymbol) ? val.tokenSymbol[0] : val.tokenSymbol
5452
5967
  }));
@@ -5458,8 +5973,8 @@ var getChainProperties = async (connector, networkId) => {
5458
5973
  // src/modules/substrate-native/getMiniMetadata.ts
5459
5974
  import { MINIMETADATA_VERSION as MINIMETADATA_VERSION6 } from "@talismn/chaindata-provider";
5460
5975
  import { compactMetadata as compactMetadata5, encodeMetadata as encodeMetadata5, parseMetadataRpc as parseMetadataRpc16 } from "@talismn/scale";
5461
- var getMiniMetadata10 = ({ networkId, specVersion, metadataRpc, config }) => {
5462
- const source = MODULE_TYPE10;
5976
+ var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
5977
+ const source = MODULE_TYPE11;
5463
5978
  const chainId = networkId;
5464
5979
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
5465
5980
  if (specVersion !== systemVersion.spec_version)
@@ -5519,12 +6034,12 @@ var getMiniMetadata10 = ({ networkId, specVersion, metadataRpc, config }) => {
5519
6034
 
5520
6035
  // src/modules/substrate-native/getTransferCallData.ts
5521
6036
  import { mergeUint8 as mergeUint86 } from "@polkadot-api/utils";
5522
- import { isTokenOfType as isTokenOfType10 } from "@talismn/chaindata-provider";
6037
+ import { isTokenOfType as isTokenOfType11 } from "@talismn/chaindata-provider";
5523
6038
  import {
5524
6039
  parseMetadataRpc as parseMetadataRpc17
5525
6040
  } from "@talismn/scale";
5526
6041
  import { Binary as Binary5, Enum as Enum3 } from "polkadot-api";
5527
- var getTransferCallData10 = ({
6042
+ var getTransferCallData11 = ({
5528
6043
  from: from2,
5529
6044
  to,
5530
6045
  value,
@@ -5532,8 +6047,8 @@ var getTransferCallData10 = ({
5532
6047
  type,
5533
6048
  metadataRpc
5534
6049
  }) => {
5535
- if (!isTokenOfType10(token, MODULE_TYPE10))
5536
- throw new Error(`Token type ${token.type} is not ${MODULE_TYPE10}.`);
6050
+ if (!isTokenOfType11(token, MODULE_TYPE11))
6051
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE11}.`);
5537
6052
  const { unifiedMetadata, lookupFn, builder } = parseMetadataRpc17(metadataRpc);
5538
6053
  const method = getTransferMethod3(type, unifiedMetadata, lookupFn);
5539
6054
  const { codec, location } = builder.buildCall("Balances", method);
@@ -5611,9 +6126,9 @@ var getTransferAllEncodedArgs3 = (to, codec) => {
5611
6126
  };
5612
6127
 
5613
6128
  // src/modules/substrate-native/subscribeBalances.ts
5614
- import { map as map4, of as of11, switchMap } from "rxjs";
5615
- var subscribeBalances10 = ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
5616
- if (!tokensWithAddresses.length) return of11({ success: [], errors: [] });
6129
+ import { map as map4, of as of12, switchMap } from "rxjs";
6130
+ var subscribeBalances11 = ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
6131
+ if (!tokensWithAddresses.length) return of12({ success: [], errors: [] });
5617
6132
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
5618
6133
  const baseQueries = buildBaseQueries(networkId, balanceDefs, miniMetadata);
5619
6134
  return getRpcQueryPack$(connector, networkId, baseQueries).pipe(
@@ -5630,34 +6145,34 @@ var subscribeBalances10 = ({ networkId, tokensWithAddresses, connector, miniMeta
5630
6145
 
5631
6146
  // src/modules/substrate-native/module.ts
5632
6147
  var SubNativeBalanceModule = {
5633
- type: MODULE_TYPE10,
5634
- platform: PLATFORM10,
5635
- getMiniMetadata: getMiniMetadata10,
5636
- fetchTokens: fetchTokens10,
5637
- fetchBalances: fetchBalances10,
5638
- subscribeBalances: subscribeBalances10,
5639
- getTransferCallData: getTransferCallData10
6148
+ type: MODULE_TYPE11,
6149
+ platform: PLATFORM11,
6150
+ getMiniMetadata: getMiniMetadata11,
6151
+ fetchTokens: fetchTokens11,
6152
+ fetchBalances: fetchBalances11,
6153
+ subscribeBalances: subscribeBalances11,
6154
+ getTransferCallData: getTransferCallData11
5640
6155
  };
5641
6156
 
5642
6157
  // src/modules/substrate-native/types.ts
5643
- import z14 from "zod/v4";
5644
- var SubNativeTokenConfigSchema = z14.strictObject({
6158
+ import z16 from "zod/v4";
6159
+ var SubNativeTokenConfigSchema = z16.strictObject({
5645
6160
  ...TokenConfigBaseSchema.shape
5646
6161
  });
5647
- var SubNativeModuleConfigSchema = z14.strictObject({
5648
- disable: z14.boolean().optional()
6162
+ var SubNativeModuleConfigSchema = z16.strictObject({
6163
+ disable: z16.boolean().optional()
5649
6164
  });
5650
- var SubNativeMiniMetadataExtraSchema = z14.strictObject({
5651
- disable: z14.boolean().optional(),
5652
- useLegacyTransferableCalculation: z14.boolean().optional(),
5653
- existentialDeposit: z14.string().optional(),
5654
- nominationPoolsPalletId: z14.string().optional()
6165
+ var SubNativeMiniMetadataExtraSchema = z16.strictObject({
6166
+ disable: z16.boolean().optional(),
6167
+ useLegacyTransferableCalculation: z16.boolean().optional(),
6168
+ existentialDeposit: z16.string().optional(),
6169
+ nominationPoolsPalletId: z16.string().optional()
5655
6170
  });
5656
6171
 
5657
6172
  // src/modules/substrate-psp22/config.ts
5658
6173
  import { SubPsp22TokenSchema } from "@talismn/chaindata-provider";
5659
- var MODULE_TYPE11 = SubPsp22TokenSchema.shape.type.value;
5660
- var PLATFORM11 = SubPsp22TokenSchema.shape.platform.value;
6174
+ var MODULE_TYPE12 = SubPsp22TokenSchema.shape.type.value;
6175
+ var PLATFORM12 = SubPsp22TokenSchema.shape.platform.value;
5661
6176
 
5662
6177
  // src/modules/substrate-psp22/fetchBalances.ts
5663
6178
  import { Abi } from "@polkadot/api-contract";
@@ -6661,7 +7176,17 @@ var psp22_default = {
6661
7176
  };
6662
7177
 
6663
7178
  // src/modules/substrate-psp22/util.ts
6664
- import { u8aConcatStrict, u8aToHex } from "@polkadot/util";
7179
+ var u8aToHex = (value) => `0x${Array.from(value, (b) => b.toString(16).padStart(2, "0")).join("")}`;
7180
+ var u8aConcatStrict = (arrays) => {
7181
+ const length = arrays.reduce((total, arr) => total + arr.length, 0);
7182
+ const result = new Uint8Array(length);
7183
+ let offset = 0;
7184
+ for (const arr of arrays) {
7185
+ result.set(arr, offset);
7186
+ offset += arr.length;
7187
+ }
7188
+ return result;
7189
+ };
6665
7190
  var makeContractCaller = ({
6666
7191
  chainConnector,
6667
7192
  chainId,
@@ -6690,7 +7215,7 @@ var makeContractCaller = ({
6690
7215
  );
6691
7216
 
6692
7217
  // src/modules/substrate-psp22/fetchBalances.ts
6693
- var fetchBalances11 = async ({
7218
+ var fetchBalances12 = async ({
6694
7219
  networkId,
6695
7220
  tokensWithAddresses,
6696
7221
  connector
@@ -6745,13 +7270,14 @@ var fetchBalances11 = async ({
6745
7270
  // src/modules/substrate-psp22/fetchTokens.ts
6746
7271
  import { Abi as Abi2 } from "@polkadot/api-contract";
6747
7272
  import { TypeRegistry as TypeRegistry2 } from "@polkadot/types";
6748
- import { hexToNumber, u8aToString } from "@polkadot/util";
6749
7273
  import {
6750
7274
  SubPsp22TokenSchema as SubPsp22TokenSchema2,
6751
7275
  subPsp22TokenId
6752
7276
  } from "@talismn/chaindata-provider";
6753
7277
  import { values } from "lodash-es";
6754
- var fetchTokens11 = async ({
7278
+ var hexToNumber = (hex) => Number(hex);
7279
+ var u8aToString = (value) => new TextDecoder().decode(value);
7280
+ var fetchTokens12 = async ({
6755
7281
  networkId,
6756
7282
  tokens,
6757
7283
  connector
@@ -6827,12 +7353,12 @@ var fetchTokens11 = async ({
6827
7353
  // src/modules/substrate-psp22/getMiniMetadata.ts
6828
7354
  import { MINIMETADATA_VERSION as MINIMETADATA_VERSION7 } from "@talismn/chaindata-provider";
6829
7355
  import { parseMetadataRpc as parseMetadataRpc18 } from "@talismn/scale";
6830
- var getMiniMetadata11 = ({
7356
+ var getMiniMetadata12 = ({
6831
7357
  networkId,
6832
7358
  specVersion,
6833
7359
  metadataRpc
6834
7360
  }) => {
6835
- const source = MODULE_TYPE11;
7361
+ const source = MODULE_TYPE12;
6836
7362
  const chainId = networkId;
6837
7363
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
6838
7364
  if (specVersion !== systemVersion.spec_version)
@@ -6860,12 +7386,12 @@ var getMiniMetadata11 = ({
6860
7386
  import { Abi as Abi3 } from "@polkadot/api-contract";
6861
7387
  import { TypeRegistry as TypeRegistry3 } from "@polkadot/types";
6862
7388
  import { mergeUint8 as mergeUint87 } from "@polkadot-api/utils";
6863
- import { isTokenOfType as isTokenOfType11, parseTokenId as parseTokenId5 } from "@talismn/chaindata-provider";
7389
+ import { isTokenOfType as isTokenOfType12, parseTokenId as parseTokenId5 } from "@talismn/chaindata-provider";
6864
7390
  import { parseMetadataRpc as parseMetadataRpc19 } from "@talismn/scale";
6865
7391
  import { Binary as Binary6, Enum as Enum4 } from "polkadot-api";
6866
- var getTransferCallData11 = async ({ from: from2, to, value, token, metadataRpc, connector }) => {
6867
- if (!isTokenOfType11(token, MODULE_TYPE11))
6868
- throw new Error(`Token type ${token.type} is not ${MODULE_TYPE11}.`);
7392
+ var getTransferCallData12 = async ({ from: from2, to, value, token, metadataRpc, connector }) => {
7393
+ if (!isTokenOfType12(token, MODULE_TYPE12))
7394
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE12}.`);
6869
7395
  const networkId = parseTokenId5(token.id).networkId;
6870
7396
  const { builder } = parseMetadataRpc19(metadataRpc);
6871
7397
  const { codec, location } = builder.buildCall("Contracts", "call");
@@ -6897,22 +7423,22 @@ var getTransferCallData11 = async ({ from: from2, to, value, token, metadataRpc,
6897
7423
  };
6898
7424
 
6899
7425
  // src/modules/substrate-psp22/subscribeBalances.ts
6900
- import { isEqual as isEqual9 } from "lodash-es";
6901
- import { distinctUntilChanged as distinctUntilChanged9, Observable as Observable9, of as of12 } from "rxjs";
6902
- var SUBSCRIPTION_INTERVAL8 = 6e3;
6903
- var subscribeBalances11 = ({
7426
+ import { isEqual as isEqual10 } from "lodash-es";
7427
+ import { distinctUntilChanged as distinctUntilChanged10, Observable as Observable10, of as of13 } from "rxjs";
7428
+ var SUBSCRIPTION_INTERVAL9 = 6e3;
7429
+ var subscribeBalances12 = ({
6904
7430
  networkId,
6905
7431
  tokensWithAddresses,
6906
7432
  connector,
6907
7433
  miniMetadata
6908
7434
  }) => {
6909
- if (!tokensWithAddresses.length) return of12({ success: [], errors: [] });
6910
- return new Observable9((subscriber) => {
7435
+ if (!tokensWithAddresses.length) return of13({ success: [], errors: [] });
7436
+ return new Observable10((subscriber) => {
6911
7437
  const abortController = new AbortController();
6912
7438
  const poll = async () => {
6913
7439
  try {
6914
7440
  if (abortController.signal.aborted) return;
6915
- const balances = await fetchBalances11({
7441
+ const balances = await fetchBalances12({
6916
7442
  networkId,
6917
7443
  tokensWithAddresses,
6918
7444
  connector,
@@ -6920,10 +7446,10 @@ var subscribeBalances11 = ({
6920
7446
  });
6921
7447
  if (abortController.signal.aborted) return;
6922
7448
  subscriber.next(balances);
6923
- setTimeout(poll, SUBSCRIPTION_INTERVAL8);
7449
+ setTimeout(poll, SUBSCRIPTION_INTERVAL9);
6924
7450
  } catch (error) {
6925
7451
  log_default.error("Error", {
6926
- module: MODULE_TYPE11,
7452
+ module: MODULE_TYPE12,
6927
7453
  networkId,
6928
7454
  miniMetadata,
6929
7455
  addressesByToken: tokensWithAddresses,
@@ -6936,36 +7462,36 @@ var subscribeBalances11 = ({
6936
7462
  return () => {
6937
7463
  abortController.abort();
6938
7464
  };
6939
- }).pipe(distinctUntilChanged9(isEqual9));
7465
+ }).pipe(distinctUntilChanged10(isEqual10));
6940
7466
  };
6941
7467
 
6942
7468
  // src/modules/substrate-psp22/module.ts
6943
7469
  var SubPsp22BalanceModule = {
6944
- type: MODULE_TYPE11,
6945
- platform: PLATFORM11,
6946
- getMiniMetadata: getMiniMetadata11,
6947
- fetchTokens: fetchTokens11,
6948
- fetchBalances: fetchBalances11,
6949
- subscribeBalances: subscribeBalances11,
6950
- getTransferCallData: getTransferCallData11
7470
+ type: MODULE_TYPE12,
7471
+ platform: PLATFORM12,
7472
+ getMiniMetadata: getMiniMetadata12,
7473
+ fetchTokens: fetchTokens12,
7474
+ fetchBalances: fetchBalances12,
7475
+ subscribeBalances: subscribeBalances12,
7476
+ getTransferCallData: getTransferCallData12
6951
7477
  };
6952
7478
 
6953
7479
  // src/modules/substrate-psp22/types.ts
6954
7480
  import { SubPsp22TokenSchema as SubPsp22TokenSchema3 } from "@talismn/chaindata-provider";
6955
- import z15 from "zod/v4";
6956
- var SubPsp22TokenConfigSchema = z15.strictObject({
7481
+ import z17 from "zod/v4";
7482
+ var SubPsp22TokenConfigSchema = z17.strictObject({
6957
7483
  contractAddress: SubPsp22TokenSchema3.shape.contractAddress,
6958
7484
  ...TokenConfigBaseSchema.shape
6959
7485
  });
6960
7486
 
6961
7487
  // src/modules/substrate-tokens/config.ts
6962
7488
  import { SubTokensTokenSchema } from "@talismn/chaindata-provider";
6963
- var MODULE_TYPE12 = SubTokensTokenSchema.shape.type.value;
6964
- var PLATFORM12 = SubTokensTokenSchema.shape.platform.value;
7489
+ var MODULE_TYPE13 = SubTokensTokenSchema.shape.type.value;
7490
+ var PLATFORM13 = SubTokensTokenSchema.shape.platform.value;
6965
7491
 
6966
7492
  // src/modules/substrate-tokens/buildQueries.ts
6967
7493
  import { decodeScale as decodeScale6, papiParse as papiParse3 } from "@talismn/scale";
6968
- import { isNotNil as isNotNil8 } from "@talismn/util";
7494
+ import { isNotNil as isNotNil9 } from "@talismn/util";
6969
7495
  var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
6970
7496
  const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
6971
7497
  storage: [miniMetadata.extra.palletId, "Accounts"]
@@ -7013,15 +7539,15 @@ var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
7013
7539
  stateKeys: [stateKey],
7014
7540
  decodeResult
7015
7541
  };
7016
- }).filter(isNotNil8);
7542
+ }).filter(isNotNil9);
7017
7543
  };
7018
7544
 
7019
7545
  // src/modules/substrate-tokens/fetchBalances.ts
7020
- var fetchBalances12 = async ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
7546
+ var fetchBalances13 = async ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
7021
7547
  if (!tokensWithAddresses.length) return { success: [], errors: [] };
7022
7548
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
7023
7549
  if (!miniMetadata?.data) {
7024
- log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE12} balances on ${networkId}.`);
7550
+ log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE13} balances on ${networkId}.`);
7025
7551
  return {
7026
7552
  success: [],
7027
7553
  errors: balanceDefs.map((def) => ({
@@ -7031,20 +7557,20 @@ var fetchBalances12 = async ({ networkId, tokensWithAddresses, connector, miniMe
7031
7557
  }))
7032
7558
  };
7033
7559
  }
7034
- if (miniMetadata.source !== MODULE_TYPE12) {
7035
- log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE12}.`);
7560
+ if (miniMetadata.source !== MODULE_TYPE13) {
7561
+ log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE13}.`);
7036
7562
  return {
7037
7563
  success: [],
7038
7564
  errors: balanceDefs.map((def) => ({
7039
7565
  tokenId: def.token.id,
7040
7566
  address: def.address,
7041
- error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE12}`)
7567
+ error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE13}`)
7042
7568
  }))
7043
7569
  };
7044
7570
  }
7045
7571
  if (miniMetadata.chainId !== networkId) {
7046
7572
  log_default.warn(
7047
- `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE12}. Expected chainId is ${networkId}`
7573
+ `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE13}. Expected chainId is ${networkId}`
7048
7574
  );
7049
7575
  return {
7050
7576
  success: [],
@@ -7068,7 +7594,7 @@ var fetchBalances12 = async ({ networkId, tokensWithAddresses, connector, miniMe
7068
7594
  address: def.address,
7069
7595
  networkId,
7070
7596
  tokenId: def.token.id,
7071
- source: MODULE_TYPE12,
7597
+ source: MODULE_TYPE13,
7072
7598
  status: "live",
7073
7599
  values: [
7074
7600
  { type: "free", label: "free", amount: "0" },
@@ -7083,19 +7609,19 @@ var fetchBalances12 = async ({ networkId, tokensWithAddresses, connector, miniMe
7083
7609
 
7084
7610
  // src/modules/substrate-tokens/fetchTokens.ts
7085
7611
  import { subTokensTokenId } from "@talismn/chaindata-provider";
7086
- import { assign as assign10 } from "lodash-es";
7087
- var fetchTokens12 = async ({
7612
+ import { assign as assign11 } from "lodash-es";
7613
+ var fetchTokens13 = async ({
7088
7614
  networkId,
7089
7615
  tokens,
7090
7616
  miniMetadata
7091
7617
  }) => {
7092
7618
  if (!miniMetadata?.data) return [];
7093
7619
  return tokens.map(
7094
- (tokenConfig) => assign10(
7620
+ (tokenConfig) => assign11(
7095
7621
  {
7096
7622
  id: subTokensTokenId(networkId, tokenConfig.onChainId),
7097
- type: MODULE_TYPE12,
7098
- platform: PLATFORM12,
7623
+ type: MODULE_TYPE13,
7624
+ platform: PLATFORM13,
7099
7625
  networkId,
7100
7626
  onChainId: tokenConfig.onChainId,
7101
7627
  symbol: tokenConfig.symbol ?? "Unit",
@@ -7112,8 +7638,8 @@ var fetchTokens12 = async ({
7112
7638
  // src/modules/substrate-tokens/getMiniMetadata.ts
7113
7639
  import { MINIMETADATA_VERSION as MINIMETADATA_VERSION8 } from "@talismn/chaindata-provider";
7114
7640
  import { compactMetadata as compactMetadata6, encodeMetadata as encodeMetadata6, parseMetadataRpc as parseMetadataRpc20 } from "@talismn/scale";
7115
- var getMiniMetadata12 = ({ networkId, specVersion, metadataRpc, config }) => {
7116
- const source = MODULE_TYPE12;
7641
+ var getMiniMetadata13 = ({ networkId, specVersion, metadataRpc, config }) => {
7642
+ const source = MODULE_TYPE13;
7117
7643
  const chainId = networkId;
7118
7644
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
7119
7645
  if (specVersion !== systemVersion.spec_version)
@@ -7146,12 +7672,12 @@ var getData5 = (metadataRpc, pallet) => {
7146
7672
 
7147
7673
  // src/modules/substrate-tokens/getTransferCallData.ts
7148
7674
  import { mergeUint8 as mergeUint88 } from "@polkadot-api/utils";
7149
- import { isTokenOfType as isTokenOfType12 } from "@talismn/chaindata-provider";
7675
+ import { isTokenOfType as isTokenOfType13 } from "@talismn/chaindata-provider";
7150
7676
  import { papiParse as papiParse4, parseMetadataRpc as parseMetadataRpc21 } from "@talismn/scale";
7151
7677
  import { Binary as Binary7, Enum as Enum5 } from "polkadot-api";
7152
- var getTransferCallData12 = ({ from: from2, to, value, token, type, metadataRpc, config }) => {
7153
- if (!isTokenOfType12(token, MODULE_TYPE12))
7154
- throw new Error(`Token type ${token.type} is not ${MODULE_TYPE12}.`);
7678
+ var getTransferCallData13 = ({ from: from2, to, value, token, type, metadataRpc, config }) => {
7679
+ if (!isTokenOfType13(token, MODULE_TYPE13))
7680
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE13}.`);
7155
7681
  const { builder } = parseMetadataRpc21(metadataRpc);
7156
7682
  const options = getCallDataOptions(to, token, value, type, config);
7157
7683
  const callData = getCallDataFromOptions(builder, options);
@@ -7264,9 +7790,9 @@ var getCallDataOptions = (to, token, value, type, config) => {
7264
7790
  };
7265
7791
 
7266
7792
  // src/modules/substrate-tokens/subscribeBalances.ts
7267
- import { map as map5, of as of13 } from "rxjs";
7268
- var subscribeBalances12 = ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
7269
- if (!tokensWithAddresses.length) return of13({ success: [], errors: [] });
7793
+ import { map as map5, of as of14 } from "rxjs";
7794
+ var subscribeBalances13 = ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
7795
+ if (!tokensWithAddresses.length) return of14({ success: [], errors: [] });
7270
7796
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
7271
7797
  const queries = buildQueries3(networkId, balanceDefs, miniMetadata);
7272
7798
  return getRpcQueryPack$(connector, networkId, queries).pipe(
@@ -7279,31 +7805,31 @@ var subscribeBalances12 = ({ networkId, tokensWithAddresses, connector, miniMeta
7279
7805
 
7280
7806
  // src/modules/substrate-tokens/module.ts
7281
7807
  var SubTokensBalanceModule = {
7282
- type: MODULE_TYPE12,
7283
- platform: PLATFORM12,
7284
- getMiniMetadata: getMiniMetadata12,
7285
- fetchTokens: fetchTokens12,
7286
- fetchBalances: fetchBalances12,
7287
- subscribeBalances: subscribeBalances12,
7288
- getTransferCallData: getTransferCallData12
7808
+ type: MODULE_TYPE13,
7809
+ platform: PLATFORM13,
7810
+ getMiniMetadata: getMiniMetadata13,
7811
+ fetchTokens: fetchTokens13,
7812
+ fetchBalances: fetchBalances13,
7813
+ subscribeBalances: subscribeBalances13,
7814
+ getTransferCallData: getTransferCallData13
7289
7815
  };
7290
7816
 
7291
7817
  // src/modules/substrate-tokens/types.ts
7292
7818
  import { SubTokensTokenSchema as SubTokensTokenSchema2 } from "@talismn/chaindata-provider";
7293
- import z16 from "zod/v4";
7294
- var SubTokensTokenConfigSchema = z16.strictObject({
7819
+ import z18 from "zod/v4";
7820
+ var SubTokensTokenConfigSchema = z18.strictObject({
7295
7821
  onChainId: SubTokensTokenSchema2.shape.onChainId,
7296
7822
  ...TokenConfigBaseSchema.shape,
7297
7823
  // force these 3 fields because in this module we wont pull anything from chain
7298
- symbol: z16.string().nonempty(),
7299
- decimals: z16.number(),
7300
- existentialDeposit: z16.string().nonempty()
7824
+ symbol: z18.string().nonempty(),
7825
+ decimals: z18.number(),
7826
+ existentialDeposit: z18.string().nonempty()
7301
7827
  });
7302
- var SubTokensModuleConfigSchema = z16.strictObject({
7303
- palletId: z16.string().optional()
7828
+ var SubTokensModuleConfigSchema = z18.strictObject({
7829
+ palletId: z18.string().optional()
7304
7830
  });
7305
- var SubTokensMiniMetadataExtraSchema = z16.strictObject({
7306
- palletId: z16.string()
7831
+ var SubTokensMiniMetadataExtraSchema = z18.strictObject({
7832
+ palletId: z18.string()
7307
7833
  });
7308
7834
 
7309
7835
  // src/modules/index.ts
@@ -7319,7 +7845,8 @@ var BALANCE_MODULES = [
7319
7845
  EvmUniswapV2BalanceModule,
7320
7846
  EvmNativeBalanceModule,
7321
7847
  SolNativeBalanceModule,
7322
- SolSplBalanceModule
7848
+ SolSplBalanceModule,
7849
+ SolToken2022BalanceModule
7323
7850
  ];
7324
7851
 
7325
7852
  // src/getMiniMetadatas/getMetadataRpc.ts
@@ -7427,16 +7954,16 @@ var BalancesProvider = class {
7427
7954
  this.#chaindataProvider = chaindataProvider;
7428
7955
  this.#chainConnectors = chainConnectors;
7429
7956
  this.#storage = new BehaviorSubject2({
7430
- balances: keyBy8(storage.balances.filter(isNotNil9), (b) => getBalanceId(b)),
7431
- miniMetadatas: keyBy8(storage.miniMetadatas.filter(isNotNil9), (m) => m.id)
7957
+ balances: keyBy9(storage.balances.filter(isNotNil10), (b) => getBalanceId(b)),
7958
+ miniMetadatas: keyBy9(storage.miniMetadatas.filter(isNotNil10), (m) => m.id)
7432
7959
  });
7433
7960
  }
7434
7961
  get storage$() {
7435
7962
  return this.#storage.pipe(
7436
7963
  map6(
7437
7964
  ({ balances, miniMetadatas }) => ({
7438
- balances: values2(balances).filter(isNotNil9).sort(sortByBalanceId),
7439
- miniMetadatas: values2(miniMetadatas).filter(isNotNil9).sort(sortByMiniMetadataId)
7965
+ balances: values2(balances).filter(isNotNil10).sort(sortByBalanceId),
7966
+ miniMetadatas: values2(miniMetadatas).filter(isNotNil10).sort(sortByMiniMetadataId)
7440
7967
  }),
7441
7968
  shareReplay(1)
7442
7969
  )
@@ -7444,8 +7971,8 @@ var BalancesProvider = class {
7444
7971
  }
7445
7972
  get storedMiniMetadataMapById$() {
7446
7973
  return this.#storage.pipe(
7447
- map6((storage) => keyBy8(storage.miniMetadatas, (m) => m.id)),
7448
- distinctUntilChanged10(isEqual10),
7974
+ map6((storage) => keyBy9(storage.miniMetadatas, (m) => m.id)),
7975
+ distinctUntilChanged11(isEqual11),
7449
7976
  shareReplay(1)
7450
7977
  );
7451
7978
  }
@@ -7465,7 +7992,7 @@ var BalancesProvider = class {
7465
7992
  )
7466
7993
  ),
7467
7994
  switchMap2((addressesByTokenIdByNetworkId) => {
7468
- if (!keys3(addressesByTokenIdByNetworkId).length) return of14({ isStale: false, results: [] });
7995
+ if (!keys3(addressesByTokenIdByNetworkId).length) return of15({ isStale: false, results: [] });
7469
7996
  return combineLatest({
7470
7997
  isStale: timer(3e4).pipe(
7471
7998
  map6(() => true),
@@ -7490,7 +8017,7 @@ var BalancesProvider = class {
7490
8017
  failedBalanceIds: results.flatMap((result) => result.failedBalanceIds)
7491
8018
  })
7492
8019
  ),
7493
- distinctUntilChanged10(isEqual10)
8020
+ distinctUntilChanged11(isEqual11)
7494
8021
  );
7495
8022
  }
7496
8023
  fetchBalances(addressesByTokenId) {
@@ -7529,7 +8056,7 @@ var BalancesProvider = class {
7529
8056
  }
7530
8057
  default: {
7531
8058
  log_default.warn("[balances] Unsupported network platform for module", { networkId, mod });
7532
- return of14({ status: "live", balances: [], failedBalanceIds: [] });
8059
+ return of15({ status: "live", balances: [], failedBalanceIds: [] });
7533
8060
  }
7534
8061
  }
7535
8062
  })
@@ -7537,14 +8064,14 @@ var BalancesProvider = class {
7537
8064
  }),
7538
8065
  map6((results) => {
7539
8066
  const errorBalanceIds = results.flatMap((result) => result.failedBalanceIds);
7540
- const staleBalances = errorBalanceIds.map((balanceId) => this.#storage.value.balances[balanceId]).filter(isNotNil9).map((b) => ({ ...b, status: "stale" }));
8067
+ const staleBalances = errorBalanceIds.map((balanceId) => this.#storage.value.balances[balanceId]).filter(isNotNil10).map((b) => ({ ...b, status: "stale" }));
7541
8068
  return {
7542
8069
  status: results.some(({ status }) => status === "initialising") ? "initialising" : "live",
7543
8070
  balances: results.flatMap((result) => result.balances).concat(staleBalances).sort(sortByBalanceId),
7544
8071
  failedBalanceIds: []
7545
8072
  };
7546
8073
  }),
7547
- distinctUntilChanged10(isEqual10)
8074
+ distinctUntilChanged11(isEqual11)
7548
8075
  );
7549
8076
  }
7550
8077
  getPolkadotNetworkModuleBalances$(networkId, tokensWithAddresses, mod) {
@@ -7553,7 +8080,7 @@ var BalancesProvider = class {
7553
8080
  { networkId, mod, tokensWithAddresses },
7554
8081
  () => {
7555
8082
  if (!tokensWithAddresses.length)
7556
- return of14({ status: "live", balances: [], failedBalanceIds: [] });
8083
+ return of15({ status: "live", balances: [], failedBalanceIds: [] });
7557
8084
  const moduleAddressesByTokenId = fromPairs2(
7558
8085
  tokensWithAddresses.map(([token, addresses]) => [token.id, addresses])
7559
8086
  );
@@ -7563,7 +8090,7 @@ var BalancesProvider = class {
7563
8090
  if (!this.#chainConnectors.substrate) {
7564
8091
  log_default.warn("[balances] no substrate connector or miniMetadata for module", mod.type);
7565
8092
  return defer(
7566
- () => of14({
8093
+ () => of15({
7567
8094
  status: "initialising",
7568
8095
  balances: this.getStoredBalances(moduleAddressesByTokenId),
7569
8096
  failedBalanceIds: []
@@ -7622,7 +8149,7 @@ var BalancesProvider = class {
7622
8149
  { networkId, mod, tokensWithAddresses },
7623
8150
  () => {
7624
8151
  if (!tokensWithAddresses.length)
7625
- return of14({ status: "live", balances: [], failedBalanceIds: [] });
8152
+ return of15({ status: "live", balances: [], failedBalanceIds: [] });
7626
8153
  const moduleAddressesByTokenId = fromPairs2(
7627
8154
  tokensWithAddresses.map(([token, addresses]) => [token.id, addresses])
7628
8155
  );
@@ -7632,7 +8159,7 @@ var BalancesProvider = class {
7632
8159
  if (!this.#chainConnectors.evm) {
7633
8160
  log_default.warn("[balances] no ethereum connector for module", mod.type);
7634
8161
  return defer(
7635
- () => of14({
8162
+ () => of15({
7636
8163
  status: "initialising",
7637
8164
  balances: this.getStoredBalances(moduleAddressesByTokenId),
7638
8165
  failedBalanceIds: []
@@ -7681,7 +8208,7 @@ var BalancesProvider = class {
7681
8208
  { networkId, mod, tokensWithAddresses },
7682
8209
  () => {
7683
8210
  if (!tokensWithAddresses.length)
7684
- return of14({ status: "live", balances: [], failedBalanceIds: [] });
8211
+ return of15({ status: "live", balances: [], failedBalanceIds: [] });
7685
8212
  const moduleAddressesByTokenId = fromPairs2(
7686
8213
  tokensWithAddresses.map(([token, addresses]) => [token.id, addresses])
7687
8214
  );
@@ -7691,7 +8218,7 @@ var BalancesProvider = class {
7691
8218
  if (!this.#chainConnectors.solana) {
7692
8219
  log_default.warn("[balances] no solana connector for module", mod.type);
7693
8220
  return defer(
7694
- () => of14({
8221
+ () => of15({
7695
8222
  status: "initialising",
7696
8223
  balances: this.getStoredBalances(moduleAddressesByTokenId),
7697
8224
  failedBalanceIds: []
@@ -7705,6 +8232,11 @@ var BalancesProvider = class {
7705
8232
  }).pipe(
7706
8233
  catchError(() => EMPTY),
7707
8234
  // don't emit, let provider mark balances stale
8235
+ tap((results) => {
8236
+ if (results.dynamicTokens?.length) {
8237
+ this.#chaindataProvider.registerDynamicTokens(results.dynamicTokens);
8238
+ }
8239
+ }),
7708
8240
  map6(
7709
8241
  (results) => ({
7710
8242
  status: "live",
@@ -7738,14 +8270,14 @@ var BalancesProvider = class {
7738
8270
  if (balancesResult.status !== "live") return;
7739
8271
  const storage = this.#storage.getValue();
7740
8272
  const failedIds = new Set(balancesResult.failedBalanceIds);
7741
- const balances = assign11(
8273
+ const balances = assign12(
7742
8274
  {},
7743
8275
  storage.balances,
7744
8276
  // delete all balances expected in the result set (except the ones that failed). because if they are not present it means they are empty.
7745
8277
  fromPairs2(
7746
8278
  balanceIds.filter((bid) => !failedIds.has(bid)).map((balanceId) => [balanceId, void 0])
7747
8279
  ),
7748
- keyBy8(
8280
+ keyBy9(
7749
8281
  // storage balances must have status "cache", because they are used as start value when initialising subsequent subscriptions
7750
8282
  balancesResult.balances.map((b) => ({ ...b, status: "cache" })),
7751
8283
  (b) => getBalanceId(b)
@@ -7755,7 +8287,7 @@ var BalancesProvider = class {
7755
8287
  const balance = balances[errorBalanceId];
7756
8288
  if (balance) balance.status = "stale";
7757
8289
  }
7758
- this.#storage.next(assign11({}, storage, { balances }));
8290
+ this.#storage.next(assign12({}, storage, { balances }));
7759
8291
  }
7760
8292
  getNetworkMiniMetadatas$(networkId) {
7761
8293
  return getSharedObservable(`BalancesProvider.getNetworkMiniMetadatas$`, { networkId }, () => {
@@ -7763,11 +8295,11 @@ var BalancesProvider = class {
7763
8295
  switchMap2(
7764
8296
  (network) => isNetworkDot(network) ? this.getNetworkSpecVersion$(networkId).pipe(
7765
8297
  switchMap2(
7766
- (specVersion) => specVersion === null ? of14([]) : this.getMiniMetadatas$(networkId, specVersion)
8298
+ (specVersion) => specVersion === null ? of15([]) : this.getMiniMetadatas$(networkId, specVersion)
7767
8299
  )
7768
- ) : of14([])
8300
+ ) : of15([])
7769
8301
  ),
7770
- distinctUntilChanged10(isEqual10)
8302
+ distinctUntilChanged11(isEqual11)
7771
8303
  );
7772
8304
  });
7773
8305
  }
@@ -7783,7 +8315,7 @@ var BalancesProvider = class {
7783
8315
  ).pipe(
7784
8316
  catchError(() => {
7785
8317
  log_default.warn("Failed to fetch spec version for network", networkId);
7786
- return of14(null);
8318
+ return of15(null);
7787
8319
  })
7788
8320
  );
7789
8321
  }
@@ -7800,9 +8332,9 @@ var BalancesProvider = class {
7800
8332
  storedMiniMetadatas: this.getStoredMiniMetadatas$(miniMetadataIds)
7801
8333
  }).pipe(
7802
8334
  switchMap2(({ storedMiniMetadatas, defaultMiniMetadatas }) => {
7803
- if (defaultMiniMetadatas) return of14(defaultMiniMetadatas);
7804
- if (storedMiniMetadatas) return of14(storedMiniMetadatas);
7805
- if (!this.#chainConnectors.substrate) return of14([]);
8335
+ if (defaultMiniMetadatas) return of15(defaultMiniMetadatas);
8336
+ if (storedMiniMetadatas) return of15(storedMiniMetadatas);
8337
+ if (!this.#chainConnectors.substrate) return of15([]);
7806
8338
  return from(
7807
8339
  withRetry(
7808
8340
  () => (
@@ -7825,27 +8357,27 @@ var BalancesProvider = class {
7825
8357
  ).pipe(
7826
8358
  catchError(() => {
7827
8359
  log_default.warn("Failed to fetch metadata for network", networkId);
7828
- return of14([]);
8360
+ return of15([]);
7829
8361
  }),
7830
8362
  // and persist in storage for later reuse
7831
8363
  tap((newMiniMetadatas) => {
7832
8364
  if (!newMiniMetadatas.length) return;
7833
8365
  const storage = this.#storage.getValue();
7834
- const miniMetadatas = assign11(
8366
+ const miniMetadatas = assign12(
7835
8367
  // keep minimetadatas of other networks
7836
- keyBy8(
8368
+ keyBy9(
7837
8369
  values2(storage.miniMetadatas).filter((m) => m.chainId !== networkId),
7838
8370
  (m) => m.id
7839
8371
  ),
7840
8372
  // add the ones for our network
7841
- keyBy8(newMiniMetadatas, (m) => m.id)
8373
+ keyBy9(newMiniMetadatas, (m) => m.id)
7842
8374
  );
7843
- this.#storage.next(assign11({}, storage, { miniMetadatas }));
8375
+ this.#storage.next(assign12({}, storage, { miniMetadatas }));
7844
8376
  })
7845
8377
  );
7846
8378
  }),
7847
8379
  // emit only when mini metadata changes, as a change here would restart all subscriptions for the network
7848
- distinctUntilChanged10(isEqual10)
8380
+ distinctUntilChanged11(isEqual11)
7849
8381
  );
7850
8382
  }
7851
8383
  getStoredMiniMetadatas$(miniMetadataIds) {
@@ -7855,7 +8387,7 @@ var BalancesProvider = class {
7855
8387
  return miniMetadatas.length && miniMetadatas.every(isTruthy) ? miniMetadatas : null;
7856
8388
  }),
7857
8389
  // source changes very often
7858
- distinctUntilChanged10(isEqual10)
8390
+ distinctUntilChanged11(isEqual11)
7859
8391
  );
7860
8392
  }
7861
8393
  getDefaultMiniMetadatas$(miniMetadataIds) {
@@ -7870,7 +8402,7 @@ var BalancesProvider = class {
7870
8402
  const balanceDefs = toPairs2(addressesByToken).flatMap(
7871
8403
  ([tokenId, addresses]) => addresses.map((address) => [tokenId, address])
7872
8404
  );
7873
- return balanceDefs.map(([tokenId, address]) => this.#storage.value.balances[getBalanceId({ address, tokenId })]).filter(isNotNil9).sort(sortByBalanceId);
8405
+ return balanceDefs.map(([tokenId, address]) => this.#storage.value.balances[getBalanceId({ address, tokenId })]).filter(isNotNil10).sort(sortByBalanceId);
7874
8406
  }
7875
8407
  cleanupAddressesByTokenId$(addressesByTokenId) {
7876
8408
  return this.#chaindataProvider.getNetworksMapById$().pipe(
@@ -7881,7 +8413,7 @@ var BalancesProvider = class {
7881
8413
  const network = networksById[networkId];
7882
8414
  return [
7883
8415
  tokenId,
7884
- uniq5(addresses.map(normalizeAddress)).filter(
8416
+ uniq6(addresses.map(normalizeAddress)).filter(
7885
8417
  (address) => network && isAddressCompatibleWithNetwork(network, address)
7886
8418
  )
7887
8419
  ];
@@ -7943,6 +8475,8 @@ export {
7943
8475
  SolNativeTokenConfigSchema,
7944
8476
  SolSplBalanceModule,
7945
8477
  SolSplTokenConfigSchema,
8478
+ SolToken2022BalanceModule,
8479
+ SolToken2022TokenConfigSchema,
7946
8480
  SubAssetsBalanceModule,
7947
8481
  SubAssetsTokenConfigSchema,
7948
8482
  SubDTaoBalanceModule,