@talismn/balances 1.3.6 → 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.js CHANGED
@@ -45,12 +45,14 @@ __export(index_exports, {
45
45
  EvmUniswapV2BalanceModule: () => EvmUniswapV2BalanceModule,
46
46
  EvmUniswapV2TokenConfigSchema: () => EvmUniswapV2TokenConfigSchema,
47
47
  FiatSumBalancesFormatter: () => FiatSumBalancesFormatter,
48
- MINIMETADATA_VERSION: () => import_chaindata_provider65.MINIMETADATA_VERSION,
48
+ MINIMETADATA_VERSION: () => import_chaindata_provider72.MINIMETADATA_VERSION,
49
49
  PlanckSumBalancesFormatter: () => PlanckSumBalancesFormatter,
50
50
  SolNativeBalanceModule: () => SolNativeBalanceModule,
51
51
  SolNativeTokenConfigSchema: () => SolNativeTokenConfigSchema,
52
52
  SolSplBalanceModule: () => SolSplBalanceModule,
53
53
  SolSplTokenConfigSchema: () => SolSplTokenConfigSchema,
54
+ SolToken2022BalanceModule: () => SolToken2022BalanceModule,
55
+ SolToken2022TokenConfigSchema: () => SolToken2022TokenConfigSchema,
54
56
  SubAssetsBalanceModule: () => SubAssetsBalanceModule,
55
57
  SubAssetsTokenConfigSchema: () => SubAssetsTokenConfigSchema,
56
58
  SubDTaoBalanceModule: () => SubDTaoBalanceModule,
@@ -92,11 +94,11 @@ __export(index_exports, {
92
94
  module.exports = __toCommonJS(index_exports);
93
95
 
94
96
  // src/BalancesProvider.ts
95
- var import_chaindata_provider64 = require("@talismn/chaindata-provider");
97
+ var import_chaindata_provider71 = require("@talismn/chaindata-provider");
96
98
  var import_crypto8 = require("@talismn/crypto");
97
- var import_util16 = require("@talismn/util");
98
- var import_lodash_es27 = require("lodash-es");
99
- var import_rxjs15 = require("rxjs");
99
+ var import_util15 = require("@talismn/util");
100
+ var import_lodash_es30 = require("lodash-es");
101
+ var import_rxjs16 = require("rxjs");
100
102
  var import_viem9 = require("viem");
101
103
 
102
104
  // src/getMiniMetadatas/index.ts
@@ -108,7 +110,7 @@ var import_anylogger = __toESM(require("anylogger"));
108
110
  // package.json
109
111
  var package_default = {
110
112
  name: "@talismn/balances",
111
- version: "1.3.6",
113
+ version: "1.4.0",
112
114
  author: "Talisman",
113
115
  homepage: "https://talisman.xyz",
114
116
  license: "GPL-3.0-or-later",
@@ -160,7 +162,6 @@ var package_default = {
160
162
  devDependencies: {
161
163
  "@polkadot/api-contract": "16.1.2",
162
164
  "@polkadot/types": "16.1.2",
163
- "@polkadot/util": "13.5.3",
164
165
  "@talismn/tsconfig": "workspace:*",
165
166
  "@types/lodash-es": "4.17.12",
166
167
  typescript: "^5.6.3"
@@ -168,8 +169,6 @@ var package_default = {
168
169
  peerDependencies: {
169
170
  "@polkadot/api-contract": "*",
170
171
  "@polkadot/types": "*",
171
- "@polkadot/util": "*",
172
- "@polkadot/util-crypto": "*",
173
172
  "@substrate/txwrapper-core": "*"
174
173
  },
175
174
  types: "./dist/index.d.ts",
@@ -1901,8 +1900,8 @@ var fetchBalances4 = async ({
1901
1900
  const results = await Promise.allSettled(
1902
1901
  balanceDefs.map(async ({ token, address }) => {
1903
1902
  try {
1904
- const publicKey2 = new import_web3.PublicKey(address);
1905
- const lamports = await connection.getBalance(publicKey2);
1903
+ const publicKey3 = new import_web3.PublicKey(address);
1904
+ const lamports = await connection.getBalance(publicKey3);
1906
1905
  return {
1907
1906
  address,
1908
1907
  tokenId: token.id,
@@ -2055,8 +2054,8 @@ var MODULE_TYPE5 = import_chaindata_provider19.SolSplTokenSchema.shape.type.valu
2055
2054
  var PLATFORM5 = import_chaindata_provider19.SolSplTokenSchema.shape.platform.value;
2056
2055
 
2057
2056
  // src/modules/sol-spl/fetchBalances.ts
2058
- var import_web33 = require("@solana/web3.js");
2059
- var import_chaindata_provider21 = require("@talismn/chaindata-provider");
2057
+ var import_web34 = require("@solana/web3.js");
2058
+ var import_chaindata_provider22 = require("@talismn/chaindata-provider");
2060
2059
  var import_util2 = require("@talismn/util");
2061
2060
  var import_lodash_es12 = require("lodash-es");
2062
2061
 
@@ -2213,8 +2212,77 @@ var getDetectedTokensIds$ = (address) => tokenIdsByAddress.pipe(
2213
2212
  (0, import_rxjs6.distinctUntilChanged)(import_lodash_es11.isEqual)
2214
2213
  );
2215
2214
 
2215
+ // src/modules/sol-spl/onChainTokenMetadata.ts
2216
+ var import_mpl_token_metadata = require("@metaplex-foundation/mpl-token-metadata");
2217
+ var import_umi = require("@metaplex-foundation/umi");
2218
+ var import_spl_token = require("@solana/spl-token");
2219
+ var import_web33 = require("@solana/web3.js");
2220
+ var import_chaindata_provider21 = require("@talismn/chaindata-provider");
2221
+ var import_v47 = __toESM(require("zod/v4"));
2222
+ var TokenCacheSchema3 = import_v47.default.discriminatedUnion("isValid", [
2223
+ import_v47.default.strictObject({
2224
+ id: import_chaindata_provider21.SolSplTokenSchema.shape.id,
2225
+ isValid: import_v47.default.literal(true),
2226
+ ...import_chaindata_provider21.SolSplTokenSchema.pick({ symbol: true, decimals: true, name: true, logo: true }).shape
2227
+ }),
2228
+ import_v47.default.strictObject({
2229
+ id: import_chaindata_provider21.SolSplTokenSchema.shape.id,
2230
+ isValid: import_v47.default.literal(false)
2231
+ })
2232
+ ]);
2233
+ var METAPLEX_PROGRAM_ID = new import_web33.PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
2234
+ var ERROR_NO_MINT = "No mint info available";
2235
+ var ERROR_NO_METADATA = "No metadata account found";
2236
+ var ERROR_INVALID_DATA = "Invalid on-chain data";
2237
+ var fetchOnChainTokenData = async (connector, tokenId) => {
2238
+ try {
2239
+ const { networkId, mintAddress } = (0, import_chaindata_provider21.parseSolSplTokenId)(tokenId);
2240
+ const connection = await connector.getConnection(networkId);
2241
+ if (!connection) {
2242
+ log_default.warn(`No connection found for network ${networkId}`);
2243
+ return null;
2244
+ }
2245
+ const mintPubKey = new import_web33.PublicKey(mintAddress);
2246
+ const mintInfo = await connection.getAccountInfo(mintPubKey);
2247
+ if (!mintInfo?.data) throw new Error(ERROR_NO_MINT);
2248
+ const mint = import_spl_token.MintLayout.decode(mintInfo.data);
2249
+ const [metadataPDA] = import_web33.PublicKey.findProgramAddressSync(
2250
+ [Buffer.from("metadata"), METAPLEX_PROGRAM_ID.toBuffer(), mintPubKey.toBuffer()],
2251
+ METAPLEX_PROGRAM_ID
2252
+ );
2253
+ const metadataAccount = await connection.getAccountInfo(new import_web33.PublicKey(metadataPDA));
2254
+ if (!metadataAccount) throw new Error(ERROR_NO_METADATA);
2255
+ const metadata = (0, import_mpl_token_metadata.deserializeMetadata)({
2256
+ publicKey: (0, import_umi.publicKey)(metadataPDA),
2257
+ executable: metadataAccount.executable,
2258
+ owner: (0, import_umi.publicKey)(metadataAccount.owner),
2259
+ lamports: (0, import_umi.sol)(metadataAccount.lamports),
2260
+ data: metadataAccount.data
2261
+ });
2262
+ const parsed = TokenCacheSchema3.safeParse({
2263
+ id: tokenId,
2264
+ symbol: metadata.symbol.trim(),
2265
+ name: metadata.name.trim(),
2266
+ decimals: mint.decimals,
2267
+ isValid: true
2268
+ });
2269
+ if (!parsed.success) throw new Error(ERROR_INVALID_DATA);
2270
+ return parsed.data;
2271
+ } catch (err) {
2272
+ const msg = err.message;
2273
+ if ([ERROR_NO_MINT, ERROR_NO_METADATA, ERROR_INVALID_DATA].includes(msg))
2274
+ return TokenCacheSchema3.parse({
2275
+ id: tokenId,
2276
+ isValid: false
2277
+ });
2278
+ log_default.warn("Failed to fetch sol-spl token data for %s", tokenId, { err });
2279
+ }
2280
+ return null;
2281
+ };
2282
+
2216
2283
  // src/modules/sol-spl/fetchBalances.ts
2217
2284
  var SPL_PROGRAM_ID = "TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA";
2285
+ var dynamicTokenMetadataCache = /* @__PURE__ */ new Map();
2218
2286
  var fetchBalances5 = async ({
2219
2287
  networkId,
2220
2288
  tokensWithAddresses,
@@ -2224,18 +2292,22 @@ var fetchBalances5 = async ({
2224
2292
  const connection = await connector.getConnection(networkId);
2225
2293
  if (!connection) throw new Error(`Could not get connection for Solana network ${networkId}`);
2226
2294
  const accountAddresses = (0, import_lodash_es12.uniq)(tokensWithAddresses.flatMap(([, addresses]) => addresses));
2295
+ const knownTokenIds = new Set(tokensWithAddresses.map(([token]) => token.id));
2296
+ const unknownMints = /* @__PURE__ */ new Set();
2227
2297
  const balancesPerAddress = await Promise.all(
2228
2298
  accountAddresses.map(async (address) => {
2229
- const tokenAccounts = await connection.getParsedTokenAccountsByOwner(new import_web33.PublicKey(address), {
2230
- programId: new import_web33.PublicKey(SPL_PROGRAM_ID)
2299
+ const tokenAccounts = await connection.getParsedTokenAccountsByOwner(new import_web34.PublicKey(address), {
2300
+ programId: new import_web34.PublicKey(SPL_PROGRAM_ID)
2231
2301
  // SPL Token Program ID
2232
2302
  });
2233
2303
  const balances = tokenAccounts.value.map((d) => {
2234
2304
  try {
2235
2305
  const mintAddress = d.account.data.parsed.info.mint;
2236
2306
  const value = d.account.data.parsed.info.tokenAmount.amount ?? "0";
2307
+ const tokenId = (0, import_chaindata_provider22.solSplTokenId)(networkId, mintAddress);
2308
+ if (!knownTokenIds.has(tokenId) && value !== "0") unknownMints.add(mintAddress);
2237
2309
  return {
2238
- tokenId: (0, import_chaindata_provider21.solSplTokenId)(networkId, mintAddress),
2310
+ tokenId,
2239
2311
  networkId,
2240
2312
  address,
2241
2313
  source: MODULE_TYPE5,
@@ -2258,6 +2330,42 @@ var fetchBalances5 = async ({
2258
2330
  return [address, balances];
2259
2331
  })
2260
2332
  );
2333
+ const dynamicTokens = [];
2334
+ if (unknownMints.size) {
2335
+ await Promise.all(
2336
+ Array.from(unknownMints).map(async (mintAddress) => {
2337
+ const tokenId = (0, import_chaindata_provider22.solSplTokenId)(networkId, mintAddress);
2338
+ let cached = dynamicTokenMetadataCache.get(tokenId);
2339
+ if (!cached) {
2340
+ const fetched = await fetchOnChainTokenData(connector, tokenId);
2341
+ if (fetched) {
2342
+ dynamicTokenMetadataCache.set(tokenId, fetched);
2343
+ cached = fetched;
2344
+ }
2345
+ }
2346
+ if (!cached || !cached.isValid) return;
2347
+ const token = {
2348
+ id: tokenId,
2349
+ type: MODULE_TYPE5,
2350
+ platform: PLATFORM5,
2351
+ networkId,
2352
+ mintAddress,
2353
+ isDefault: true,
2354
+ symbol: cached.symbol,
2355
+ decimals: cached.decimals,
2356
+ ...cached.name !== void 0 ? { name: cached.name } : {},
2357
+ ...cached.logo !== void 0 ? { logo: cached.logo } : {}
2358
+ };
2359
+ const parsed = import_chaindata_provider22.SolSplTokenSchema.safeParse(token);
2360
+ if (!parsed.success) {
2361
+ log_default.warn("Ignoring dynamic sol-spl token with invalid schema", { token });
2362
+ return;
2363
+ }
2364
+ dynamicTokens.push(parsed.data);
2365
+ })
2366
+ );
2367
+ }
2368
+ const registeredDynamicIds = new Set(dynamicTokens.map((t) => t.id));
2261
2369
  const allBalancesByKey = (0, import_lodash_es12.keyBy)(
2262
2370
  balancesPerAddress.flatMap(([, addressBalances]) => addressBalances),
2263
2371
  (b) => getBalanceKey(b.tokenId, b.address)
@@ -2274,30 +2382,16 @@ var fetchBalances5 = async ({
2274
2382
  value: "0"
2275
2383
  };
2276
2384
  });
2277
- return { success, errors: [] };
2385
+ for (const balance of balancesPerAddress.flatMap(([, addressBalances]) => addressBalances)) {
2386
+ if (registeredDynamicIds.has(balance.tokenId)) success.push(balance);
2387
+ }
2388
+ return { success, errors: [], dynamicTokens };
2278
2389
  };
2279
2390
  var getBalanceKey = (tokenId, address) => `${tokenId}:${address}`;
2280
2391
 
2281
2392
  // src/modules/sol-spl/fetchTokens.ts
2282
- var import_mpl_token_metadata = require("@metaplex-foundation/mpl-token-metadata");
2283
- var import_umi = require("@metaplex-foundation/umi");
2284
- var import_spl_token = require("@solana/spl-token");
2285
- var import_web34 = require("@solana/web3.js");
2286
- var import_chaindata_provider22 = require("@talismn/chaindata-provider");
2393
+ var import_chaindata_provider23 = require("@talismn/chaindata-provider");
2287
2394
  var import_lodash_es13 = require("lodash-es");
2288
- var import_v47 = __toESM(require("zod/v4"));
2289
- var TokenCacheSchema3 = import_v47.default.discriminatedUnion("isValid", [
2290
- import_v47.default.strictObject({
2291
- id: import_chaindata_provider22.SolSplTokenSchema.shape.id,
2292
- isValid: import_v47.default.literal(true),
2293
- ...import_chaindata_provider22.SolSplTokenSchema.pick({ symbol: true, decimals: true, name: true, logo: true }).shape
2294
- }),
2295
- import_v47.default.strictObject({
2296
- id: import_chaindata_provider22.SolSplTokenSchema.shape.id,
2297
- isValid: import_v47.default.literal(false)
2298
- })
2299
- ]);
2300
- var METAPLEX_PROGRAM_ID = new import_web34.PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
2301
2395
  var fetchTokens5 = async ({
2302
2396
  networkId,
2303
2397
  tokens,
@@ -2306,7 +2400,7 @@ var fetchTokens5 = async ({
2306
2400
  }) => {
2307
2401
  const result = [];
2308
2402
  for (const tokenConfig of tokens) {
2309
- const tokenId = (0, import_chaindata_provider22.solSplTokenId)(networkId, tokenConfig.mintAddress);
2403
+ const tokenId = (0, import_chaindata_provider23.solSplTokenId)(networkId, tokenConfig.mintAddress);
2310
2404
  let cached = cache[tokenId] && TokenCacheSchema3.safeParse(cache[tokenId]).data;
2311
2405
  if (!cached) {
2312
2406
  const tokenInfo = await fetchOnChainTokenData(connector, tokenId);
@@ -2325,7 +2419,7 @@ var fetchTokens5 = async ({
2325
2419
  cached?.isValid ? (0, import_lodash_es13.omit)(cached, ["isValid"]) : {},
2326
2420
  tokenConfig
2327
2421
  );
2328
- const parsed = import_chaindata_provider22.SolSplTokenSchema.safeParse(token);
2422
+ const parsed = import_chaindata_provider23.SolSplTokenSchema.safeParse(token);
2329
2423
  if (!parsed.success) {
2330
2424
  log_default.warn("Ignoring token with invalid SolSplTokenSchema", {
2331
2425
  token
@@ -2336,54 +2430,6 @@ var fetchTokens5 = async ({
2336
2430
  }
2337
2431
  return result;
2338
2432
  };
2339
- var ERROR_NO_MINT = "No mint info available";
2340
- var ERROR_NO_METADATA = "No metadata account found";
2341
- var ERROR_INVALID_DATA = "Invalid on-chain data";
2342
- var fetchOnChainTokenData = async (connector, tokenId) => {
2343
- try {
2344
- const { networkId, mintAddress } = (0, import_chaindata_provider22.parseSolSplTokenId)(tokenId);
2345
- const connection = await connector.getConnection(networkId);
2346
- if (!connection) {
2347
- log_default.warn(`No connection found for network ${networkId}`);
2348
- return null;
2349
- }
2350
- const mintPubKey = new import_web34.PublicKey(mintAddress);
2351
- const mintInfo = await connection.getAccountInfo(mintPubKey);
2352
- if (!mintInfo?.data) throw new Error(ERROR_NO_MINT);
2353
- const mint = import_spl_token.MintLayout.decode(mintInfo.data);
2354
- const [metadataPDA] = import_web34.PublicKey.findProgramAddressSync(
2355
- [Buffer.from("metadata"), METAPLEX_PROGRAM_ID.toBuffer(), mintPubKey.toBuffer()],
2356
- METAPLEX_PROGRAM_ID
2357
- );
2358
- const metadataAccount = await connection.getAccountInfo(new import_web34.PublicKey(metadataPDA));
2359
- if (!metadataAccount) throw new Error(ERROR_NO_METADATA);
2360
- const metadata = (0, import_mpl_token_metadata.deserializeMetadata)({
2361
- publicKey: (0, import_umi.publicKey)(metadataPDA),
2362
- executable: metadataAccount.executable,
2363
- owner: (0, import_umi.publicKey)(metadataAccount.owner),
2364
- lamports: (0, import_umi.sol)(metadataAccount.lamports),
2365
- data: metadataAccount.data
2366
- });
2367
- const parsed = TokenCacheSchema3.safeParse({
2368
- id: tokenId,
2369
- symbol: metadata.symbol.trim(),
2370
- name: metadata.name.trim(),
2371
- decimals: mint.decimals,
2372
- isValid: true
2373
- });
2374
- if (!parsed.success) throw new Error(ERROR_INVALID_DATA);
2375
- return parsed.data;
2376
- } catch (err) {
2377
- const msg = err.message;
2378
- if ([ERROR_NO_MINT, ERROR_NO_METADATA, ERROR_INVALID_DATA].includes(msg))
2379
- return TokenCacheSchema3.parse({
2380
- id: tokenId,
2381
- isValid: false
2382
- });
2383
- log_default.warn("Failed to fetch sol-spl token data for %s", tokenId, { err });
2384
- }
2385
- return null;
2386
- };
2387
2433
 
2388
2434
  // src/modules/sol-spl/getMiniMetadata.ts
2389
2435
  var getMiniMetadata5 = () => {
@@ -2393,9 +2439,9 @@ var getMiniMetadata5 = () => {
2393
2439
  // src/modules/sol-spl/getTransferCallData.ts
2394
2440
  var import_spl_token2 = require("@solana/spl-token");
2395
2441
  var import_web35 = require("@solana/web3.js");
2396
- var import_chaindata_provider23 = require("@talismn/chaindata-provider");
2442
+ var import_chaindata_provider24 = require("@talismn/chaindata-provider");
2397
2443
  var getTransferCallData5 = async ({ from: from2, to, value, token, connector }) => {
2398
- if (!(0, import_chaindata_provider23.isTokenOfType)(token, MODULE_TYPE5))
2444
+ if (!(0, import_chaindata_provider24.isTokenOfType)(token, MODULE_TYPE5))
2399
2445
  throw new Error(`Token type ${token.type} is not ${MODULE_TYPE5}.`);
2400
2446
  const connection = await connector.getConnection(token.networkId);
2401
2447
  const instructions = [];
@@ -2488,21 +2534,476 @@ var SolSplBalanceModule = {
2488
2534
  };
2489
2535
 
2490
2536
  // src/modules/sol-spl/types.ts
2491
- var import_chaindata_provider24 = require("@talismn/chaindata-provider");
2537
+ var import_chaindata_provider25 = require("@talismn/chaindata-provider");
2492
2538
  var import_v48 = __toESM(require("zod/v4"));
2493
2539
  var SolSplTokenConfigSchema = import_v48.default.strictObject({
2494
- mintAddress: import_chaindata_provider24.SolSplTokenSchema.shape.mintAddress,
2540
+ mintAddress: import_chaindata_provider25.SolSplTokenSchema.shape.mintAddress,
2541
+ ...TokenConfigBaseSchema.shape
2542
+ });
2543
+
2544
+ // src/modules/sol-token2022/config.ts
2545
+ var import_chaindata_provider26 = require("@talismn/chaindata-provider");
2546
+ var MODULE_TYPE6 = import_chaindata_provider26.SolToken2022TokenSchema.shape.type.value;
2547
+ var PLATFORM6 = import_chaindata_provider26.SolToken2022TokenSchema.shape.platform.value;
2548
+
2549
+ // src/modules/sol-token2022/fetchBalances.ts
2550
+ var import_web37 = require("@solana/web3.js");
2551
+ var import_chaindata_provider28 = require("@talismn/chaindata-provider");
2552
+ var import_util3 = require("@talismn/util");
2553
+ var import_lodash_es15 = require("lodash-es");
2554
+
2555
+ // src/modules/sol-token2022/onChainTokenMetadata.ts
2556
+ var import_mpl_token_metadata2 = require("@metaplex-foundation/mpl-token-metadata");
2557
+ var import_umi2 = require("@metaplex-foundation/umi");
2558
+ var import_spl_token3 = require("@solana/spl-token");
2559
+ var import_web36 = require("@solana/web3.js");
2560
+ var import_chaindata_provider27 = require("@talismn/chaindata-provider");
2561
+ var import_v49 = __toESM(require("zod/v4"));
2562
+ var TokenCacheSchema4 = import_v49.default.discriminatedUnion("isValid", [
2563
+ import_v49.default.strictObject({
2564
+ id: import_chaindata_provider27.SolToken2022TokenSchema.shape.id,
2565
+ isValid: import_v49.default.literal(true),
2566
+ ...import_chaindata_provider27.SolToken2022TokenSchema.pick({ symbol: true, decimals: true, name: true, logo: true }).shape
2567
+ }),
2568
+ import_v49.default.strictObject({
2569
+ id: import_chaindata_provider27.SolToken2022TokenSchema.shape.id,
2570
+ isValid: import_v49.default.literal(false)
2571
+ })
2572
+ ]);
2573
+ var METAPLEX_PROGRAM_ID2 = new import_web36.PublicKey("metaqbxxUerdq28cj1RbAWkYQm3ybzjb6a8bt518x1s");
2574
+ var ERROR_NO_MINT2 = "No mint info available";
2575
+ var ERROR_NO_METADATA2 = "No metadata account found";
2576
+ var ERROR_INVALID_DATA2 = "Invalid on-chain data";
2577
+ var fetchOnChainTokenData2 = async (connector, tokenId) => {
2578
+ try {
2579
+ const { networkId, mintAddress } = (0, import_chaindata_provider27.parseSolToken2022TokenId)(tokenId);
2580
+ const connection = await connector.getConnection(networkId);
2581
+ if (!connection) {
2582
+ log_default.warn(`No connection found for network ${networkId}`);
2583
+ return null;
2584
+ }
2585
+ const mintPubKey = new import_web36.PublicKey(mintAddress);
2586
+ const mintInfo = await connection.getAccountInfo(mintPubKey);
2587
+ if (!mintInfo?.data) throw new Error(ERROR_NO_MINT2);
2588
+ const mint = import_spl_token3.MintLayout.decode(mintInfo.data);
2589
+ const token2022Metadata = tryParseToken2022Metadata(mintInfo.data);
2590
+ if (token2022Metadata) {
2591
+ const parsed2 = TokenCacheSchema4.safeParse({
2592
+ id: tokenId,
2593
+ symbol: token2022Metadata.symbol.trim(),
2594
+ name: token2022Metadata.name.trim(),
2595
+ decimals: mint.decimals,
2596
+ isValid: true
2597
+ });
2598
+ if (parsed2.success) return parsed2.data;
2599
+ }
2600
+ const [metadataPDA] = import_web36.PublicKey.findProgramAddressSync(
2601
+ [Buffer.from("metadata"), METAPLEX_PROGRAM_ID2.toBuffer(), mintPubKey.toBuffer()],
2602
+ METAPLEX_PROGRAM_ID2
2603
+ );
2604
+ const metadataAccount = await connection.getAccountInfo(new import_web36.PublicKey(metadataPDA));
2605
+ if (!metadataAccount) throw new Error(ERROR_NO_METADATA2);
2606
+ const metadata = (0, import_mpl_token_metadata2.deserializeMetadata)({
2607
+ publicKey: (0, import_umi2.publicKey)(metadataPDA),
2608
+ executable: metadataAccount.executable,
2609
+ owner: (0, import_umi2.publicKey)(metadataAccount.owner),
2610
+ lamports: (0, import_umi2.sol)(metadataAccount.lamports),
2611
+ data: metadataAccount.data
2612
+ });
2613
+ const parsed = TokenCacheSchema4.safeParse({
2614
+ id: tokenId,
2615
+ symbol: metadata.symbol.trim(),
2616
+ name: metadata.name.trim(),
2617
+ decimals: mint.decimals,
2618
+ isValid: true
2619
+ });
2620
+ if (!parsed.success) throw new Error(ERROR_INVALID_DATA2);
2621
+ return parsed.data;
2622
+ } catch (err) {
2623
+ const msg = err.message;
2624
+ if ([ERROR_NO_MINT2, ERROR_NO_METADATA2, ERROR_INVALID_DATA2].includes(msg))
2625
+ return TokenCacheSchema4.parse({
2626
+ id: tokenId,
2627
+ isValid: false
2628
+ });
2629
+ log_default.warn("Failed to fetch sol-token2022 token data for %s", tokenId, { err });
2630
+ }
2631
+ return null;
2632
+ };
2633
+ var tryParseToken2022Metadata = (data) => {
2634
+ try {
2635
+ const TLV_START = 166;
2636
+ if (data.length <= TLV_START) return null;
2637
+ let offset = TLV_START;
2638
+ while (offset + 4 <= data.length) {
2639
+ const extType = data.readUInt16LE(offset);
2640
+ const extLen = data.readUInt16LE(offset + 2);
2641
+ const extDataStart = offset + 4;
2642
+ if (extType === 19 && extDataStart + extLen <= data.length) {
2643
+ let pos = extDataStart;
2644
+ pos += 64;
2645
+ const readLenPrefixed = () => {
2646
+ if (pos + 4 > data.length) throw new Error("out of bounds");
2647
+ const len = data.readUInt32LE(pos);
2648
+ pos += 4;
2649
+ if (pos + len > data.length) throw new Error("out of bounds");
2650
+ const str = data.subarray(pos, pos + len).toString("utf8");
2651
+ pos += len;
2652
+ return str;
2653
+ };
2654
+ const name = readLenPrefixed();
2655
+ const symbol = readLenPrefixed();
2656
+ const uri = readLenPrefixed();
2657
+ if (name && symbol) return { name, symbol, uri };
2658
+ }
2659
+ offset = extDataStart + extLen;
2660
+ }
2661
+ } catch {
2662
+ }
2663
+ return null;
2664
+ };
2665
+
2666
+ // src/modules/sol-token2022/fetchBalances.ts
2667
+ var TOKEN_2022_PROGRAM_ID = "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb";
2668
+ var dynamicTokenMetadataCache2 = /* @__PURE__ */ new Map();
2669
+ var fetchBalances6 = async ({
2670
+ networkId,
2671
+ tokensWithAddresses,
2672
+ connector
2673
+ }) => {
2674
+ if (!tokensWithAddresses.length) return { success: [], errors: [] };
2675
+ const connection = await connector.getConnection(networkId);
2676
+ if (!connection) throw new Error(`Could not get connection for Solana network ${networkId}`);
2677
+ const accountAddresses = (0, import_lodash_es15.uniq)(tokensWithAddresses.flatMap(([, addresses]) => addresses));
2678
+ const knownTokenIds = new Set(tokensWithAddresses.map(([token]) => token.id));
2679
+ const unknownMints = /* @__PURE__ */ new Set();
2680
+ const balancesPerAddress = await Promise.all(
2681
+ accountAddresses.map(async (address) => {
2682
+ const tokenAccounts = await connection.getParsedTokenAccountsByOwner(new import_web37.PublicKey(address), {
2683
+ programId: new import_web37.PublicKey(TOKEN_2022_PROGRAM_ID)
2684
+ });
2685
+ const balances = tokenAccounts.value.map((d) => {
2686
+ try {
2687
+ const mintAddress = d.account.data.parsed.info.mint;
2688
+ const value = d.account.data.parsed.info.tokenAmount.amount ?? "0";
2689
+ const tokenId = (0, import_chaindata_provider28.solToken2022TokenId)(networkId, mintAddress);
2690
+ if (!knownTokenIds.has(tokenId) && value !== "0") unknownMints.add(mintAddress);
2691
+ return {
2692
+ tokenId,
2693
+ networkId,
2694
+ address,
2695
+ source: MODULE_TYPE6,
2696
+ status: "live",
2697
+ value
2698
+ };
2699
+ } catch {
2700
+ log_default.warn("Failed to parse token amount", {
2701
+ address,
2702
+ d
2703
+ });
2704
+ return null;
2705
+ }
2706
+ }).filter(import_util3.isNotNil);
2707
+ setDetectedTokenIds(
2708
+ address,
2709
+ MODULE_TYPE6,
2710
+ balances.map((b) => b.tokenId)
2711
+ );
2712
+ return [address, balances];
2713
+ })
2714
+ );
2715
+ const dynamicTokens = [];
2716
+ if (unknownMints.size) {
2717
+ await Promise.all(
2718
+ Array.from(unknownMints).map(async (mintAddress) => {
2719
+ const tokenId = (0, import_chaindata_provider28.solToken2022TokenId)(networkId, mintAddress);
2720
+ let cached = dynamicTokenMetadataCache2.get(tokenId);
2721
+ if (!cached) {
2722
+ const fetched = await fetchOnChainTokenData2(connector, tokenId);
2723
+ if (fetched) {
2724
+ dynamicTokenMetadataCache2.set(tokenId, fetched);
2725
+ cached = fetched;
2726
+ }
2727
+ }
2728
+ if (!cached || !cached.isValid) return;
2729
+ const token = {
2730
+ id: tokenId,
2731
+ type: MODULE_TYPE6,
2732
+ platform: PLATFORM6,
2733
+ networkId,
2734
+ mintAddress,
2735
+ isDefault: true,
2736
+ symbol: cached.symbol,
2737
+ decimals: cached.decimals,
2738
+ ...cached.name !== void 0 ? { name: cached.name } : {},
2739
+ ...cached.logo !== void 0 ? { logo: cached.logo } : {}
2740
+ };
2741
+ const parsed = import_chaindata_provider28.SolToken2022TokenSchema.safeParse(token);
2742
+ if (!parsed.success) {
2743
+ log_default.warn("Ignoring dynamic sol-token2022 token with invalid schema", { token });
2744
+ return;
2745
+ }
2746
+ dynamicTokens.push(parsed.data);
2747
+ })
2748
+ );
2749
+ }
2750
+ const registeredDynamicIds = new Set(dynamicTokens.map((t) => t.id));
2751
+ const allBalancesByKey = (0, import_lodash_es15.keyBy)(
2752
+ balancesPerAddress.flatMap(([, addressBalances]) => addressBalances),
2753
+ (b) => getBalanceKey2(b.tokenId, b.address)
2754
+ );
2755
+ const balanceDefs = getBalanceDefs(tokensWithAddresses);
2756
+ const success = balanceDefs.map((bd) => {
2757
+ const found = allBalancesByKey[getBalanceKey2(bd.token.id, bd.address)];
2758
+ return found ?? {
2759
+ tokenId: bd.token.id,
2760
+ networkId: bd.token.networkId,
2761
+ address: bd.address,
2762
+ source: MODULE_TYPE6,
2763
+ status: "live",
2764
+ value: "0"
2765
+ };
2766
+ });
2767
+ for (const balance of balancesPerAddress.flatMap(([, addressBalances]) => addressBalances)) {
2768
+ if (registeredDynamicIds.has(balance.tokenId)) success.push(balance);
2769
+ }
2770
+ return { success, errors: [], dynamicTokens };
2771
+ };
2772
+ var getBalanceKey2 = (tokenId, address) => `${tokenId}:${address}`;
2773
+
2774
+ // src/modules/sol-token2022/fetchTokens.ts
2775
+ var import_chaindata_provider29 = require("@talismn/chaindata-provider");
2776
+ var import_lodash_es16 = require("lodash-es");
2777
+ var fetchTokens6 = async ({
2778
+ networkId,
2779
+ tokens,
2780
+ connector,
2781
+ cache
2782
+ }) => {
2783
+ const result = [];
2784
+ for (const tokenConfig of tokens) {
2785
+ const tokenId = (0, import_chaindata_provider29.solToken2022TokenId)(networkId, tokenConfig.mintAddress);
2786
+ let cached = cache[tokenId] && TokenCacheSchema4.safeParse(cache[tokenId]).data;
2787
+ if (!cached) {
2788
+ const tokenInfo = await fetchOnChainTokenData2(connector, tokenId);
2789
+ if (tokenInfo) cache[tokenId] = tokenInfo;
2790
+ }
2791
+ cached = cache[tokenId] && TokenCacheSchema4.safeParse(cache[tokenId]).data;
2792
+ if (cached?.isValid === false) continue;
2793
+ const base = {
2794
+ id: tokenId,
2795
+ type: MODULE_TYPE6,
2796
+ platform: PLATFORM6,
2797
+ networkId
2798
+ };
2799
+ const token = (0, import_lodash_es16.assign)(
2800
+ base,
2801
+ cached?.isValid ? (0, import_lodash_es16.omit)(cached, ["isValid"]) : {},
2802
+ tokenConfig
2803
+ );
2804
+ const parsed = import_chaindata_provider29.SolToken2022TokenSchema.safeParse(token);
2805
+ if (!parsed.success) {
2806
+ log_default.warn("Ignoring token with invalid SolToken2022TokenSchema", {
2807
+ token
2808
+ });
2809
+ continue;
2810
+ }
2811
+ result.push(parsed.data);
2812
+ }
2813
+ return result;
2814
+ };
2815
+
2816
+ // src/modules/sol-token2022/getMiniMetadata.ts
2817
+ var getMiniMetadata6 = () => {
2818
+ throw new Error("MiniMetadata is not supported for solana tokens");
2819
+ };
2820
+
2821
+ // src/modules/sol-token2022/getTransferCallData.ts
2822
+ var import_spl_token4 = require("@solana/spl-token");
2823
+ var import_web38 = require("@solana/web3.js");
2824
+ var import_chaindata_provider30 = require("@talismn/chaindata-provider");
2825
+ var getTransferCallData6 = async ({ from: from2, to, value, token, connector }) => {
2826
+ if (!(0, import_chaindata_provider30.isTokenOfType)(token, MODULE_TYPE6))
2827
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE6}.`);
2828
+ const connection = await connector.getConnection(token.networkId);
2829
+ const mintPubkey = new import_web38.PublicKey(token.mintAddress);
2830
+ const fromWallet = new import_web38.PublicKey(from2);
2831
+ const toWallet = new import_web38.PublicKey(to);
2832
+ const mintAccount = await (0, import_spl_token4.getMint)(connection, mintPubkey, void 0, import_spl_token4.TOKEN_2022_PROGRAM_ID);
2833
+ const nonTransferable = (0, import_spl_token4.getNonTransferable)(mintAccount);
2834
+ if (nonTransferable) throw new Error("This token is non-transferable.");
2835
+ const transferFeeConfig = (0, import_spl_token4.getTransferFeeConfig)(mintAccount);
2836
+ const transferHook = (0, import_spl_token4.getTransferHook)(mintAccount);
2837
+ const instructions = [];
2838
+ const fromTokenAccount = await (0, import_spl_token4.getAssociatedTokenAddress)(
2839
+ mintPubkey,
2840
+ fromWallet,
2841
+ false,
2842
+ import_spl_token4.TOKEN_2022_PROGRAM_ID
2843
+ );
2844
+ const toTokenAccount = await (0, import_spl_token4.getAssociatedTokenAddress)(
2845
+ mintPubkey,
2846
+ toWallet,
2847
+ false,
2848
+ import_spl_token4.TOKEN_2022_PROGRAM_ID
2849
+ );
2850
+ if (!await tokenAccountExists2(connection, toTokenAccount)) {
2851
+ instructions.push(
2852
+ (0, import_spl_token4.createAssociatedTokenAccountInstruction)(
2853
+ fromWallet,
2854
+ toTokenAccount,
2855
+ toWallet,
2856
+ mintPubkey,
2857
+ import_spl_token4.TOKEN_2022_PROGRAM_ID
2858
+ )
2859
+ );
2860
+ }
2861
+ const amount = BigInt(value);
2862
+ const transferFee = transferFeeConfig ? await calculateCurrentEpochTransferFee(connection, transferFeeConfig, amount) : 0n;
2863
+ if (transferFeeConfig && transferHook) {
2864
+ instructions.push(
2865
+ await (0, import_spl_token4.createTransferCheckedWithFeeAndTransferHookInstruction)(
2866
+ connection,
2867
+ fromTokenAccount,
2868
+ mintPubkey,
2869
+ toTokenAccount,
2870
+ fromWallet,
2871
+ amount,
2872
+ token.decimals,
2873
+ transferFee,
2874
+ [],
2875
+ void 0,
2876
+ import_spl_token4.TOKEN_2022_PROGRAM_ID
2877
+ )
2878
+ );
2879
+ } else if (transferFeeConfig) {
2880
+ instructions.push(
2881
+ (0, import_spl_token4.createTransferCheckedWithFeeInstruction)(
2882
+ fromTokenAccount,
2883
+ mintPubkey,
2884
+ toTokenAccount,
2885
+ fromWallet,
2886
+ amount,
2887
+ token.decimals,
2888
+ transferFee,
2889
+ [],
2890
+ import_spl_token4.TOKEN_2022_PROGRAM_ID
2891
+ )
2892
+ );
2893
+ } else if (transferHook) {
2894
+ instructions.push(
2895
+ await (0, import_spl_token4.createTransferCheckedWithTransferHookInstruction)(
2896
+ connection,
2897
+ fromTokenAccount,
2898
+ mintPubkey,
2899
+ toTokenAccount,
2900
+ fromWallet,
2901
+ amount,
2902
+ token.decimals,
2903
+ [],
2904
+ void 0,
2905
+ import_spl_token4.TOKEN_2022_PROGRAM_ID
2906
+ )
2907
+ );
2908
+ } else {
2909
+ instructions.push(
2910
+ (0, import_spl_token4.createTransferCheckedInstruction)(
2911
+ fromTokenAccount,
2912
+ mintPubkey,
2913
+ toTokenAccount,
2914
+ fromWallet,
2915
+ amount,
2916
+ token.decimals,
2917
+ [],
2918
+ import_spl_token4.TOKEN_2022_PROGRAM_ID
2919
+ )
2920
+ );
2921
+ }
2922
+ return instructions;
2923
+ };
2924
+ var tokenAccountExists2 = async (connection, address) => {
2925
+ try {
2926
+ await (0, import_spl_token4.getAccount)(connection, address, void 0, import_spl_token4.TOKEN_2022_PROGRAM_ID);
2927
+ return true;
2928
+ } catch {
2929
+ return false;
2930
+ }
2931
+ };
2932
+ var calculateToken2022TransferFee = (transferFeeConfig, epoch, amount) => {
2933
+ return (0, import_spl_token4.calculateEpochFee)(transferFeeConfig, epoch, amount);
2934
+ };
2935
+ var calculateCurrentEpochTransferFee = async (connection, transferFeeConfig, amount) => {
2936
+ const { epoch } = await connection.getEpochInfo();
2937
+ return calculateToken2022TransferFee(transferFeeConfig, BigInt(epoch), amount);
2938
+ };
2939
+
2940
+ // src/modules/sol-token2022/subscribeBalances.ts
2941
+ var import_lodash_es17 = require("lodash-es");
2942
+ var import_rxjs8 = require("rxjs");
2943
+ var SUBSCRIPTION_INTERVAL6 = 6e3;
2944
+ var subscribeBalances6 = ({
2945
+ networkId,
2946
+ tokensWithAddresses,
2947
+ connector
2948
+ }) => {
2949
+ if (!tokensWithAddresses.length) return (0, import_rxjs8.of)({ success: [], errors: [] });
2950
+ return new import_rxjs8.Observable((subscriber) => {
2951
+ const abortController = new AbortController();
2952
+ const poll = async () => {
2953
+ try {
2954
+ if (abortController.signal.aborted) return;
2955
+ const balances = await fetchBalances6({
2956
+ networkId,
2957
+ tokensWithAddresses,
2958
+ connector
2959
+ });
2960
+ if (abortController.signal.aborted) return;
2961
+ subscriber.next(balances);
2962
+ setTimeout(poll, SUBSCRIPTION_INTERVAL6);
2963
+ } catch (error) {
2964
+ log_default.error("Error", {
2965
+ module: MODULE_TYPE6,
2966
+ networkId,
2967
+ addressesByToken: tokensWithAddresses,
2968
+ error
2969
+ });
2970
+ subscriber.error(error);
2971
+ }
2972
+ };
2973
+ poll();
2974
+ return () => {
2975
+ abortController.abort();
2976
+ };
2977
+ }).pipe((0, import_rxjs8.distinctUntilChanged)(import_lodash_es17.isEqual));
2978
+ };
2979
+
2980
+ // src/modules/sol-token2022/module.ts
2981
+ var SolToken2022BalanceModule = {
2982
+ type: MODULE_TYPE6,
2983
+ platform: PLATFORM6,
2984
+ getMiniMetadata: getMiniMetadata6,
2985
+ fetchTokens: fetchTokens6,
2986
+ fetchBalances: fetchBalances6,
2987
+ subscribeBalances: subscribeBalances6,
2988
+ getTransferCallData: getTransferCallData6
2989
+ };
2990
+
2991
+ // src/modules/sol-token2022/types.ts
2992
+ var import_chaindata_provider31 = require("@talismn/chaindata-provider");
2993
+ var import_v410 = __toESM(require("zod/v4"));
2994
+ var SolToken2022TokenConfigSchema = import_v410.default.strictObject({
2995
+ mintAddress: import_chaindata_provider31.SolToken2022TokenSchema.shape.mintAddress,
2495
2996
  ...TokenConfigBaseSchema.shape
2496
2997
  });
2497
2998
 
2498
2999
  // src/modules/substrate-assets/config.ts
2499
- var import_chaindata_provider25 = require("@talismn/chaindata-provider");
2500
- var MODULE_TYPE6 = import_chaindata_provider25.SubAssetsTokenSchema.shape.type.value;
2501
- var PLATFORM6 = import_chaindata_provider25.SubAssetsTokenSchema.shape.platform.value;
3000
+ var import_chaindata_provider32 = require("@talismn/chaindata-provider");
3001
+ var MODULE_TYPE7 = import_chaindata_provider32.SubAssetsTokenSchema.shape.type.value;
3002
+ var PLATFORM7 = import_chaindata_provider32.SubAssetsTokenSchema.shape.platform.value;
2502
3003
 
2503
3004
  // src/modules/substrate-assets/buildQueries.ts
2504
3005
  var import_scale4 = require("@talismn/scale");
2505
- var import_util3 = require("@talismn/util");
3006
+ var import_util4 = require("@talismn/util");
2506
3007
  var buildQueries = (networkId, balanceDefs, miniMetadata) => {
2507
3008
  const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
2508
3009
  storage: ["Assets", "Account"]
@@ -2551,7 +3052,7 @@ var buildQueries = (networkId, balanceDefs, miniMetadata) => {
2551
3052
  stateKeys: [stateKey],
2552
3053
  decodeResult
2553
3054
  };
2554
- }).filter(import_util3.isNotNil);
3055
+ }).filter(import_util4.isNotNil);
2555
3056
  };
2556
3057
  var tryEncode = (scaleCoder, ...args) => {
2557
3058
  try {
@@ -2562,7 +3063,7 @@ var tryEncode = (scaleCoder, ...args) => {
2562
3063
  };
2563
3064
 
2564
3065
  // src/modules/substrate-assets/fetchBalances.ts
2565
- var fetchBalances6 = async ({
3066
+ var fetchBalances7 = async ({
2566
3067
  networkId,
2567
3068
  tokensWithAddresses,
2568
3069
  connector,
@@ -2571,7 +3072,7 @@ var fetchBalances6 = async ({
2571
3072
  if (!tokensWithAddresses.length) return { success: [], errors: [] };
2572
3073
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
2573
3074
  if (!miniMetadata?.data) {
2574
- log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE6} balances on ${networkId}.`);
3075
+ log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE7} balances on ${networkId}.`);
2575
3076
  return {
2576
3077
  success: [],
2577
3078
  errors: balanceDefs.map((def) => ({
@@ -2581,20 +3082,20 @@ var fetchBalances6 = async ({
2581
3082
  }))
2582
3083
  };
2583
3084
  }
2584
- if (miniMetadata.source !== MODULE_TYPE6) {
2585
- log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE6}.`);
3085
+ if (miniMetadata.source !== MODULE_TYPE7) {
3086
+ log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE7}.`);
2586
3087
  return {
2587
3088
  success: [],
2588
3089
  errors: balanceDefs.map((def) => ({
2589
3090
  tokenId: def.token.id,
2590
3091
  address: def.address,
2591
- error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE6}`)
3092
+ error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE7}`)
2592
3093
  }))
2593
3094
  };
2594
3095
  }
2595
3096
  if (miniMetadata.chainId !== networkId) {
2596
3097
  log_default.warn(
2597
- `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE6}. Expected chainId is ${networkId}`
3098
+ `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE7}. Expected chainId is ${networkId}`
2598
3099
  );
2599
3100
  return {
2600
3101
  success: [],
@@ -2618,7 +3119,7 @@ var fetchBalances6 = async ({
2618
3119
  address: def.address,
2619
3120
  networkId,
2620
3121
  tokenId: def.token.id,
2621
- source: MODULE_TYPE6,
3122
+ source: MODULE_TYPE7,
2622
3123
  status: "live",
2623
3124
  values: [
2624
3125
  { type: "free", label: "free", amount: "0" },
@@ -2632,10 +3133,10 @@ var fetchBalances6 = async ({
2632
3133
  };
2633
3134
 
2634
3135
  // src/modules/substrate-assets/fetchTokens.ts
2635
- var import_chaindata_provider26 = require("@talismn/chaindata-provider");
3136
+ var import_chaindata_provider33 = require("@talismn/chaindata-provider");
2636
3137
  var import_scale5 = require("@talismn/scale");
2637
- var import_lodash_es15 = require("lodash-es");
2638
- var fetchTokens6 = async ({
3138
+ var import_lodash_es18 = require("lodash-es");
3139
+ var fetchTokens7 = async ({
2639
3140
  networkId,
2640
3141
  tokens,
2641
3142
  connector,
@@ -2660,7 +3161,7 @@ var fetchTokens6 = async ({
2660
3161
  ]);
2661
3162
  const assetStorageEntries = assetStorageResults.length ? assetStorageResults[0].changes : [];
2662
3163
  const metadataStorageEntries = metadataStorageResults.length ? metadataStorageResults[0].changes : [];
2663
- const assetByAssetId = (0, import_lodash_es15.keyBy)(
3164
+ const assetByAssetId = (0, import_lodash_es18.keyBy)(
2664
3165
  assetStorageEntries.map(([key, value]) => {
2665
3166
  const [assetId] = assetCodec.keys.dec(key);
2666
3167
  const asset = assetCodec.value.dec(value);
@@ -2668,7 +3169,7 @@ var fetchTokens6 = async ({
2668
3169
  }),
2669
3170
  (a) => a.assetId
2670
3171
  );
2671
- const metadataByAssetId = (0, import_lodash_es15.keyBy)(
3172
+ const metadataByAssetId = (0, import_lodash_es18.keyBy)(
2672
3173
  metadataStorageEntries.map(([key, value]) => {
2673
3174
  const [assetId] = metadataCodec.keys.dec(key);
2674
3175
  const metadata = metadataCodec.value.dec(value);
@@ -2682,14 +3183,14 @@ var fetchTokens6 = async ({
2682
3183
  }),
2683
3184
  (a) => a.assetId
2684
3185
  );
2685
- const allTokens = (0, import_lodash_es15.keys)(assetByAssetId).map(
2686
- (assetId) => (0, import_lodash_es15.assign)({}, assetByAssetId[assetId], metadataByAssetId[assetId] ?? void 0)
3186
+ const allTokens = (0, import_lodash_es18.keys)(assetByAssetId).map(
3187
+ (assetId) => (0, import_lodash_es18.assign)({}, assetByAssetId[assetId], metadataByAssetId[assetId] ?? void 0)
2687
3188
  );
2688
- const configTokenByAssetId = (0, import_lodash_es15.keyBy)(tokens, (t) => t.assetId);
3189
+ const configTokenByAssetId = (0, import_lodash_es18.keyBy)(tokens, (t) => t.assetId);
2689
3190
  return allTokens.map(
2690
3191
  (asset) => ({
2691
- id: (0, import_chaindata_provider26.subAssetTokenId)(networkId, String(asset.assetId)),
2692
- type: MODULE_TYPE6,
3192
+ id: (0, import_chaindata_provider33.subAssetTokenId)(networkId, String(asset.assetId)),
3193
+ type: MODULE_TYPE7,
2693
3194
  platform: "polkadot",
2694
3195
  networkId,
2695
3196
  assetId: String(asset.assetId),
@@ -2706,21 +3207,21 @@ var fetchTokens6 = async ({
2706
3207
  return configToken || token.isSufficient;
2707
3208
  }).map((token) => {
2708
3209
  const configToken = configTokenByAssetId[token.assetId];
2709
- return configToken ? (0, import_lodash_es15.assign)({}, token, configToken) : token;
3210
+ return configToken ? (0, import_lodash_es18.assign)({}, token, configToken) : token;
2710
3211
  }).filter((t) => {
2711
- const parsed = import_chaindata_provider26.SubAssetsTokenSchema.safeParse(t);
3212
+ const parsed = import_chaindata_provider33.SubAssetsTokenSchema.safeParse(t);
2712
3213
  return parsed.success;
2713
3214
  });
2714
3215
  };
2715
3216
 
2716
3217
  // src/modules/substrate-assets/getMiniMetadata.ts
2717
- var import_chaindata_provider37 = require("@talismn/chaindata-provider");
3218
+ var import_chaindata_provider44 = require("@talismn/chaindata-provider");
2718
3219
  var import_scale11 = require("@talismn/scale");
2719
3220
 
2720
3221
  // src/types/balances.ts
2721
- var import_chaindata_provider35 = require("@talismn/chaindata-provider");
3222
+ var import_chaindata_provider42 = require("@talismn/chaindata-provider");
2722
3223
  var import_token_rates2 = require("@talismn/token-rates");
2723
- var import_util6 = require("@talismn/util");
3224
+ var import_util7 = require("@talismn/util");
2724
3225
  var import_bignumber2 = __toESM(require("bignumber.js"));
2725
3226
 
2726
3227
  // src/modules/substrate-dtao/alphaPrice.ts
@@ -2740,12 +3241,12 @@ var taoToAlpha = (tao, scaledAlphaPrice) => {
2740
3241
  };
2741
3242
 
2742
3243
  // src/modules/substrate-dtao/getDtaoTokenRates.ts
2743
- var import_chaindata_provider27 = require("@talismn/chaindata-provider");
3244
+ var import_chaindata_provider34 = require("@talismn/chaindata-provider");
2744
3245
  var import_token_rates = require("@talismn/token-rates");
2745
3246
  var ONE_ALPHA = 10n ** TAO_DECIMALS;
2746
3247
  var getDTaoTokenRates = (token, tokenRates, scaledAlphaPrice) => {
2747
3248
  try {
2748
- const taoTokenId = (0, import_chaindata_provider27.subNativeTokenId)(token.networkId);
3249
+ const taoTokenId = (0, import_chaindata_provider34.subNativeTokenId)(token.networkId);
2749
3250
  const taoTokenRates = tokenRates[taoTokenId];
2750
3251
  if (!taoTokenRates) return null;
2751
3252
  if (token.netuid === 0) return structuredClone(taoTokenRates);
@@ -2772,18 +3273,18 @@ var getDTaoTokenRates = (token, tokenRates, scaledAlphaPrice) => {
2772
3273
  };
2773
3274
 
2774
3275
  // src/modules/substrate-dtao/config.ts
2775
- var import_chaindata_provider28 = require("@talismn/chaindata-provider");
2776
- var MODULE_TYPE7 = import_chaindata_provider28.SubDTaoTokenSchema.shape.type.value;
2777
- var PLATFORM7 = import_chaindata_provider28.SubDTaoTokenSchema.shape.platform.value;
3276
+ var import_chaindata_provider35 = require("@talismn/chaindata-provider");
3277
+ var MODULE_TYPE8 = import_chaindata_provider35.SubDTaoTokenSchema.shape.type.value;
3278
+ var PLATFORM8 = import_chaindata_provider35.SubDTaoTokenSchema.shape.platform.value;
2778
3279
 
2779
3280
  // src/modules/substrate-dtao/fetchBalances.ts
2780
- var import_chaindata_provider30 = require("@talismn/chaindata-provider");
3281
+ var import_chaindata_provider37 = require("@talismn/chaindata-provider");
2781
3282
  var import_scale6 = require("@talismn/scale");
2782
- var import_util4 = require("@talismn/util");
2783
- var import_lodash_es16 = require("lodash-es");
3283
+ var import_util5 = require("@talismn/util");
3284
+ var import_lodash_es19 = require("lodash-es");
2784
3285
 
2785
3286
  // src/modules/substrate-dtao/calculatePendingRootClaimable.ts
2786
- var import_chaindata_provider29 = require("@talismn/chaindata-provider");
3287
+ var import_chaindata_provider36 = require("@talismn/chaindata-provider");
2787
3288
  var calculatePendingRootClaimable = ({
2788
3289
  stake,
2789
3290
  hotkey,
@@ -2805,8 +3306,8 @@ var calculatePendingRootClaimable = ({
2805
3306
  const pendingRootClaim = totalClaimable > alreadyClaimed ? totalClaimable - alreadyClaimed : 0n;
2806
3307
  pendingRootClaimBalances.push({
2807
3308
  address,
2808
- tokenId: (0, import_chaindata_provider29.subDTaoTokenId)(networkId, netuid, hotkey),
2809
- baseTokenId: (0, import_chaindata_provider29.subDTaoTokenId)(networkId, netuid),
3309
+ tokenId: (0, import_chaindata_provider36.subDTaoTokenId)(networkId, netuid, hotkey),
3310
+ baseTokenId: (0, import_chaindata_provider36.subDTaoTokenId)(networkId, netuid),
2810
3311
  hotkey,
2811
3312
  netuid,
2812
3313
  scaledAlphaPrice,
@@ -2819,7 +3320,7 @@ var calculatePendingRootClaimable = ({
2819
3320
 
2820
3321
  // src/modules/substrate-dtao/fetchBalances.ts
2821
3322
  var ROOT_NETUID = 0;
2822
- var fetchBalances7 = async ({
3323
+ var fetchBalances8 = async ({
2823
3324
  networkId,
2824
3325
  tokensWithAddresses,
2825
3326
  connector,
@@ -2828,7 +3329,7 @@ var fetchBalances7 = async ({
2828
3329
  if (!tokensWithAddresses.length) return { success: [], errors: [] };
2829
3330
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
2830
3331
  if (!miniMetadata?.data) {
2831
- log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE7} balances on ${networkId}.`, {
3332
+ log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE8} balances on ${networkId}.`, {
2832
3333
  tokensWithAddresses
2833
3334
  });
2834
3335
  return {
@@ -2840,20 +3341,20 @@ var fetchBalances7 = async ({
2840
3341
  }))
2841
3342
  };
2842
3343
  }
2843
- if (miniMetadata.source !== MODULE_TYPE7) {
2844
- log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE7}.`);
3344
+ if (miniMetadata.source !== MODULE_TYPE8) {
3345
+ log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE8}.`);
2845
3346
  return {
2846
3347
  success: [],
2847
3348
  errors: balanceDefs.map((def) => ({
2848
3349
  tokenId: def.token.id,
2849
3350
  address: def.address,
2850
- error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE7}`)
3351
+ error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE8}`)
2851
3352
  }))
2852
3353
  };
2853
3354
  }
2854
3355
  if (miniMetadata.chainId !== networkId) {
2855
3356
  log_default.warn(
2856
- `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE7}. Expected chainId is ${networkId}`
3357
+ `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE8}. Expected chainId is ${networkId}`
2857
3358
  );
2858
3359
  return {
2859
3360
  success: [],
@@ -2864,7 +3365,7 @@ var fetchBalances7 = async ({
2864
3365
  }))
2865
3366
  };
2866
3367
  }
2867
- const addresses = (0, import_lodash_es16.uniq)(balanceDefs.map((def) => def.address));
3368
+ const addresses = (0, import_lodash_es19.uniq)(balanceDefs.map((def) => def.address));
2868
3369
  try {
2869
3370
  const [stakeInfos, dynamicInfos] = await Promise.all([
2870
3371
  fetchRuntimeCallResult(
@@ -2884,7 +3385,7 @@ var fetchBalances7 = async ({
2884
3385
  []
2885
3386
  )
2886
3387
  ]);
2887
- const rootHotkeys = (0, import_lodash_es16.uniq)(
3388
+ const rootHotkeys = (0, import_lodash_es19.uniq)(
2888
3389
  stakeInfos.flatMap(
2889
3390
  ([, stakes]) => stakes.filter((stake) => stake.netuid === ROOT_NETUID).map((stake) => stake.hotkey)
2890
3391
  )
@@ -2909,7 +3410,7 @@ var fetchBalances7 = async ({
2909
3410
  miniMetadata.data,
2910
3411
  addressHotkeyNetuidPairs
2911
3412
  ) : /* @__PURE__ */ new Map();
2912
- const dynamicInfoByNetuid = (0, import_lodash_es16.keyBy)(dynamicInfos.filter(import_util4.isNotNil), (info) => info.netuid);
3413
+ const dynamicInfoByNetuid = (0, import_lodash_es19.keyBy)(dynamicInfos.filter(import_util5.isNotNil), (info) => info.netuid);
2913
3414
  const upsertBalance = (acc, address, tokenId, balance) => {
2914
3415
  const key = `${address}:${tokenId}`;
2915
3416
  const recordedBalance = acc[key];
@@ -2933,8 +3434,8 @@ var fetchBalances7 = async ({
2933
3434
  const scaledAlphaPrice = dynamicInfo ? getScaledAlphaPrice(dynamicInfo.alpha_in, dynamicInfo.tao_in) : 0n;
2934
3435
  const balance = {
2935
3436
  address,
2936
- tokenId: (0, import_chaindata_provider30.subDTaoTokenId)(networkId, stake.netuid, stake.hotkey),
2937
- baseTokenId: (0, import_chaindata_provider30.subDTaoTokenId)(networkId, stake.netuid),
3437
+ tokenId: (0, import_chaindata_provider37.subDTaoTokenId)(networkId, stake.netuid, stake.hotkey),
3438
+ baseTokenId: (0, import_chaindata_provider37.subDTaoTokenId)(networkId, stake.netuid),
2938
3439
  stake: stake.stake,
2939
3440
  hotkey: stake.hotkey,
2940
3441
  netuid: stake.netuid,
@@ -2963,7 +3464,7 @@ var fetchBalances7 = async ({
2963
3464
  {}
2964
3465
  );
2965
3466
  const balances = Object.values(balancesRaw);
2966
- const tokensById = (0, import_lodash_es16.keyBy)(
3467
+ const tokensById = (0, import_lodash_es19.keyBy)(
2967
3468
  tokensWithAddresses.map(([token]) => token),
2968
3469
  (t) => t.id
2969
3470
  );
@@ -2972,8 +3473,8 @@ var fetchBalances7 = async ({
2972
3473
  if (!balanceDefs.some((def) => def.token.id === bal.tokenId)) {
2973
3474
  const baseToken = tokensById[bal.baseTokenId];
2974
3475
  if (baseToken) {
2975
- const cleanToken = (0, import_chaindata_provider30.getCleanToken)(baseToken);
2976
- const newToken = import_chaindata_provider30.TokenSchema.parse({
3476
+ const cleanToken = (0, import_chaindata_provider37.getCleanToken)(baseToken);
3477
+ const newToken = import_chaindata_provider37.TokenSchema.parse({
2977
3478
  ...cleanToken,
2978
3479
  id: bal.tokenId,
2979
3480
  hotkey: bal.hotkey
@@ -3017,7 +3518,7 @@ var fetchBalances7 = async ({
3017
3518
  address: def.address,
3018
3519
  networkId,
3019
3520
  tokenId: def.token.id,
3020
- source: MODULE_TYPE7,
3521
+ source: MODULE_TYPE8,
3021
3522
  status: "live",
3022
3523
  values: values3
3023
3524
  };
@@ -3184,15 +3685,15 @@ var fetchRootClaimedAmounts = async (connector, networkId, metadataRpc, addressH
3184
3685
  };
3185
3686
 
3186
3687
  // src/modules/substrate-dtao/fetchTokens.ts
3187
- var import_chaindata_provider31 = require("@talismn/chaindata-provider");
3688
+ var import_chaindata_provider38 = require("@talismn/chaindata-provider");
3188
3689
  var import_scale7 = require("@talismn/scale");
3189
- var import_util5 = require("@talismn/util");
3190
- var import_lodash_es17 = require("lodash-es");
3690
+ var import_util6 = require("@talismn/util");
3691
+ var import_lodash_es20 = require("lodash-es");
3191
3692
  var NATIVE_TOKEN_SYMBOLS = {
3192
3693
  "bittensor": "TAO",
3193
3694
  "bittensor-testnet": "testTAO"
3194
3695
  };
3195
- var fetchTokens7 = async ({
3696
+ var fetchTokens8 = async ({
3196
3697
  networkId,
3197
3698
  connector,
3198
3699
  tokens,
@@ -3211,7 +3712,7 @@ var fetchTokens7 = async ({
3211
3712
  []
3212
3713
  )
3213
3714
  ]);
3214
- return dynamicInfos.filter(import_util5.isNotNil).map((info) => {
3715
+ return dynamicInfos.filter(import_util6.isNotNil).map((info) => {
3215
3716
  const config = tokens.find((t) => t.netuid === info.netuid);
3216
3717
  let symbol = new TextDecoder().decode(Uint8Array.from(info.token_symbol));
3217
3718
  const subnetName = info.subnet_identity?.subnet_name?.asText() ?? (info.netuid === 0 ? "Root" : `Subnet ${info.netuid}`);
@@ -3220,9 +3721,9 @@ var fetchTokens7 = async ({
3220
3721
  symbol = NATIVE_TOKEN_SYMBOLS[networkId];
3221
3722
  const isTransferable = transferableTokensMap[info.netuid] ?? true;
3222
3723
  const token = {
3223
- id: (0, import_chaindata_provider31.subDTaoTokenId)(networkId, info.netuid),
3224
- type: MODULE_TYPE7,
3225
- platform: PLATFORM7,
3724
+ id: (0, import_chaindata_provider38.subDTaoTokenId)(networkId, info.netuid),
3725
+ type: MODULE_TYPE8,
3726
+ platform: PLATFORM8,
3226
3727
  networkId,
3227
3728
  netuid: info.netuid,
3228
3729
  isDefault: true,
@@ -3234,7 +3735,7 @@ var fetchTokens7 = async ({
3234
3735
  };
3235
3736
  return Object.assign({}, token, config);
3236
3737
  }).filter((t) => {
3237
- const parsed = import_chaindata_provider31.SubDTaoTokenSchema.safeParse(t);
3738
+ const parsed = import_chaindata_provider38.SubDTaoTokenSchema.safeParse(t);
3238
3739
  return parsed.success;
3239
3740
  });
3240
3741
  };
@@ -3250,7 +3751,7 @@ var fetchTransferableTokensMap = async (connector, metadata, networkId) => {
3250
3751
  [transferToggleKeys]
3251
3752
  );
3252
3753
  const transferToggleEntries = transferToggleResults.length ? transferToggleResults[0].changes : [];
3253
- return (0, import_lodash_es17.fromPairs)(
3754
+ return (0, import_lodash_es20.fromPairs)(
3254
3755
  transferToggleEntries.map(([key, value]) => {
3255
3756
  const [netuid] = transferToggleCodec.keys.dec(key);
3256
3757
  const isTransferable = transferToggleCodec.value.dec(value);
@@ -3260,14 +3761,14 @@ var fetchTransferableTokensMap = async (connector, metadata, networkId) => {
3260
3761
  };
3261
3762
 
3262
3763
  // src/modules/substrate-dtao/getMiniMetadata.ts
3263
- var import_chaindata_provider32 = require("@talismn/chaindata-provider");
3764
+ var import_chaindata_provider39 = require("@talismn/chaindata-provider");
3264
3765
  var import_scale8 = require("@talismn/scale");
3265
- var getMiniMetadata6 = ({
3766
+ var getMiniMetadata7 = ({
3266
3767
  networkId,
3267
3768
  specVersion,
3268
3769
  metadataRpc
3269
3770
  }) => {
3270
- const source = MODULE_TYPE7;
3771
+ const source = MODULE_TYPE8;
3271
3772
  const chainId = networkId;
3272
3773
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
3273
3774
  if (specVersion !== systemVersion.spec_version)
@@ -3285,7 +3786,7 @@ var getMiniMetadata6 = ({
3285
3786
  source,
3286
3787
  chainId,
3287
3788
  specVersion,
3288
- version: import_chaindata_provider32.MINIMETADATA_VERSION,
3789
+ version: import_chaindata_provider39.MINIMETADATA_VERSION,
3289
3790
  data: getData(metadataRpc),
3290
3791
  extra: null
3291
3792
  };
@@ -3313,19 +3814,19 @@ var getData = (metadataRpc) => {
3313
3814
 
3314
3815
  // src/modules/substrate-dtao/getTransferCallData.ts
3315
3816
  var import_utils3 = require("@polkadot-api/utils");
3316
- var import_chaindata_provider33 = require("@talismn/chaindata-provider");
3817
+ var import_chaindata_provider40 = require("@talismn/chaindata-provider");
3317
3818
  var import_scale9 = require("@talismn/scale");
3318
3819
  var import_polkadot_api = require("polkadot-api");
3319
- var getTransferCallData6 = ({
3820
+ var getTransferCallData7 = ({
3320
3821
  from: from2,
3321
3822
  to,
3322
3823
  value,
3323
3824
  token,
3324
3825
  metadataRpc
3325
3826
  }) => {
3326
- if (!(0, import_chaindata_provider33.isTokenOfType)(token, MODULE_TYPE7))
3327
- throw new Error(`Token type ${token.type} is not ${MODULE_TYPE7}.`);
3328
- const { netuid: subnetId, hotkey } = (0, import_chaindata_provider33.parseSubDTaoTokenId)(token.id);
3827
+ if (!(0, import_chaindata_provider40.isTokenOfType)(token, MODULE_TYPE8))
3828
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE8}.`);
3829
+ const { netuid: subnetId, hotkey } = (0, import_chaindata_provider40.parseSubDTaoTokenId)(token.id);
3329
3830
  if (!hotkey) throw new Error(`Missing hotkey`);
3330
3831
  const { builder } = (0, import_scale9.parseMetadataRpc)(metadataRpc);
3331
3832
  const { codec, location } = builder.buildCall("SubtensorModule", "transfer_stake");
@@ -3344,22 +3845,22 @@ var getTransferCallData6 = ({
3344
3845
  };
3345
3846
 
3346
3847
  // src/modules/substrate-dtao/subscribeBalances.ts
3347
- var import_lodash_es18 = require("lodash-es");
3348
- var import_rxjs8 = require("rxjs");
3349
- var SUBSCRIPTION_INTERVAL6 = 6e3;
3350
- var subscribeBalances6 = ({
3848
+ var import_lodash_es21 = require("lodash-es");
3849
+ var import_rxjs9 = require("rxjs");
3850
+ var SUBSCRIPTION_INTERVAL7 = 6e3;
3851
+ var subscribeBalances7 = ({
3351
3852
  networkId,
3352
3853
  tokensWithAddresses,
3353
3854
  connector,
3354
3855
  miniMetadata
3355
3856
  }) => {
3356
- if (!tokensWithAddresses.length) return (0, import_rxjs8.of)({ success: [], errors: [] });
3357
- return new import_rxjs8.Observable((subscriber) => {
3857
+ if (!tokensWithAddresses.length) return (0, import_rxjs9.of)({ success: [], errors: [] });
3858
+ return new import_rxjs9.Observable((subscriber) => {
3358
3859
  const abortController = new AbortController();
3359
3860
  const poll = async () => {
3360
3861
  try {
3361
3862
  if (abortController.signal.aborted) return;
3362
- const balances = await fetchBalances7({
3863
+ const balances = await fetchBalances8({
3363
3864
  networkId,
3364
3865
  tokensWithAddresses,
3365
3866
  connector,
@@ -3367,10 +3868,10 @@ var subscribeBalances6 = ({
3367
3868
  });
3368
3869
  if (abortController.signal.aborted) return;
3369
3870
  subscriber.next(balances);
3370
- setTimeout(poll, SUBSCRIPTION_INTERVAL6);
3871
+ setTimeout(poll, SUBSCRIPTION_INTERVAL7);
3371
3872
  } catch (error) {
3372
3873
  log_default.error("Error", {
3373
- module: MODULE_TYPE7,
3874
+ module: MODULE_TYPE8,
3374
3875
  networkId,
3375
3876
  miniMetadata,
3376
3877
  addressesByToken: tokensWithAddresses,
@@ -3383,25 +3884,25 @@ var subscribeBalances6 = ({
3383
3884
  return () => {
3384
3885
  abortController.abort();
3385
3886
  };
3386
- }).pipe((0, import_rxjs8.distinctUntilChanged)(import_lodash_es18.isEqual));
3887
+ }).pipe((0, import_rxjs9.distinctUntilChanged)(import_lodash_es21.isEqual));
3387
3888
  };
3388
3889
 
3389
3890
  // src/modules/substrate-dtao/module.ts
3390
3891
  var SubDTaoBalanceModule = {
3391
- type: MODULE_TYPE7,
3392
- platform: PLATFORM7,
3393
- getMiniMetadata: getMiniMetadata6,
3394
- fetchTokens: fetchTokens7,
3395
- fetchBalances: fetchBalances7,
3396
- subscribeBalances: subscribeBalances6,
3397
- getTransferCallData: getTransferCallData6
3892
+ type: MODULE_TYPE8,
3893
+ platform: PLATFORM8,
3894
+ getMiniMetadata: getMiniMetadata7,
3895
+ fetchTokens: fetchTokens8,
3896
+ fetchBalances: fetchBalances8,
3897
+ subscribeBalances: subscribeBalances7,
3898
+ getTransferCallData: getTransferCallData7
3398
3899
  };
3399
3900
 
3400
3901
  // src/modules/substrate-dtao/types.ts
3401
- var import_chaindata_provider34 = require("@talismn/chaindata-provider");
3402
- var import_v49 = __toESM(require("zod/v4"));
3403
- var SubDTaoTokenConfigSchema = import_v49.default.strictObject({
3404
- netuid: import_chaindata_provider34.SubDTaoTokenSchema.shape.netuid,
3902
+ var import_chaindata_provider41 = require("@talismn/chaindata-provider");
3903
+ var import_v411 = __toESM(require("zod/v4"));
3904
+ var SubDTaoTokenConfigSchema = import_v411.default.strictObject({
3905
+ netuid: import_chaindata_provider41.SubDTaoTokenSchema.shape.netuid,
3405
3906
  ...TokenConfigBaseSchema.shape
3406
3907
  });
3407
3908
 
@@ -3409,7 +3910,7 @@ var SubDTaoTokenConfigSchema = import_v49.default.strictObject({
3409
3910
  function excludeFromTransferableAmount(locks) {
3410
3911
  if (typeof locks === "string") return BigInt(locks);
3411
3912
  if (!Array.isArray(locks)) locks = [locks];
3412
- return locks.filter((lock) => lock.includeInTransferable !== true).map((lock) => lock.amount.planck).reduce((max, lock) => import_util6.BigMath.max(max, lock), 0n);
3913
+ return locks.filter((lock) => lock.includeInTransferable !== true).map((lock) => lock.amount.planck).reduce((max, lock) => import_util7.BigMath.max(max, lock), 0n);
3413
3914
  }
3414
3915
  function excludeFromFeePayableLocks(locks) {
3415
3916
  if (typeof locks === "string") return [];
@@ -3437,7 +3938,7 @@ var Balances = class _Balances {
3437
3938
  if (balances instanceof Balance) return new _Balances([balances], hydrate);
3438
3939
  if (!Array.isArray(balances)) return new _Balances(Object.values(balances), hydrate);
3439
3940
  if (balances.length === 0) return this;
3440
- if (!(0, import_util6.isArrayOf)(balances, Balance))
3941
+ if (!(0, import_util7.isArrayOf)(balances, Balance))
3441
3942
  return new _Balances(
3442
3943
  balances.map((storage) => new Balance(storage)),
3443
3944
  hydrate
@@ -3631,7 +4132,7 @@ var Balance = class {
3631
4132
  if (hydrate !== void 0) this.#db = hydrate;
3632
4133
  };
3633
4134
  #format = (balance) => new BalanceFormatter(
3634
- (0, import_util6.isBigInt)(balance) ? balance.toString() : balance,
4135
+ (0, import_util7.isBigInt)(balance) ? balance.toString() : balance,
3635
4136
  this.decimals || void 0,
3636
4137
  this.rates
3637
4138
  );
@@ -3667,8 +4168,8 @@ var Balance = class {
3667
4168
  }
3668
4169
  get rates() {
3669
4170
  if (this.isSource("evm-uniswapv2") && this.token?.type === "evm-uniswapv2") {
3670
- const tokenId0 = (0, import_chaindata_provider35.evmErc20TokenId)(this.networkId, this.token.tokenAddress0);
3671
- const tokenId1 = (0, import_chaindata_provider35.evmErc20TokenId)(this.networkId, this.token.tokenAddress1);
4171
+ const tokenId0 = (0, import_chaindata_provider42.evmErc20TokenId)(this.networkId, this.token.tokenAddress0);
4172
+ const tokenId1 = (0, import_chaindata_provider42.evmErc20TokenId)(this.networkId, this.token.tokenAddress1);
3672
4173
  const decimals = this.token.decimals;
3673
4174
  const decimals0 = this.token.decimals0;
3674
4175
  const decimals1 = this.token.decimals1;
@@ -3776,7 +4277,7 @@ var Balance = class {
3776
4277
  /** The frozen balance of this token. Is included in the free amount. */
3777
4278
  get locked() {
3778
4279
  return this.#format(
3779
- this.locks.map(({ amount }) => amount.planck).reduce((a, b) => import_util6.BigMath.max(a, b), 0n)
4280
+ this.locks.map(({ amount }) => amount.planck).reduce((a, b) => import_util7.BigMath.max(a, b), 0n)
3780
4281
  );
3781
4282
  }
3782
4283
  get locks() {
@@ -3800,15 +4301,15 @@ var Balance = class {
3800
4301
  const oldTransferableCalculation = () => {
3801
4302
  if (this.locks.length === 0) return this.free;
3802
4303
  const excludeAmount = excludeFromTransferableAmount(this.locks);
3803
- return this.#format(import_util6.BigMath.max(this.free.planck - excludeAmount, 0n));
4304
+ return this.#format(import_util7.BigMath.max(this.free.planck - excludeAmount, 0n));
3804
4305
  };
3805
4306
  const newTransferableCalculation = () => {
3806
4307
  if (this.locks.length === 0) return this.free;
3807
- const untouchableAmount = import_util6.BigMath.max(
4308
+ const untouchableAmount = import_util7.BigMath.max(
3808
4309
  excludeFromTransferableAmount(this.locks) - this.reserved.planck,
3809
4310
  0n
3810
4311
  );
3811
- return this.#format(import_util6.BigMath.max(this.free.planck - untouchableAmount, 0n));
4312
+ return this.#format(import_util7.BigMath.max(this.free.planck - untouchableAmount, 0n));
3812
4313
  };
3813
4314
  if (this.#storage.useLegacyTransferableCalculation) return oldTransferableCalculation();
3814
4315
  return newTransferableCalculation();
@@ -3820,7 +4321,7 @@ var Balance = class {
3820
4321
  */
3821
4322
  get unavailable() {
3822
4323
  const oldCalculation = () => this.locked.planck + this.reserved.planck;
3823
- const newCalculation = () => import_util6.BigMath.max(this.locked.planck, this.reserved.planck);
4324
+ const newCalculation = () => import_util7.BigMath.max(this.locked.planck, this.reserved.planck);
3824
4325
  const baseUnavailable = this.#storage.useLegacyTransferableCalculation ? oldCalculation() : newCalculation();
3825
4326
  const nomPoolStakedPlancks = this.locks.some(
3826
4327
  (lock) => lock.source === "substrate-native-holds" && lock.label === "DelegatedStaking"
@@ -3830,8 +4331,8 @@ var Balance = class {
3830
4331
  /** The feePayable balance of this token. Is generally the free amount - the feeFrozen amount. */
3831
4332
  get feePayable() {
3832
4333
  if (this.locks.length === 0) return this.free;
3833
- const excludeAmount = excludeFromFeePayableLocks(this.locked.planck.toString()).map((lock) => BigInt(lock.amount)).reduce((max, lock) => import_util6.BigMath.max(max, lock), 0n);
3834
- return this.#format(import_util6.BigMath.max(this.free.planck - excludeAmount, 0n));
4334
+ const excludeAmount = excludeFromFeePayableLocks(this.locked.planck.toString()).map((lock) => BigInt(lock.amount)).reduce((max, lock) => import_util7.BigMath.max(max, lock), 0n);
4335
+ return this.#format(import_util7.BigMath.max(this.free.planck - excludeAmount, 0n));
3835
4336
  }
3836
4337
  };
3837
4338
  var BalanceValueGetter = class {
@@ -3854,7 +4355,7 @@ var BalanceFormatter = class {
3854
4355
  #decimals;
3855
4356
  #tokenRates;
3856
4357
  constructor(planck, decimals, fiatRatios) {
3857
- this.#planck = (0, import_util6.isBigInt)(planck) ? planck.toString() : planck ?? "0";
4358
+ this.#planck = (0, import_util7.isBigInt)(planck) ? planck.toString() : planck ?? "0";
3858
4359
  this.#decimals = decimals || 0;
3859
4360
  this.#tokenRates = fiatRatios || null;
3860
4361
  }
@@ -3863,7 +4364,7 @@ var BalanceFormatter = class {
3863
4364
  return BigInt(this.#planck);
3864
4365
  }
3865
4366
  get tokens() {
3866
- return (0, import_util6.planckToTokens)(this.#planck, this.#decimals);
4367
+ return (0, import_util7.planckToTokens)(this.#planck, this.#decimals);
3867
4368
  }
3868
4369
  fiat(currency) {
3869
4370
  if (!this.#tokenRates) return null;
@@ -4057,23 +4558,23 @@ var getValueId = (amount) => {
4057
4558
  };
4058
4559
 
4059
4560
  // src/types/minimetadatas.ts
4060
- var import_chaindata_provider36 = require("@talismn/chaindata-provider");
4561
+ var import_chaindata_provider43 = require("@talismn/chaindata-provider");
4061
4562
  var import_scale10 = require("@talismn/scale");
4062
4563
  var deriveMiniMetadataId = ({
4063
4564
  source,
4064
4565
  chainId,
4065
4566
  specVersion
4066
4567
  }) => (0, import_scale10.toHex)(
4067
- (0, import_scale10.Twox128)(new TextEncoder().encode(`${source}${chainId}${specVersion}${import_chaindata_provider36.MINIMETADATA_VERSION}`))
4568
+ (0, import_scale10.Twox128)(new TextEncoder().encode(`${source}${chainId}${specVersion}${import_chaindata_provider43.MINIMETADATA_VERSION}`))
4068
4569
  ).slice(-32);
4069
4570
 
4070
4571
  // src/modules/substrate-assets/getMiniMetadata.ts
4071
- var getMiniMetadata7 = ({
4572
+ var getMiniMetadata8 = ({
4072
4573
  networkId,
4073
4574
  specVersion,
4074
4575
  metadataRpc
4075
4576
  }) => {
4076
- const source = MODULE_TYPE6;
4577
+ const source = MODULE_TYPE7;
4077
4578
  const chainId = networkId;
4078
4579
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
4079
4580
  if (specVersion !== systemVersion.spec_version)
@@ -4091,7 +4592,7 @@ var getMiniMetadata7 = ({
4091
4592
  source,
4092
4593
  chainId,
4093
4594
  specVersion,
4094
- version: import_chaindata_provider37.MINIMETADATA_VERSION,
4595
+ version: import_chaindata_provider44.MINIMETADATA_VERSION,
4095
4596
  data: getData2(metadataRpc),
4096
4597
  extra: null
4097
4598
  };
@@ -4105,10 +4606,10 @@ var getData2 = (metadataRpc) => {
4105
4606
 
4106
4607
  // src/modules/substrate-assets/getTransferCallData.ts
4107
4608
  var import_utils4 = require("@polkadot-api/utils");
4108
- var import_chaindata_provider38 = require("@talismn/chaindata-provider");
4609
+ var import_chaindata_provider45 = require("@talismn/chaindata-provider");
4109
4610
  var import_scale12 = require("@talismn/scale");
4110
4611
  var import_polkadot_api2 = require("polkadot-api");
4111
- var getTransferCallData7 = ({
4612
+ var getTransferCallData8 = ({
4112
4613
  from: from2,
4113
4614
  to,
4114
4615
  value,
@@ -4116,8 +4617,8 @@ var getTransferCallData7 = ({
4116
4617
  type,
4117
4618
  metadataRpc
4118
4619
  }) => {
4119
- if (!(0, import_chaindata_provider38.isTokenOfType)(token, MODULE_TYPE6))
4120
- throw new Error(`Token type ${token.type} is not ${MODULE_TYPE6}.`);
4620
+ if (!(0, import_chaindata_provider45.isTokenOfType)(token, MODULE_TYPE7))
4621
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE7}.`);
4121
4622
  const { builder } = (0, import_scale12.parseMetadataRpc)(metadataRpc);
4122
4623
  const method = getTransferMethod(type);
4123
4624
  const { codec, location } = builder.buildCall("Assets", method);
@@ -4206,18 +4707,18 @@ var getTransferAllEncodedArgs = (assetId, to, codec) => {
4206
4707
  };
4207
4708
 
4208
4709
  // src/modules/substrate-assets/subscribeBalances.ts
4209
- var import_rxjs9 = require("rxjs");
4210
- var subscribeBalances7 = ({
4710
+ var import_rxjs10 = require("rxjs");
4711
+ var subscribeBalances8 = ({
4211
4712
  networkId,
4212
4713
  tokensWithAddresses,
4213
4714
  connector,
4214
4715
  miniMetadata
4215
4716
  }) => {
4216
- if (!tokensWithAddresses.length) return (0, import_rxjs9.of)({ success: [], errors: [] });
4717
+ if (!tokensWithAddresses.length) return (0, import_rxjs10.of)({ success: [], errors: [] });
4217
4718
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
4218
4719
  const queries = buildQueries(networkId, balanceDefs, miniMetadata);
4219
4720
  return getRpcQueryPack$(connector, networkId, queries).pipe(
4220
- (0, import_rxjs9.map)((balances) => ({
4721
+ (0, import_rxjs10.map)((balances) => ({
4221
4722
  success: balances,
4222
4723
  errors: []
4223
4724
  }))
@@ -4226,31 +4727,31 @@ var subscribeBalances7 = ({
4226
4727
 
4227
4728
  // src/modules/substrate-assets/module.ts
4228
4729
  var SubAssetsBalanceModule = {
4229
- type: MODULE_TYPE6,
4230
- platform: PLATFORM6,
4231
- getMiniMetadata: getMiniMetadata7,
4232
- fetchTokens: fetchTokens6,
4233
- fetchBalances: fetchBalances6,
4234
- subscribeBalances: subscribeBalances7,
4235
- getTransferCallData: getTransferCallData7
4730
+ type: MODULE_TYPE7,
4731
+ platform: PLATFORM7,
4732
+ getMiniMetadata: getMiniMetadata8,
4733
+ fetchTokens: fetchTokens7,
4734
+ fetchBalances: fetchBalances7,
4735
+ subscribeBalances: subscribeBalances8,
4736
+ getTransferCallData: getTransferCallData8
4236
4737
  };
4237
4738
 
4238
4739
  // src/modules/substrate-assets/types.ts
4239
- var import_chaindata_provider39 = require("@talismn/chaindata-provider");
4240
- var import_v410 = __toESM(require("zod/v4"));
4241
- var SubAssetsTokenConfigSchema = import_v410.default.strictObject({
4242
- assetId: import_chaindata_provider39.SubAssetsTokenSchema.shape.assetId,
4740
+ var import_chaindata_provider46 = require("@talismn/chaindata-provider");
4741
+ var import_v412 = __toESM(require("zod/v4"));
4742
+ var SubAssetsTokenConfigSchema = import_v412.default.strictObject({
4743
+ assetId: import_chaindata_provider46.SubAssetsTokenSchema.shape.assetId,
4243
4744
  ...TokenConfigBaseSchema.shape
4244
4745
  });
4245
4746
 
4246
4747
  // src/modules/substrate-foreignassets/config.ts
4247
- var import_chaindata_provider40 = require("@talismn/chaindata-provider");
4248
- var MODULE_TYPE8 = import_chaindata_provider40.SubForeignAssetsTokenSchema.shape.type.value;
4249
- var PLATFORM8 = import_chaindata_provider40.SubForeignAssetsTokenSchema.shape.platform.value;
4748
+ var import_chaindata_provider47 = require("@talismn/chaindata-provider");
4749
+ var MODULE_TYPE9 = import_chaindata_provider47.SubForeignAssetsTokenSchema.shape.type.value;
4750
+ var PLATFORM9 = import_chaindata_provider47.SubForeignAssetsTokenSchema.shape.platform.value;
4250
4751
 
4251
4752
  // src/modules/substrate-foreignassets/buildQueries.ts
4252
4753
  var import_scale13 = require("@talismn/scale");
4253
- var import_util7 = require("@talismn/util");
4754
+ var import_util8 = require("@talismn/util");
4254
4755
  var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
4255
4756
  const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
4256
4757
  storage: ["ForeignAssets", "Account"]
@@ -4305,11 +4806,11 @@ var buildQueries2 = (networkId, balanceDefs, miniMetadata) => {
4305
4806
  stateKeys: [stateKey],
4306
4807
  decodeResult
4307
4808
  };
4308
- }).filter(import_util7.isNotNil);
4809
+ }).filter(import_util8.isNotNil);
4309
4810
  };
4310
4811
 
4311
4812
  // src/modules/substrate-foreignassets/fetchBalances.ts
4312
- var fetchBalances8 = async ({
4813
+ var fetchBalances9 = async ({
4313
4814
  networkId,
4314
4815
  tokensWithAddresses,
4315
4816
  connector,
@@ -4318,7 +4819,7 @@ var fetchBalances8 = async ({
4318
4819
  if (!tokensWithAddresses.length) return { success: [], errors: [] };
4319
4820
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
4320
4821
  if (!miniMetadata?.data) {
4321
- log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE8} balances on ${networkId}.`);
4822
+ log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE9} balances on ${networkId}.`);
4322
4823
  return {
4323
4824
  success: [],
4324
4825
  errors: balanceDefs.map((def) => ({
@@ -4328,20 +4829,20 @@ var fetchBalances8 = async ({
4328
4829
  }))
4329
4830
  };
4330
4831
  }
4331
- if (miniMetadata.source !== MODULE_TYPE8) {
4332
- log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE8}.`);
4832
+ if (miniMetadata.source !== MODULE_TYPE9) {
4833
+ log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE9}.`);
4333
4834
  return {
4334
4835
  success: [],
4335
4836
  errors: balanceDefs.map((def) => ({
4336
4837
  tokenId: def.token.id,
4337
4838
  address: def.address,
4338
- error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE8}`)
4839
+ error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE9}`)
4339
4840
  }))
4340
4841
  };
4341
4842
  }
4342
4843
  if (miniMetadata.chainId !== networkId) {
4343
4844
  log_default.warn(
4344
- `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE8}. Expected chainId is ${networkId}`
4845
+ `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE9}. Expected chainId is ${networkId}`
4345
4846
  );
4346
4847
  return {
4347
4848
  success: [],
@@ -4365,7 +4866,7 @@ var fetchBalances8 = async ({
4365
4866
  address: def.address,
4366
4867
  networkId,
4367
4868
  tokenId: def.token.id,
4368
- source: MODULE_TYPE8,
4869
+ source: MODULE_TYPE9,
4369
4870
  status: "live",
4370
4871
  values: [
4371
4872
  { type: "free", label: "free", amount: "0" },
@@ -4379,10 +4880,10 @@ var fetchBalances8 = async ({
4379
4880
  };
4380
4881
 
4381
4882
  // src/modules/substrate-foreignassets/fetchTokens.ts
4382
- var import_chaindata_provider41 = require("@talismn/chaindata-provider");
4883
+ var import_chaindata_provider48 = require("@talismn/chaindata-provider");
4383
4884
  var import_scale14 = require("@talismn/scale");
4384
- var import_lodash_es19 = require("lodash-es");
4385
- var fetchTokens8 = async ({
4885
+ var import_lodash_es22 = require("lodash-es");
4886
+ var fetchTokens9 = async ({
4386
4887
  networkId,
4387
4888
  tokens,
4388
4889
  connector,
@@ -4407,7 +4908,7 @@ var fetchTokens8 = async ({
4407
4908
  ]);
4408
4909
  const assetStorageEntries = assetStorageResults[0]?.changes ?? [];
4409
4910
  const metadataStorageEntries = metadataStorageResults[0]?.changes ?? [];
4410
- const assetByOnChainId = (0, import_lodash_es19.keyBy)(
4911
+ const assetByOnChainId = (0, import_lodash_es22.keyBy)(
4411
4912
  assetStorageEntries.map(([key, value]) => {
4412
4913
  const [decodedKey] = assetCodec.keys.dec(key);
4413
4914
  const onChainId = (0, import_scale14.papiStringify)(decodedKey);
@@ -4416,7 +4917,7 @@ var fetchTokens8 = async ({
4416
4917
  }),
4417
4918
  (a) => a.onChainId
4418
4919
  );
4419
- const metadataByOnChainId = (0, import_lodash_es19.keyBy)(
4920
+ const metadataByOnChainId = (0, import_lodash_es22.keyBy)(
4420
4921
  metadataStorageEntries.map(([key, value]) => {
4421
4922
  const [decodedKey] = metadataCodec.keys.dec(key);
4422
4923
  const onChainId = (0, import_scale14.papiStringify)(decodedKey);
@@ -4431,14 +4932,14 @@ var fetchTokens8 = async ({
4431
4932
  }),
4432
4933
  (a) => a.onChainId
4433
4934
  );
4434
- const allTokens = (0, import_lodash_es19.keys)(assetByOnChainId).map(
4435
- (onChainId) => (0, import_lodash_es19.assign)({}, assetByOnChainId[onChainId], metadataByOnChainId[onChainId] ?? void 0)
4935
+ const allTokens = (0, import_lodash_es22.keys)(assetByOnChainId).map(
4936
+ (onChainId) => (0, import_lodash_es22.assign)({}, assetByOnChainId[onChainId], metadataByOnChainId[onChainId] ?? void 0)
4436
4937
  );
4437
- const configTokenByOnChainId = (0, import_lodash_es19.keyBy)(tokens, (t) => t.onChainId);
4938
+ const configTokenByOnChainId = (0, import_lodash_es22.keyBy)(tokens, (t) => t.onChainId);
4438
4939
  return allTokens.map(
4439
4940
  (asset) => ({
4440
- id: (0, import_chaindata_provider41.subForeignAssetTokenId)(networkId, asset.onChainId),
4441
- type: MODULE_TYPE8,
4941
+ id: (0, import_chaindata_provider48.subForeignAssetTokenId)(networkId, asset.onChainId),
4942
+ type: MODULE_TYPE9,
4442
4943
  platform: "polkadot",
4443
4944
  networkId,
4444
4945
  onChainId: String(asset.onChainId),
@@ -4455,22 +4956,22 @@ var fetchTokens8 = async ({
4455
4956
  return configToken || token.isSufficient;
4456
4957
  }).map((token) => {
4457
4958
  const configToken = configTokenByOnChainId[token.onChainId];
4458
- return configToken ? (0, import_lodash_es19.assign)({}, token, configToken) : token;
4959
+ return configToken ? (0, import_lodash_es22.assign)({}, token, configToken) : token;
4459
4960
  }).filter((t) => {
4460
- const parsed = import_chaindata_provider41.SubForeignAssetsTokenSchema.safeParse(t);
4961
+ const parsed = import_chaindata_provider48.SubForeignAssetsTokenSchema.safeParse(t);
4461
4962
  return parsed.success;
4462
4963
  });
4463
4964
  };
4464
4965
 
4465
4966
  // src/modules/substrate-foreignassets/getMiniMetadata.ts
4466
- var import_chaindata_provider42 = require("@talismn/chaindata-provider");
4967
+ var import_chaindata_provider49 = require("@talismn/chaindata-provider");
4467
4968
  var import_scale15 = require("@talismn/scale");
4468
- var getMiniMetadata8 = ({
4969
+ var getMiniMetadata9 = ({
4469
4970
  networkId,
4470
4971
  specVersion,
4471
4972
  metadataRpc
4472
4973
  }) => {
4473
- const source = MODULE_TYPE8;
4974
+ const source = MODULE_TYPE9;
4474
4975
  const chainId = networkId;
4475
4976
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
4476
4977
  if (specVersion !== systemVersion.spec_version)
@@ -4488,7 +4989,7 @@ var getMiniMetadata8 = ({
4488
4989
  source,
4489
4990
  chainId,
4490
4991
  specVersion,
4491
- version: import_chaindata_provider42.MINIMETADATA_VERSION,
4992
+ version: import_chaindata_provider49.MINIMETADATA_VERSION,
4492
4993
  data: getData3(metadataRpc),
4493
4994
  extra: null
4494
4995
  };
@@ -4503,10 +5004,10 @@ var getData3 = (metadataRpc) => {
4503
5004
 
4504
5005
  // src/modules/substrate-foreignassets/getTransferCallData.ts
4505
5006
  var import_utils5 = require("@polkadot-api/utils");
4506
- var import_chaindata_provider43 = require("@talismn/chaindata-provider");
5007
+ var import_chaindata_provider50 = require("@talismn/chaindata-provider");
4507
5008
  var import_scale16 = require("@talismn/scale");
4508
5009
  var import_polkadot_api3 = require("polkadot-api");
4509
- var getTransferCallData8 = ({
5010
+ var getTransferCallData9 = ({
4510
5011
  from: from2,
4511
5012
  to,
4512
5013
  value,
@@ -4514,8 +5015,8 @@ var getTransferCallData8 = ({
4514
5015
  type,
4515
5016
  metadataRpc
4516
5017
  }) => {
4517
- if (!(0, import_chaindata_provider43.isTokenOfType)(token, MODULE_TYPE8))
4518
- throw new Error(`Token type ${token.type} is not ${MODULE_TYPE8}.`);
5018
+ if (!(0, import_chaindata_provider50.isTokenOfType)(token, MODULE_TYPE9))
5019
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE9}.`);
4519
5020
  const { builder } = (0, import_scale16.parseMetadataRpc)(metadataRpc);
4520
5021
  const method = getTransferMethod2(type);
4521
5022
  const { codec, location } = builder.buildCall("ForeignAssets", method);
@@ -4594,18 +5095,18 @@ var getTransferAllEncodedArgs2 = (onChainId, to, codec) => {
4594
5095
  };
4595
5096
 
4596
5097
  // src/modules/substrate-foreignassets/subscribeBalances.ts
4597
- var import_rxjs10 = require("rxjs");
4598
- var subscribeBalances8 = ({
5098
+ var import_rxjs11 = require("rxjs");
5099
+ var subscribeBalances9 = ({
4599
5100
  networkId,
4600
5101
  tokensWithAddresses,
4601
5102
  connector,
4602
5103
  miniMetadata
4603
5104
  }) => {
4604
- if (!tokensWithAddresses.length) return (0, import_rxjs10.of)({ success: [], errors: [] });
5105
+ if (!tokensWithAddresses.length) return (0, import_rxjs11.of)({ success: [], errors: [] });
4605
5106
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
4606
5107
  const queries = buildQueries2(networkId, balanceDefs, miniMetadata);
4607
5108
  return getRpcQueryPack$(connector, networkId, queries).pipe(
4608
- (0, import_rxjs10.map)((balances) => ({
5109
+ (0, import_rxjs11.map)((balances) => ({
4609
5110
  success: balances,
4610
5111
  errors: []
4611
5112
  }))
@@ -4614,31 +5115,31 @@ var subscribeBalances8 = ({
4614
5115
 
4615
5116
  // src/modules/substrate-foreignassets/module.ts
4616
5117
  var SubForeignAssetsBalanceModule = {
4617
- type: MODULE_TYPE8,
4618
- platform: PLATFORM8,
4619
- getMiniMetadata: getMiniMetadata8,
4620
- fetchTokens: fetchTokens8,
4621
- fetchBalances: fetchBalances8,
4622
- subscribeBalances: subscribeBalances8,
4623
- getTransferCallData: getTransferCallData8
5118
+ type: MODULE_TYPE9,
5119
+ platform: PLATFORM9,
5120
+ getMiniMetadata: getMiniMetadata9,
5121
+ fetchTokens: fetchTokens9,
5122
+ fetchBalances: fetchBalances9,
5123
+ subscribeBalances: subscribeBalances9,
5124
+ getTransferCallData: getTransferCallData9
4624
5125
  };
4625
5126
 
4626
5127
  // src/modules/substrate-foreignassets/types.ts
4627
- var import_chaindata_provider44 = require("@talismn/chaindata-provider");
4628
- var import_v411 = __toESM(require("zod/v4"));
4629
- var SubForeignAssetsTokenConfigSchema = import_v411.default.strictObject({
4630
- onChainId: import_chaindata_provider44.SubForeignAssetsTokenSchema.shape.onChainId,
5128
+ var import_chaindata_provider51 = require("@talismn/chaindata-provider");
5129
+ var import_v413 = __toESM(require("zod/v4"));
5130
+ var SubForeignAssetsTokenConfigSchema = import_v413.default.strictObject({
5131
+ onChainId: import_chaindata_provider51.SubForeignAssetsTokenSchema.shape.onChainId,
4631
5132
  ...TokenConfigBaseSchema.shape
4632
5133
  });
4633
5134
 
4634
5135
  // src/modules/substrate-hydration/config.ts
4635
- var import_chaindata_provider45 = require("@talismn/chaindata-provider");
4636
- var MODULE_TYPE9 = import_chaindata_provider45.SubHydrationTokenSchema.shape.type.value;
4637
- var PLATFORM9 = import_chaindata_provider45.SubHydrationTokenSchema.shape.platform.value;
5136
+ var import_chaindata_provider52 = require("@talismn/chaindata-provider");
5137
+ var MODULE_TYPE10 = import_chaindata_provider52.SubHydrationTokenSchema.shape.type.value;
5138
+ var PLATFORM10 = import_chaindata_provider52.SubHydrationTokenSchema.shape.platform.value;
4638
5139
 
4639
5140
  // src/modules/substrate-hydration/fetchBalances.ts
4640
- var import_lodash_es20 = require("lodash-es");
4641
- var fetchBalances9 = async ({
5141
+ var import_lodash_es23 = require("lodash-es");
5142
+ var fetchBalances10 = async ({
4642
5143
  networkId,
4643
5144
  tokensWithAddresses,
4644
5145
  connector,
@@ -4647,7 +5148,7 @@ var fetchBalances9 = async ({
4647
5148
  if (!tokensWithAddresses.length) return { success: [], errors: [] };
4648
5149
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
4649
5150
  if (!miniMetadata?.data) {
4650
- log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE9} balances on ${networkId}.`, {
5151
+ log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE10} balances on ${networkId}.`, {
4651
5152
  tokensWithAddresses
4652
5153
  });
4653
5154
  return {
@@ -4659,20 +5160,20 @@ var fetchBalances9 = async ({
4659
5160
  }))
4660
5161
  };
4661
5162
  }
4662
- if (miniMetadata.source !== MODULE_TYPE9) {
4663
- log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE9}.`);
5163
+ if (miniMetadata.source !== MODULE_TYPE10) {
5164
+ log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE10}.`);
4664
5165
  return {
4665
5166
  success: [],
4666
5167
  errors: balanceDefs.map((def) => ({
4667
5168
  tokenId: def.token.id,
4668
5169
  address: def.address,
4669
- error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE9}`)
5170
+ error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE10}`)
4670
5171
  }))
4671
5172
  };
4672
5173
  }
4673
5174
  if (miniMetadata.chainId !== networkId) {
4674
5175
  log_default.warn(
4675
- `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE9}. Expected chainId is ${networkId}`
5176
+ `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE10}. Expected chainId is ${networkId}`
4676
5177
  );
4677
5178
  return {
4678
5179
  success: [],
@@ -4683,7 +5184,7 @@ var fetchBalances9 = async ({
4683
5184
  }))
4684
5185
  };
4685
5186
  }
4686
- const addresses = (0, import_lodash_es20.uniq)(balanceDefs.map((def) => def.address));
5187
+ const addresses = (0, import_lodash_es23.uniq)(balanceDefs.map((def) => def.address));
4687
5188
  try {
4688
5189
  const res = await Promise.all(
4689
5190
  addresses.map(
@@ -4699,16 +5200,16 @@ var fetchBalances9 = async ({
4699
5200
  frozen: balance.frozen.toString()
4700
5201
  })).filter((b) => b.onChainId !== void 0);
4701
5202
  });
4702
- const balancesByKey = (0, import_lodash_es20.keyBy)(fetchedBalances, (b) => `${b.address}:${b.onChainId}`);
5203
+ const balancesByKey = (0, import_lodash_es23.keyBy)(fetchedBalances, (b) => `${b.address}:${b.onChainId}`);
4703
5204
  const success = tokensWithAddresses.reduce((acc, [token, addresses2]) => {
4704
- if (token.type === MODULE_TYPE9)
5205
+ if (token.type === MODULE_TYPE10)
4705
5206
  for (const address of addresses2) {
4706
5207
  const rawBalance = balancesByKey[`${address}:${token.onChainId}`];
4707
5208
  const balance = {
4708
5209
  address,
4709
5210
  networkId,
4710
5211
  tokenId: token.id,
4711
- source: MODULE_TYPE9,
5212
+ source: MODULE_TYPE10,
4712
5213
  status: "live",
4713
5214
  values: [
4714
5215
  {
@@ -4751,10 +5252,10 @@ var fetchBalances9 = async ({
4751
5252
  };
4752
5253
 
4753
5254
  // src/modules/substrate-hydration/fetchTokens.ts
4754
- var import_chaindata_provider46 = require("@talismn/chaindata-provider");
5255
+ var import_chaindata_provider53 = require("@talismn/chaindata-provider");
4755
5256
  var import_scale17 = require("@talismn/scale");
4756
- var import_lodash_es21 = require("lodash-es");
4757
- var fetchTokens9 = async ({
5257
+ var import_lodash_es24 = require("lodash-es");
5258
+ var fetchTokens10 = async ({
4758
5259
  networkId,
4759
5260
  tokens,
4760
5261
  connector,
@@ -4773,7 +5274,7 @@ var fetchTokens9 = async ({
4773
5274
  [allAssetStorageKeys]
4774
5275
  );
4775
5276
  const assetStorageEntries = assetStorageResults.length ? assetStorageResults[0].changes : [];
4776
- const configTokenByAssetId = (0, import_lodash_es21.keyBy)(tokens, (t) => t.onChainId);
5277
+ const configTokenByAssetId = (0, import_lodash_es24.keyBy)(tokens, (t) => t.onChainId);
4777
5278
  return assetStorageEntries.map(([key, value]) => {
4778
5279
  const [onChainId] = assetsCodec.keys.dec(key);
4779
5280
  const asset = assetsCodec.value.dec(value);
@@ -4788,8 +5289,8 @@ var fetchTokens9 = async ({
4788
5289
  };
4789
5290
  }).map(
4790
5291
  (asset) => ({
4791
- id: (0, import_chaindata_provider46.subHydrationTokenId)(networkId, asset.onChainId),
4792
- type: MODULE_TYPE9,
5292
+ id: (0, import_chaindata_provider53.subHydrationTokenId)(networkId, asset.onChainId),
5293
+ type: MODULE_TYPE10,
4793
5294
  platform: "polkadot",
4794
5295
  networkId,
4795
5296
  onChainId: asset.onChainId,
@@ -4807,22 +5308,22 @@ var fetchTokens9 = async ({
4807
5308
  return configToken || token.isSufficient;
4808
5309
  }).map((token) => {
4809
5310
  const configToken = configTokenByAssetId[token.onChainId];
4810
- return configToken ? (0, import_lodash_es21.assign)({}, token, configToken) : token;
5311
+ return configToken ? (0, import_lodash_es24.assign)({}, token, configToken) : token;
4811
5312
  }).filter((t) => {
4812
- const parsed = import_chaindata_provider46.SubHydrationTokenSchema.safeParse(t);
5313
+ const parsed = import_chaindata_provider53.SubHydrationTokenSchema.safeParse(t);
4813
5314
  return parsed.success;
4814
5315
  });
4815
5316
  };
4816
5317
 
4817
5318
  // src/modules/substrate-hydration/getMiniMetadata.ts
4818
- var import_chaindata_provider47 = require("@talismn/chaindata-provider");
5319
+ var import_chaindata_provider54 = require("@talismn/chaindata-provider");
4819
5320
  var import_scale18 = require("@talismn/scale");
4820
- var getMiniMetadata9 = ({
5321
+ var getMiniMetadata10 = ({
4821
5322
  networkId,
4822
5323
  specVersion,
4823
5324
  metadataRpc
4824
5325
  }) => {
4825
- const source = MODULE_TYPE9;
5326
+ const source = MODULE_TYPE10;
4826
5327
  const chainId = networkId;
4827
5328
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
4828
5329
  if (specVersion !== systemVersion.spec_version)
@@ -4840,7 +5341,7 @@ var getMiniMetadata9 = ({
4840
5341
  source,
4841
5342
  chainId,
4842
5343
  specVersion,
4843
- version: import_chaindata_provider47.MINIMETADATA_VERSION,
5344
+ version: import_chaindata_provider54.MINIMETADATA_VERSION,
4844
5345
  data: getData4(metadataRpc),
4845
5346
  extra: null
4846
5347
  };
@@ -4869,18 +5370,18 @@ var getData4 = (metadataRpc) => {
4869
5370
 
4870
5371
  // src/modules/substrate-hydration/getTransferCallData.ts
4871
5372
  var import_utils6 = require("@polkadot-api/utils");
4872
- var import_chaindata_provider48 = require("@talismn/chaindata-provider");
5373
+ var import_chaindata_provider55 = require("@talismn/chaindata-provider");
4873
5374
  var import_scale19 = require("@talismn/scale");
4874
5375
  var import_polkadot_api4 = require("polkadot-api");
4875
- var getTransferCallData9 = ({
5376
+ var getTransferCallData10 = ({
4876
5377
  from: from2,
4877
5378
  to,
4878
5379
  value,
4879
5380
  token,
4880
5381
  metadataRpc
4881
5382
  }) => {
4882
- if (!(0, import_chaindata_provider48.isTokenOfType)(token, MODULE_TYPE9))
4883
- throw new Error(`Token type ${token.type} is not ${MODULE_TYPE9}.`);
5383
+ if (!(0, import_chaindata_provider55.isTokenOfType)(token, MODULE_TYPE10))
5384
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE10}.`);
4884
5385
  const { builder } = (0, import_scale19.parseMetadataRpc)(metadataRpc);
4885
5386
  const { codec, location } = builder.buildCall("Currencies", "transfer");
4886
5387
  const args = {
@@ -4896,22 +5397,22 @@ var getTransferCallData9 = ({
4896
5397
  };
4897
5398
 
4898
5399
  // src/modules/substrate-hydration/subscribeBalances.ts
4899
- var import_lodash_es22 = require("lodash-es");
4900
- var import_rxjs11 = require("rxjs");
4901
- var SUBSCRIPTION_INTERVAL7 = 6e3;
4902
- var subscribeBalances9 = ({
5400
+ var import_lodash_es25 = require("lodash-es");
5401
+ var import_rxjs12 = require("rxjs");
5402
+ var SUBSCRIPTION_INTERVAL8 = 6e3;
5403
+ var subscribeBalances10 = ({
4903
5404
  networkId,
4904
5405
  tokensWithAddresses,
4905
5406
  connector,
4906
5407
  miniMetadata
4907
5408
  }) => {
4908
- if (!tokensWithAddresses.length) return (0, import_rxjs11.of)({ success: [], errors: [] });
4909
- return new import_rxjs11.Observable((subscriber) => {
5409
+ if (!tokensWithAddresses.length) return (0, import_rxjs12.of)({ success: [], errors: [] });
5410
+ return new import_rxjs12.Observable((subscriber) => {
4910
5411
  const abortController = new AbortController();
4911
5412
  const poll = async () => {
4912
5413
  try {
4913
5414
  if (abortController.signal.aborted) return;
4914
- const balances = await fetchBalances9({
5415
+ const balances = await fetchBalances10({
4915
5416
  networkId,
4916
5417
  tokensWithAddresses,
4917
5418
  connector,
@@ -4919,10 +5420,10 @@ var subscribeBalances9 = ({
4919
5420
  });
4920
5421
  if (abortController.signal.aborted) return;
4921
5422
  subscriber.next(balances);
4922
- setTimeout(poll, SUBSCRIPTION_INTERVAL7);
5423
+ setTimeout(poll, SUBSCRIPTION_INTERVAL8);
4923
5424
  } catch (error) {
4924
5425
  log_default.error("Error", {
4925
- module: MODULE_TYPE9,
5426
+ module: MODULE_TYPE10,
4926
5427
  networkId,
4927
5428
  miniMetadata,
4928
5429
  addressesByToken: tokensWithAddresses,
@@ -4935,36 +5436,36 @@ var subscribeBalances9 = ({
4935
5436
  return () => {
4936
5437
  abortController.abort();
4937
5438
  };
4938
- }).pipe((0, import_rxjs11.distinctUntilChanged)(import_lodash_es22.isEqual));
5439
+ }).pipe((0, import_rxjs12.distinctUntilChanged)(import_lodash_es25.isEqual));
4939
5440
  };
4940
5441
 
4941
5442
  // src/modules/substrate-hydration/module.ts
4942
5443
  var SubHydrationBalanceModule = {
4943
- type: MODULE_TYPE9,
4944
- platform: PLATFORM9,
4945
- getMiniMetadata: getMiniMetadata9,
4946
- fetchTokens: fetchTokens9,
4947
- fetchBalances: fetchBalances9,
4948
- subscribeBalances: subscribeBalances9,
4949
- getTransferCallData: getTransferCallData9
5444
+ type: MODULE_TYPE10,
5445
+ platform: PLATFORM10,
5446
+ getMiniMetadata: getMiniMetadata10,
5447
+ fetchTokens: fetchTokens10,
5448
+ fetchBalances: fetchBalances10,
5449
+ subscribeBalances: subscribeBalances10,
5450
+ getTransferCallData: getTransferCallData10
4950
5451
  };
4951
5452
 
4952
5453
  // src/modules/substrate-hydration/types.ts
4953
- var import_chaindata_provider49 = require("@talismn/chaindata-provider");
4954
- var import_v412 = __toESM(require("zod/v4"));
4955
- var SubHydrationTokenConfigSchema = import_v412.default.strictObject({
4956
- onChainId: import_chaindata_provider49.SubHydrationTokenSchema.shape.onChainId,
5454
+ var import_chaindata_provider56 = require("@talismn/chaindata-provider");
5455
+ var import_v414 = __toESM(require("zod/v4"));
5456
+ var SubHydrationTokenConfigSchema = import_v414.default.strictObject({
5457
+ onChainId: import_chaindata_provider56.SubHydrationTokenSchema.shape.onChainId,
4957
5458
  ...TokenConfigBaseSchema.shape
4958
5459
  });
4959
5460
 
4960
5461
  // src/modules/substrate-native/config.ts
4961
- var import_chaindata_provider50 = require("@talismn/chaindata-provider");
4962
- var MODULE_TYPE10 = import_chaindata_provider50.SubNativeTokenSchema.shape.type.value;
4963
- var PLATFORM10 = import_chaindata_provider50.SubNativeTokenSchema.shape.platform.value;
5462
+ var import_chaindata_provider57 = require("@talismn/chaindata-provider");
5463
+ var MODULE_TYPE11 = import_chaindata_provider57.SubNativeTokenSchema.shape.type.value;
5464
+ var PLATFORM11 = import_chaindata_provider57.SubNativeTokenSchema.shape.platform.value;
4964
5465
 
4965
5466
  // src/modules/substrate-native/queries/buildBaseQueries.ts
4966
5467
  var import_scale20 = require("@talismn/scale");
4967
- var import_util8 = require("@talismn/util");
5468
+ var import_util9 = require("@talismn/util");
4968
5469
 
4969
5470
  // src/modules/substrate-native/util/lockTypes.ts
4970
5471
  var import_upperFirst = __toESM(require("lodash-es/upperFirst"));
@@ -5125,7 +5626,7 @@ var buildBaseQueries = (networkId, balanceDefs, miniMetadata) => {
5125
5626
  return { balance, nomPoolMemberInfo };
5126
5627
  }
5127
5628
  };
5128
- }).filter(import_util8.isNotNil);
5629
+ }).filter(import_util9.isNotNil);
5129
5630
  };
5130
5631
  var decodeBaseResult = (coder, value, networkId) => {
5131
5632
  const decoded = (0, import_scale20.decodeScale)(
@@ -5365,11 +5866,11 @@ var getNomPoolStateKeys = (coders, nomPoolMemberInfo, extra) => {
5365
5866
  };
5366
5867
 
5367
5868
  // src/modules/substrate-native/fetchBalances.ts
5368
- var fetchBalances10 = async ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
5869
+ var fetchBalances11 = async ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
5369
5870
  if (!tokensWithAddresses.length) return { success: [], errors: [] };
5370
5871
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
5371
5872
  if (!miniMetadata?.data) {
5372
- log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE10} balances on ${networkId}.`);
5873
+ log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE11} balances on ${networkId}.`);
5373
5874
  return {
5374
5875
  success: [],
5375
5876
  errors: balanceDefs.map((def) => ({
@@ -5379,20 +5880,20 @@ var fetchBalances10 = async ({ networkId, tokensWithAddresses, connector, miniMe
5379
5880
  }))
5380
5881
  };
5381
5882
  }
5382
- if (miniMetadata.source !== MODULE_TYPE10) {
5383
- log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE10}.`);
5883
+ if (miniMetadata.source !== MODULE_TYPE11) {
5884
+ log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE11}.`);
5384
5885
  return {
5385
5886
  success: [],
5386
5887
  errors: balanceDefs.map((def) => ({
5387
5888
  tokenId: def.token.id,
5388
5889
  address: def.address,
5389
- error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE10}`)
5890
+ error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE11}`)
5390
5891
  }))
5391
5892
  };
5392
5893
  }
5393
5894
  if (miniMetadata.chainId !== networkId) {
5394
5895
  log_default.warn(
5395
- `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE10}. Expected chainId is ${networkId}`
5896
+ `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE11}. Expected chainId is ${networkId}`
5396
5897
  );
5397
5898
  return {
5398
5899
  success: [],
@@ -5411,10 +5912,10 @@ var fetchBalances10 = async ({ networkId, tokensWithAddresses, connector, miniMe
5411
5912
  };
5412
5913
 
5413
5914
  // src/modules/substrate-native/fetchTokens.ts
5414
- var import_chaindata_provider51 = require("@talismn/chaindata-provider");
5415
- var import_lodash_es23 = require("lodash-es");
5416
- var import_v413 = __toESM(require("zod/v4"));
5417
- var fetchTokens10 = async ({ networkId, tokens, connector, miniMetadata }) => {
5915
+ var import_chaindata_provider58 = require("@talismn/chaindata-provider");
5916
+ var import_lodash_es26 = require("lodash-es");
5917
+ var import_v415 = __toESM(require("zod/v4"));
5918
+ var fetchTokens11 = async ({ networkId, tokens, connector, miniMetadata }) => {
5418
5919
  if (miniMetadata.extra.disable) return [];
5419
5920
  const { tokenSymbol: symbol, tokenDecimals: decimals } = await getChainProperties(
5420
5921
  connector,
@@ -5424,7 +5925,7 @@ var fetchTokens10 = async ({ networkId, tokens, connector, miniMetadata }) => {
5424
5925
  log_default.warn(`Substrate native module: existentialDeposit is undefined for ${networkId}, using 0`);
5425
5926
  const tokenConfig = tokens[0];
5426
5927
  const nativeToken = {
5427
- id: (0, import_chaindata_provider51.subNativeTokenId)(networkId),
5928
+ id: (0, import_chaindata_provider58.subNativeTokenId)(networkId),
5428
5929
  type: "substrate-native",
5429
5930
  platform: "polkadot",
5430
5931
  networkId,
@@ -5434,22 +5935,22 @@ var fetchTokens10 = async ({ networkId, tokens, connector, miniMetadata }) => {
5434
5935
  decimals,
5435
5936
  existentialDeposit: miniMetadata.extra.existentialDeposit ?? "0"
5436
5937
  };
5437
- const token = (0, import_lodash_es23.assign)(nativeToken, tokenConfig);
5438
- const parsed = import_chaindata_provider51.SubNativeTokenSchema.safeParse(token);
5938
+ const token = (0, import_lodash_es26.assign)(nativeToken, tokenConfig);
5939
+ const parsed = import_chaindata_provider58.SubNativeTokenSchema.safeParse(token);
5439
5940
  if (!parsed.success) {
5440
5941
  return [];
5441
5942
  }
5442
5943
  return [parsed.data];
5443
5944
  };
5444
- var DotNetworkPropertiesSimple = import_v413.default.object({
5445
- tokenDecimals: import_v413.default.number().optional().default(0),
5446
- tokenSymbol: import_v413.default.string().optional().default("Unit")
5945
+ var DotNetworkPropertiesSimple = import_v415.default.object({
5946
+ tokenDecimals: import_v415.default.number().optional().default(0),
5947
+ tokenSymbol: import_v415.default.string().optional().default("Unit")
5447
5948
  });
5448
- var DotNetworkPropertiesArray = import_v413.default.object({
5449
- tokenDecimals: import_v413.default.array(import_v413.default.number()).nonempty(),
5450
- tokenSymbol: import_v413.default.array(import_v413.default.string()).nonempty()
5949
+ var DotNetworkPropertiesArray = import_v415.default.object({
5950
+ tokenDecimals: import_v415.default.array(import_v415.default.number()).nonempty(),
5951
+ tokenSymbol: import_v415.default.array(import_v415.default.string()).nonempty()
5451
5952
  });
5452
- var DotNetworkPropertiesSchema = import_v413.default.union([DotNetworkPropertiesSimple, DotNetworkPropertiesArray]).transform((val) => ({
5953
+ var DotNetworkPropertiesSchema = import_v415.default.union([DotNetworkPropertiesSimple, DotNetworkPropertiesArray]).transform((val) => ({
5453
5954
  tokenDecimals: Array.isArray(val.tokenDecimals) ? val.tokenDecimals[0] : val.tokenDecimals,
5454
5955
  tokenSymbol: Array.isArray(val.tokenSymbol) ? val.tokenSymbol[0] : val.tokenSymbol
5455
5956
  }));
@@ -5459,10 +5960,10 @@ var getChainProperties = async (connector, networkId) => {
5459
5960
  };
5460
5961
 
5461
5962
  // src/modules/substrate-native/getMiniMetadata.ts
5462
- var import_chaindata_provider52 = require("@talismn/chaindata-provider");
5963
+ var import_chaindata_provider59 = require("@talismn/chaindata-provider");
5463
5964
  var import_scale22 = require("@talismn/scale");
5464
- var getMiniMetadata10 = ({ networkId, specVersion, metadataRpc, config }) => {
5465
- const source = MODULE_TYPE10;
5965
+ var getMiniMetadata11 = ({ networkId, specVersion, metadataRpc, config }) => {
5966
+ const source = MODULE_TYPE11;
5466
5967
  const chainId = networkId;
5467
5968
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
5468
5969
  if (specVersion !== systemVersion.spec_version)
@@ -5481,7 +5982,7 @@ var getMiniMetadata10 = ({ networkId, specVersion, metadataRpc, config }) => {
5481
5982
  source,
5482
5983
  chainId,
5483
5984
  specVersion,
5484
- version: import_chaindata_provider52.MINIMETADATA_VERSION,
5985
+ version: import_chaindata_provider59.MINIMETADATA_VERSION,
5485
5986
  data: null,
5486
5987
  extra: { disable: true }
5487
5988
  };
@@ -5510,7 +6011,7 @@ var getMiniMetadata10 = ({ networkId, specVersion, metadataRpc, config }) => {
5510
6011
  source,
5511
6012
  chainId,
5512
6013
  specVersion,
5513
- version: import_chaindata_provider52.MINIMETADATA_VERSION,
6014
+ version: import_chaindata_provider59.MINIMETADATA_VERSION,
5514
6015
  data: (0, import_scale22.encodeMetadata)(metadata),
5515
6016
  extra: {
5516
6017
  useLegacyTransferableCalculation,
@@ -5522,10 +6023,10 @@ var getMiniMetadata10 = ({ networkId, specVersion, metadataRpc, config }) => {
5522
6023
 
5523
6024
  // src/modules/substrate-native/getTransferCallData.ts
5524
6025
  var import_utils8 = require("@polkadot-api/utils");
5525
- var import_chaindata_provider53 = require("@talismn/chaindata-provider");
6026
+ var import_chaindata_provider60 = require("@talismn/chaindata-provider");
5526
6027
  var import_scale23 = require("@talismn/scale");
5527
6028
  var import_polkadot_api6 = require("polkadot-api");
5528
- var getTransferCallData10 = ({
6029
+ var getTransferCallData11 = ({
5529
6030
  from: from2,
5530
6031
  to,
5531
6032
  value,
@@ -5533,8 +6034,8 @@ var getTransferCallData10 = ({
5533
6034
  type,
5534
6035
  metadataRpc
5535
6036
  }) => {
5536
- if (!(0, import_chaindata_provider53.isTokenOfType)(token, MODULE_TYPE10))
5537
- throw new Error(`Token type ${token.type} is not ${MODULE_TYPE10}.`);
6037
+ if (!(0, import_chaindata_provider60.isTokenOfType)(token, MODULE_TYPE11))
6038
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE11}.`);
5538
6039
  const { unifiedMetadata, lookupFn, builder } = (0, import_scale23.parseMetadataRpc)(metadataRpc);
5539
6040
  const method = getTransferMethod3(type, unifiedMetadata, lookupFn);
5540
6041
  const { codec, location } = builder.buildCall("Balances", method);
@@ -5612,17 +6113,17 @@ var getTransferAllEncodedArgs3 = (to, codec) => {
5612
6113
  };
5613
6114
 
5614
6115
  // src/modules/substrate-native/subscribeBalances.ts
5615
- var import_rxjs12 = require("rxjs");
5616
- var subscribeBalances10 = ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
5617
- if (!tokensWithAddresses.length) return (0, import_rxjs12.of)({ success: [], errors: [] });
6116
+ var import_rxjs13 = require("rxjs");
6117
+ var subscribeBalances11 = ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
6118
+ if (!tokensWithAddresses.length) return (0, import_rxjs13.of)({ success: [], errors: [] });
5618
6119
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
5619
6120
  const baseQueries = buildBaseQueries(networkId, balanceDefs, miniMetadata);
5620
6121
  return getRpcQueryPack$(connector, networkId, baseQueries).pipe(
5621
- (0, import_rxjs12.switchMap)((partialBalances) => {
6122
+ (0, import_rxjs13.switchMap)((partialBalances) => {
5622
6123
  const nomPoolQueries = buildNomPoolQueries(networkId, partialBalances, miniMetadata);
5623
6124
  return getRpcQueryPack$(connector, networkId, nomPoolQueries);
5624
6125
  }),
5625
- (0, import_rxjs12.map)((balances) => ({
6126
+ (0, import_rxjs13.map)((balances) => ({
5626
6127
  success: balances,
5627
6128
  errors: []
5628
6129
  }))
@@ -5631,34 +6132,34 @@ var subscribeBalances10 = ({ networkId, tokensWithAddresses, connector, miniMeta
5631
6132
 
5632
6133
  // src/modules/substrate-native/module.ts
5633
6134
  var SubNativeBalanceModule = {
5634
- type: MODULE_TYPE10,
5635
- platform: PLATFORM10,
5636
- getMiniMetadata: getMiniMetadata10,
5637
- fetchTokens: fetchTokens10,
5638
- fetchBalances: fetchBalances10,
5639
- subscribeBalances: subscribeBalances10,
5640
- getTransferCallData: getTransferCallData10
6135
+ type: MODULE_TYPE11,
6136
+ platform: PLATFORM11,
6137
+ getMiniMetadata: getMiniMetadata11,
6138
+ fetchTokens: fetchTokens11,
6139
+ fetchBalances: fetchBalances11,
6140
+ subscribeBalances: subscribeBalances11,
6141
+ getTransferCallData: getTransferCallData11
5641
6142
  };
5642
6143
 
5643
6144
  // src/modules/substrate-native/types.ts
5644
- var import_v414 = __toESM(require("zod/v4"));
5645
- var SubNativeTokenConfigSchema = import_v414.default.strictObject({
6145
+ var import_v416 = __toESM(require("zod/v4"));
6146
+ var SubNativeTokenConfigSchema = import_v416.default.strictObject({
5646
6147
  ...TokenConfigBaseSchema.shape
5647
6148
  });
5648
- var SubNativeModuleConfigSchema = import_v414.default.strictObject({
5649
- disable: import_v414.default.boolean().optional()
6149
+ var SubNativeModuleConfigSchema = import_v416.default.strictObject({
6150
+ disable: import_v416.default.boolean().optional()
5650
6151
  });
5651
- var SubNativeMiniMetadataExtraSchema = import_v414.default.strictObject({
5652
- disable: import_v414.default.boolean().optional(),
5653
- useLegacyTransferableCalculation: import_v414.default.boolean().optional(),
5654
- existentialDeposit: import_v414.default.string().optional(),
5655
- nominationPoolsPalletId: import_v414.default.string().optional()
6152
+ var SubNativeMiniMetadataExtraSchema = import_v416.default.strictObject({
6153
+ disable: import_v416.default.boolean().optional(),
6154
+ useLegacyTransferableCalculation: import_v416.default.boolean().optional(),
6155
+ existentialDeposit: import_v416.default.string().optional(),
6156
+ nominationPoolsPalletId: import_v416.default.string().optional()
5656
6157
  });
5657
6158
 
5658
6159
  // src/modules/substrate-psp22/config.ts
5659
- var import_chaindata_provider54 = require("@talismn/chaindata-provider");
5660
- var MODULE_TYPE11 = import_chaindata_provider54.SubPsp22TokenSchema.shape.type.value;
5661
- var PLATFORM11 = import_chaindata_provider54.SubPsp22TokenSchema.shape.platform.value;
6160
+ var import_chaindata_provider61 = require("@talismn/chaindata-provider");
6161
+ var MODULE_TYPE12 = import_chaindata_provider61.SubPsp22TokenSchema.shape.type.value;
6162
+ var PLATFORM12 = import_chaindata_provider61.SubPsp22TokenSchema.shape.platform.value;
5662
6163
 
5663
6164
  // src/modules/substrate-psp22/fetchBalances.ts
5664
6165
  var import_api_contract = require("@polkadot/api-contract");
@@ -6662,7 +7163,17 @@ var psp22_default = {
6662
7163
  };
6663
7164
 
6664
7165
  // src/modules/substrate-psp22/util.ts
6665
- var import_util9 = require("@polkadot/util");
7166
+ var u8aToHex = (value) => `0x${Array.from(value, (b) => b.toString(16).padStart(2, "0")).join("")}`;
7167
+ var u8aConcatStrict = (arrays) => {
7168
+ const length = arrays.reduce((total, arr) => total + arr.length, 0);
7169
+ const result = new Uint8Array(length);
7170
+ let offset = 0;
7171
+ for (const arr of arrays) {
7172
+ result.set(arr, offset);
7173
+ offset += arr.length;
7174
+ }
7175
+ return result;
7176
+ };
6666
7177
  var makeContractCaller = ({
6667
7178
  chainConnector,
6668
7179
  chainId,
@@ -6671,8 +7182,8 @@ var makeContractCaller = ({
6671
7182
  "ContractExecResult",
6672
7183
  await chainConnector.send(chainId, "state_call", [
6673
7184
  "ContractsApi_call",
6674
- (0, import_util9.u8aToHex)(
6675
- (0, import_util9.u8aConcatStrict)([
7185
+ u8aToHex(
7186
+ u8aConcatStrict([
6676
7187
  // origin
6677
7188
  registry.createType("AccountId", callFrom).toU8a(),
6678
7189
  // dest
@@ -6691,7 +7202,7 @@ var makeContractCaller = ({
6691
7202
  );
6692
7203
 
6693
7204
  // src/modules/substrate-psp22/fetchBalances.ts
6694
- var fetchBalances11 = async ({
7205
+ var fetchBalances12 = async ({
6695
7206
  networkId,
6696
7207
  tokensWithAddresses,
6697
7208
  connector
@@ -6746,10 +7257,11 @@ var fetchBalances11 = async ({
6746
7257
  // src/modules/substrate-psp22/fetchTokens.ts
6747
7258
  var import_api_contract2 = require("@polkadot/api-contract");
6748
7259
  var import_types17 = require("@polkadot/types");
6749
- var import_util11 = require("@polkadot/util");
6750
- var import_chaindata_provider55 = require("@talismn/chaindata-provider");
6751
- var import_lodash_es24 = require("lodash-es");
6752
- var fetchTokens11 = async ({
7260
+ var import_chaindata_provider62 = require("@talismn/chaindata-provider");
7261
+ var import_lodash_es27 = require("lodash-es");
7262
+ var hexToNumber = (hex) => Number(hex);
7263
+ var u8aToString = (value) => new TextDecoder().decode(value);
7264
+ var fetchTokens12 = async ({
6753
7265
  networkId,
6754
7266
  tokens,
6755
7267
  connector
@@ -6783,7 +7295,7 @@ var fetchTokens11 = async ({
6783
7295
  )
6784
7296
  ]);
6785
7297
  const symbolData = symbolResult.toJSON()?.result?.ok?.data;
6786
- symbol = typeof symbolData === "string" && symbolData.startsWith("0x") ? (0, import_util11.u8aToString)(
7298
+ symbol = typeof symbolData === "string" && symbolData.startsWith("0x") ? u8aToString(
6787
7299
  registry.createType(
6788
7300
  "Option<Vec<u8>>",
6789
7301
  // biome-ignore lint/suspicious/noExplicitAny: legacy
@@ -6791,9 +7303,9 @@ var fetchTokens11 = async ({
6791
7303
  )?.value
6792
7304
  )?.replace(/\p{C}/gu, "") : symbol;
6793
7305
  const decimalsData = decimalsResult.toJSON()?.result?.ok?.data;
6794
- decimals = typeof decimalsData === "string" && decimalsData.startsWith("0x") ? (0, import_util11.hexToNumber)(decimalsData) : decimals;
7306
+ decimals = typeof decimalsData === "string" && decimalsData.startsWith("0x") ? hexToNumber(decimalsData) : decimals;
6795
7307
  })();
6796
- const id = (0, import_chaindata_provider55.subPsp22TokenId)(networkId, contractAddress);
7308
+ const id = (0, import_chaindata_provider62.subPsp22TokenId)(networkId, contractAddress);
6797
7309
  const token = {
6798
7310
  id,
6799
7311
  type: "substrate-psp22",
@@ -6816,21 +7328,21 @@ var fetchTokens11 = async ({
6816
7328
  );
6817
7329
  }
6818
7330
  }
6819
- return (0, import_lodash_es24.values)(tokenList).filter((t) => {
6820
- const parsed = import_chaindata_provider55.SubPsp22TokenSchema.safeParse(t);
7331
+ return (0, import_lodash_es27.values)(tokenList).filter((t) => {
7332
+ const parsed = import_chaindata_provider62.SubPsp22TokenSchema.safeParse(t);
6821
7333
  return parsed.success;
6822
7334
  });
6823
7335
  };
6824
7336
 
6825
7337
  // src/modules/substrate-psp22/getMiniMetadata.ts
6826
- var import_chaindata_provider56 = require("@talismn/chaindata-provider");
7338
+ var import_chaindata_provider63 = require("@talismn/chaindata-provider");
6827
7339
  var import_scale24 = require("@talismn/scale");
6828
- var getMiniMetadata11 = ({
7340
+ var getMiniMetadata12 = ({
6829
7341
  networkId,
6830
7342
  specVersion,
6831
7343
  metadataRpc
6832
7344
  }) => {
6833
- const source = MODULE_TYPE11;
7345
+ const source = MODULE_TYPE12;
6834
7346
  const chainId = networkId;
6835
7347
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
6836
7348
  if (specVersion !== systemVersion.spec_version)
@@ -6848,7 +7360,7 @@ var getMiniMetadata11 = ({
6848
7360
  source,
6849
7361
  chainId,
6850
7362
  specVersion,
6851
- version: import_chaindata_provider56.MINIMETADATA_VERSION,
7363
+ version: import_chaindata_provider63.MINIMETADATA_VERSION,
6852
7364
  data: null,
6853
7365
  extra: null
6854
7366
  };
@@ -6858,13 +7370,13 @@ var getMiniMetadata11 = ({
6858
7370
  var import_api_contract3 = require("@polkadot/api-contract");
6859
7371
  var import_types19 = require("@polkadot/types");
6860
7372
  var import_utils9 = require("@polkadot-api/utils");
6861
- var import_chaindata_provider57 = require("@talismn/chaindata-provider");
7373
+ var import_chaindata_provider64 = require("@talismn/chaindata-provider");
6862
7374
  var import_scale25 = require("@talismn/scale");
6863
7375
  var import_polkadot_api7 = require("polkadot-api");
6864
- var getTransferCallData11 = async ({ from: from2, to, value, token, metadataRpc, connector }) => {
6865
- if (!(0, import_chaindata_provider57.isTokenOfType)(token, MODULE_TYPE11))
6866
- throw new Error(`Token type ${token.type} is not ${MODULE_TYPE11}.`);
6867
- const networkId = (0, import_chaindata_provider57.parseTokenId)(token.id).networkId;
7376
+ var getTransferCallData12 = async ({ from: from2, to, value, token, metadataRpc, connector }) => {
7377
+ if (!(0, import_chaindata_provider64.isTokenOfType)(token, MODULE_TYPE12))
7378
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE12}.`);
7379
+ const networkId = (0, import_chaindata_provider64.parseTokenId)(token.id).networkId;
6868
7380
  const { builder } = (0, import_scale25.parseMetadataRpc)(metadataRpc);
6869
7381
  const { codec, location } = builder.buildCall("Contracts", "call");
6870
7382
  const Psp22Abi = new import_api_contract3.Abi(psp22_default);
@@ -6895,22 +7407,22 @@ var getTransferCallData11 = async ({ from: from2, to, value, token, metadataRpc,
6895
7407
  };
6896
7408
 
6897
7409
  // src/modules/substrate-psp22/subscribeBalances.ts
6898
- var import_lodash_es25 = require("lodash-es");
6899
- var import_rxjs13 = require("rxjs");
6900
- var SUBSCRIPTION_INTERVAL8 = 6e3;
6901
- var subscribeBalances11 = ({
7410
+ var import_lodash_es28 = require("lodash-es");
7411
+ var import_rxjs14 = require("rxjs");
7412
+ var SUBSCRIPTION_INTERVAL9 = 6e3;
7413
+ var subscribeBalances12 = ({
6902
7414
  networkId,
6903
7415
  tokensWithAddresses,
6904
7416
  connector,
6905
7417
  miniMetadata
6906
7418
  }) => {
6907
- if (!tokensWithAddresses.length) return (0, import_rxjs13.of)({ success: [], errors: [] });
6908
- return new import_rxjs13.Observable((subscriber) => {
7419
+ if (!tokensWithAddresses.length) return (0, import_rxjs14.of)({ success: [], errors: [] });
7420
+ return new import_rxjs14.Observable((subscriber) => {
6909
7421
  const abortController = new AbortController();
6910
7422
  const poll = async () => {
6911
7423
  try {
6912
7424
  if (abortController.signal.aborted) return;
6913
- const balances = await fetchBalances11({
7425
+ const balances = await fetchBalances12({
6914
7426
  networkId,
6915
7427
  tokensWithAddresses,
6916
7428
  connector,
@@ -6918,10 +7430,10 @@ var subscribeBalances11 = ({
6918
7430
  });
6919
7431
  if (abortController.signal.aborted) return;
6920
7432
  subscriber.next(balances);
6921
- setTimeout(poll, SUBSCRIPTION_INTERVAL8);
7433
+ setTimeout(poll, SUBSCRIPTION_INTERVAL9);
6922
7434
  } catch (error) {
6923
7435
  log_default.error("Error", {
6924
- module: MODULE_TYPE11,
7436
+ module: MODULE_TYPE12,
6925
7437
  networkId,
6926
7438
  miniMetadata,
6927
7439
  addressesByToken: tokensWithAddresses,
@@ -6934,36 +7446,36 @@ var subscribeBalances11 = ({
6934
7446
  return () => {
6935
7447
  abortController.abort();
6936
7448
  };
6937
- }).pipe((0, import_rxjs13.distinctUntilChanged)(import_lodash_es25.isEqual));
7449
+ }).pipe((0, import_rxjs14.distinctUntilChanged)(import_lodash_es28.isEqual));
6938
7450
  };
6939
7451
 
6940
7452
  // src/modules/substrate-psp22/module.ts
6941
7453
  var SubPsp22BalanceModule = {
6942
- type: MODULE_TYPE11,
6943
- platform: PLATFORM11,
6944
- getMiniMetadata: getMiniMetadata11,
6945
- fetchTokens: fetchTokens11,
6946
- fetchBalances: fetchBalances11,
6947
- subscribeBalances: subscribeBalances11,
6948
- getTransferCallData: getTransferCallData11
7454
+ type: MODULE_TYPE12,
7455
+ platform: PLATFORM12,
7456
+ getMiniMetadata: getMiniMetadata12,
7457
+ fetchTokens: fetchTokens12,
7458
+ fetchBalances: fetchBalances12,
7459
+ subscribeBalances: subscribeBalances12,
7460
+ getTransferCallData: getTransferCallData12
6949
7461
  };
6950
7462
 
6951
7463
  // src/modules/substrate-psp22/types.ts
6952
- var import_chaindata_provider58 = require("@talismn/chaindata-provider");
6953
- var import_v415 = __toESM(require("zod/v4"));
6954
- var SubPsp22TokenConfigSchema = import_v415.default.strictObject({
6955
- contractAddress: import_chaindata_provider58.SubPsp22TokenSchema.shape.contractAddress,
7464
+ var import_chaindata_provider65 = require("@talismn/chaindata-provider");
7465
+ var import_v417 = __toESM(require("zod/v4"));
7466
+ var SubPsp22TokenConfigSchema = import_v417.default.strictObject({
7467
+ contractAddress: import_chaindata_provider65.SubPsp22TokenSchema.shape.contractAddress,
6956
7468
  ...TokenConfigBaseSchema.shape
6957
7469
  });
6958
7470
 
6959
7471
  // src/modules/substrate-tokens/config.ts
6960
- var import_chaindata_provider59 = require("@talismn/chaindata-provider");
6961
- var MODULE_TYPE12 = import_chaindata_provider59.SubTokensTokenSchema.shape.type.value;
6962
- var PLATFORM12 = import_chaindata_provider59.SubTokensTokenSchema.shape.platform.value;
7472
+ var import_chaindata_provider66 = require("@talismn/chaindata-provider");
7473
+ var MODULE_TYPE13 = import_chaindata_provider66.SubTokensTokenSchema.shape.type.value;
7474
+ var PLATFORM13 = import_chaindata_provider66.SubTokensTokenSchema.shape.platform.value;
6963
7475
 
6964
7476
  // src/modules/substrate-tokens/buildQueries.ts
6965
7477
  var import_scale26 = require("@talismn/scale");
6966
- var import_util14 = require("@talismn/util");
7478
+ var import_util13 = require("@talismn/util");
6967
7479
  var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
6968
7480
  const networkStorageCoders = buildNetworkStorageCoders(networkId, miniMetadata, {
6969
7481
  storage: [miniMetadata.extra.palletId, "Accounts"]
@@ -7011,15 +7523,15 @@ var buildQueries3 = (networkId, balanceDefs, miniMetadata) => {
7011
7523
  stateKeys: [stateKey],
7012
7524
  decodeResult
7013
7525
  };
7014
- }).filter(import_util14.isNotNil);
7526
+ }).filter(import_util13.isNotNil);
7015
7527
  };
7016
7528
 
7017
7529
  // src/modules/substrate-tokens/fetchBalances.ts
7018
- var fetchBalances12 = async ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
7530
+ var fetchBalances13 = async ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
7019
7531
  if (!tokensWithAddresses.length) return { success: [], errors: [] };
7020
7532
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
7021
7533
  if (!miniMetadata?.data) {
7022
- log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE12} balances on ${networkId}.`);
7534
+ log_default.warn(`MiniMetadata is required for fetching ${MODULE_TYPE13} balances on ${networkId}.`);
7023
7535
  return {
7024
7536
  success: [],
7025
7537
  errors: balanceDefs.map((def) => ({
@@ -7029,20 +7541,20 @@ var fetchBalances12 = async ({ networkId, tokensWithAddresses, connector, miniMe
7029
7541
  }))
7030
7542
  };
7031
7543
  }
7032
- if (miniMetadata.source !== MODULE_TYPE12) {
7033
- log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE12}.`);
7544
+ if (miniMetadata.source !== MODULE_TYPE13) {
7545
+ log_default.warn(`Ignoring miniMetadata with source ${miniMetadata.source} in ${MODULE_TYPE13}.`);
7034
7546
  return {
7035
7547
  success: [],
7036
7548
  errors: balanceDefs.map((def) => ({
7037
7549
  tokenId: def.token.id,
7038
7550
  address: def.address,
7039
- error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE12}`)
7551
+ error: new Error(`Invalid request: miniMetadata source is not ${MODULE_TYPE13}`)
7040
7552
  }))
7041
7553
  };
7042
7554
  }
7043
7555
  if (miniMetadata.chainId !== networkId) {
7044
7556
  log_default.warn(
7045
- `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE12}. Expected chainId is ${networkId}`
7557
+ `Ignoring miniMetadata with chainId ${miniMetadata.chainId} in ${MODULE_TYPE13}. Expected chainId is ${networkId}`
7046
7558
  );
7047
7559
  return {
7048
7560
  success: [],
@@ -7066,7 +7578,7 @@ var fetchBalances12 = async ({ networkId, tokensWithAddresses, connector, miniMe
7066
7578
  address: def.address,
7067
7579
  networkId,
7068
7580
  tokenId: def.token.id,
7069
- source: MODULE_TYPE12,
7581
+ source: MODULE_TYPE13,
7070
7582
  status: "live",
7071
7583
  values: [
7072
7584
  { type: "free", label: "free", amount: "0" },
@@ -7080,20 +7592,20 @@ var fetchBalances12 = async ({ networkId, tokensWithAddresses, connector, miniMe
7080
7592
  };
7081
7593
 
7082
7594
  // src/modules/substrate-tokens/fetchTokens.ts
7083
- var import_chaindata_provider60 = require("@talismn/chaindata-provider");
7084
- var import_lodash_es26 = require("lodash-es");
7085
- var fetchTokens12 = async ({
7595
+ var import_chaindata_provider67 = require("@talismn/chaindata-provider");
7596
+ var import_lodash_es29 = require("lodash-es");
7597
+ var fetchTokens13 = async ({
7086
7598
  networkId,
7087
7599
  tokens,
7088
7600
  miniMetadata
7089
7601
  }) => {
7090
7602
  if (!miniMetadata?.data) return [];
7091
7603
  return tokens.map(
7092
- (tokenConfig) => (0, import_lodash_es26.assign)(
7604
+ (tokenConfig) => (0, import_lodash_es29.assign)(
7093
7605
  {
7094
- id: (0, import_chaindata_provider60.subTokensTokenId)(networkId, tokenConfig.onChainId),
7095
- type: MODULE_TYPE12,
7096
- platform: PLATFORM12,
7606
+ id: (0, import_chaindata_provider67.subTokensTokenId)(networkId, tokenConfig.onChainId),
7607
+ type: MODULE_TYPE13,
7608
+ platform: PLATFORM13,
7097
7609
  networkId,
7098
7610
  onChainId: tokenConfig.onChainId,
7099
7611
  symbol: tokenConfig.symbol ?? "Unit",
@@ -7108,10 +7620,10 @@ var fetchTokens12 = async ({
7108
7620
  };
7109
7621
 
7110
7622
  // src/modules/substrate-tokens/getMiniMetadata.ts
7111
- var import_chaindata_provider61 = require("@talismn/chaindata-provider");
7623
+ var import_chaindata_provider68 = require("@talismn/chaindata-provider");
7112
7624
  var import_scale27 = require("@talismn/scale");
7113
- var getMiniMetadata12 = ({ networkId, specVersion, metadataRpc, config }) => {
7114
- const source = MODULE_TYPE12;
7625
+ var getMiniMetadata13 = ({ networkId, specVersion, metadataRpc, config }) => {
7626
+ const source = MODULE_TYPE13;
7115
7627
  const chainId = networkId;
7116
7628
  const systemVersion = getConstantValue(metadataRpc, "System", "Version");
7117
7629
  if (specVersion !== systemVersion.spec_version)
@@ -7130,7 +7642,7 @@ var getMiniMetadata12 = ({ networkId, specVersion, metadataRpc, config }) => {
7130
7642
  source,
7131
7643
  chainId,
7132
7644
  specVersion,
7133
- version: import_chaindata_provider61.MINIMETADATA_VERSION,
7645
+ version: import_chaindata_provider68.MINIMETADATA_VERSION,
7134
7646
  data: getData5(metadataRpc, extra.palletId),
7135
7647
  extra
7136
7648
  };
@@ -7144,12 +7656,12 @@ var getData5 = (metadataRpc, pallet) => {
7144
7656
 
7145
7657
  // src/modules/substrate-tokens/getTransferCallData.ts
7146
7658
  var import_utils10 = require("@polkadot-api/utils");
7147
- var import_chaindata_provider62 = require("@talismn/chaindata-provider");
7659
+ var import_chaindata_provider69 = require("@talismn/chaindata-provider");
7148
7660
  var import_scale28 = require("@talismn/scale");
7149
7661
  var import_polkadot_api8 = require("polkadot-api");
7150
- var getTransferCallData12 = ({ from: from2, to, value, token, type, metadataRpc, config }) => {
7151
- if (!(0, import_chaindata_provider62.isTokenOfType)(token, MODULE_TYPE12))
7152
- throw new Error(`Token type ${token.type} is not ${MODULE_TYPE12}.`);
7662
+ var getTransferCallData13 = ({ from: from2, to, value, token, type, metadataRpc, config }) => {
7663
+ if (!(0, import_chaindata_provider69.isTokenOfType)(token, MODULE_TYPE13))
7664
+ throw new Error(`Token type ${token.type} is not ${MODULE_TYPE13}.`);
7153
7665
  const { builder } = (0, import_scale28.parseMetadataRpc)(metadataRpc);
7154
7666
  const options = getCallDataOptions(to, token, value, type, config);
7155
7667
  const callData = getCallDataFromOptions(builder, options);
@@ -7262,13 +7774,13 @@ var getCallDataOptions = (to, token, value, type, config) => {
7262
7774
  };
7263
7775
 
7264
7776
  // src/modules/substrate-tokens/subscribeBalances.ts
7265
- var import_rxjs14 = require("rxjs");
7266
- var subscribeBalances12 = ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
7267
- if (!tokensWithAddresses.length) return (0, import_rxjs14.of)({ success: [], errors: [] });
7777
+ var import_rxjs15 = require("rxjs");
7778
+ var subscribeBalances13 = ({ networkId, tokensWithAddresses, connector, miniMetadata }) => {
7779
+ if (!tokensWithAddresses.length) return (0, import_rxjs15.of)({ success: [], errors: [] });
7268
7780
  const balanceDefs = getBalanceDefs(tokensWithAddresses);
7269
7781
  const queries = buildQueries3(networkId, balanceDefs, miniMetadata);
7270
7782
  return getRpcQueryPack$(connector, networkId, queries).pipe(
7271
- (0, import_rxjs14.map)((balances) => ({
7783
+ (0, import_rxjs15.map)((balances) => ({
7272
7784
  success: balances,
7273
7785
  errors: []
7274
7786
  }))
@@ -7277,31 +7789,31 @@ var subscribeBalances12 = ({ networkId, tokensWithAddresses, connector, miniMeta
7277
7789
 
7278
7790
  // src/modules/substrate-tokens/module.ts
7279
7791
  var SubTokensBalanceModule = {
7280
- type: MODULE_TYPE12,
7281
- platform: PLATFORM12,
7282
- getMiniMetadata: getMiniMetadata12,
7283
- fetchTokens: fetchTokens12,
7284
- fetchBalances: fetchBalances12,
7285
- subscribeBalances: subscribeBalances12,
7286
- getTransferCallData: getTransferCallData12
7792
+ type: MODULE_TYPE13,
7793
+ platform: PLATFORM13,
7794
+ getMiniMetadata: getMiniMetadata13,
7795
+ fetchTokens: fetchTokens13,
7796
+ fetchBalances: fetchBalances13,
7797
+ subscribeBalances: subscribeBalances13,
7798
+ getTransferCallData: getTransferCallData13
7287
7799
  };
7288
7800
 
7289
7801
  // src/modules/substrate-tokens/types.ts
7290
- var import_chaindata_provider63 = require("@talismn/chaindata-provider");
7291
- var import_v416 = __toESM(require("zod/v4"));
7292
- var SubTokensTokenConfigSchema = import_v416.default.strictObject({
7293
- onChainId: import_chaindata_provider63.SubTokensTokenSchema.shape.onChainId,
7802
+ var import_chaindata_provider70 = require("@talismn/chaindata-provider");
7803
+ var import_v418 = __toESM(require("zod/v4"));
7804
+ var SubTokensTokenConfigSchema = import_v418.default.strictObject({
7805
+ onChainId: import_chaindata_provider70.SubTokensTokenSchema.shape.onChainId,
7294
7806
  ...TokenConfigBaseSchema.shape,
7295
7807
  // force these 3 fields because in this module we wont pull anything from chain
7296
- symbol: import_v416.default.string().nonempty(),
7297
- decimals: import_v416.default.number(),
7298
- existentialDeposit: import_v416.default.string().nonempty()
7808
+ symbol: import_v418.default.string().nonempty(),
7809
+ decimals: import_v418.default.number(),
7810
+ existentialDeposit: import_v418.default.string().nonempty()
7299
7811
  });
7300
- var SubTokensModuleConfigSchema = import_v416.default.strictObject({
7301
- palletId: import_v416.default.string().optional()
7812
+ var SubTokensModuleConfigSchema = import_v418.default.strictObject({
7813
+ palletId: import_v418.default.string().optional()
7302
7814
  });
7303
- var SubTokensMiniMetadataExtraSchema = import_v416.default.strictObject({
7304
- palletId: import_v416.default.string()
7815
+ var SubTokensMiniMetadataExtraSchema = import_v418.default.strictObject({
7816
+ palletId: import_v418.default.string()
7305
7817
  });
7306
7818
 
7307
7819
  // src/modules/index.ts
@@ -7317,12 +7829,13 @@ var BALANCE_MODULES = [
7317
7829
  EvmUniswapV2BalanceModule,
7318
7830
  EvmNativeBalanceModule,
7319
7831
  SolNativeBalanceModule,
7320
- SolSplBalanceModule
7832
+ SolSplBalanceModule,
7833
+ SolToken2022BalanceModule
7321
7834
  ];
7322
7835
 
7323
7836
  // src/getMiniMetadatas/getMetadataRpc.ts
7324
7837
  var import_sapi = require("@talismn/sapi");
7325
- var import_util15 = require("@talismn/util");
7838
+ var import_util14 = require("@talismn/util");
7326
7839
  var CACHE = /* @__PURE__ */ new Map();
7327
7840
  var getMetadataRpc = async (chainConnector, networkId) => {
7328
7841
  if (CACHE.has(networkId)) return CACHE.get(networkId);
@@ -7336,7 +7849,7 @@ var getMetadataRpc = async (chainConnector, networkId) => {
7336
7849
  try {
7337
7850
  return await pResult;
7338
7851
  } catch (cause) {
7339
- if ((0, import_util15.isAbortError)(cause)) throw cause;
7852
+ if ((0, import_util14.isAbortError)(cause)) throw cause;
7340
7853
  throw new Error(`Failed to fetch metadataRpc for network ${networkId}`, { cause });
7341
7854
  } finally {
7342
7855
  CACHE.delete(networkId);
@@ -7424,37 +7937,37 @@ var BalancesProvider = class {
7424
7937
  constructor(chaindataProvider, chainConnectors, storage = DEFAULT_STORAGE) {
7425
7938
  this.#chaindataProvider = chaindataProvider;
7426
7939
  this.#chainConnectors = chainConnectors;
7427
- this.#storage = new import_rxjs15.BehaviorSubject({
7428
- balances: (0, import_lodash_es27.keyBy)(storage.balances.filter(import_util16.isNotNil), (b) => getBalanceId(b)),
7429
- miniMetadatas: (0, import_lodash_es27.keyBy)(storage.miniMetadatas.filter(import_util16.isNotNil), (m) => m.id)
7940
+ this.#storage = new import_rxjs16.BehaviorSubject({
7941
+ balances: (0, import_lodash_es30.keyBy)(storage.balances.filter(import_util15.isNotNil), (b) => getBalanceId(b)),
7942
+ miniMetadatas: (0, import_lodash_es30.keyBy)(storage.miniMetadatas.filter(import_util15.isNotNil), (m) => m.id)
7430
7943
  });
7431
7944
  }
7432
7945
  get storage$() {
7433
7946
  return this.#storage.pipe(
7434
- (0, import_rxjs15.map)(
7947
+ (0, import_rxjs16.map)(
7435
7948
  ({ balances, miniMetadatas }) => ({
7436
- balances: (0, import_lodash_es27.values)(balances).filter(import_util16.isNotNil).sort(sortByBalanceId),
7437
- miniMetadatas: (0, import_lodash_es27.values)(miniMetadatas).filter(import_util16.isNotNil).sort(sortByMiniMetadataId)
7949
+ balances: (0, import_lodash_es30.values)(balances).filter(import_util15.isNotNil).sort(sortByBalanceId),
7950
+ miniMetadatas: (0, import_lodash_es30.values)(miniMetadatas).filter(import_util15.isNotNil).sort(sortByMiniMetadataId)
7438
7951
  }),
7439
- (0, import_rxjs15.shareReplay)(1)
7952
+ (0, import_rxjs16.shareReplay)(1)
7440
7953
  )
7441
7954
  );
7442
7955
  }
7443
7956
  get storedMiniMetadataMapById$() {
7444
7957
  return this.#storage.pipe(
7445
- (0, import_rxjs15.map)((storage) => (0, import_lodash_es27.keyBy)(storage.miniMetadatas, (m) => m.id)),
7446
- (0, import_rxjs15.distinctUntilChanged)(import_lodash_es27.isEqual),
7447
- (0, import_rxjs15.shareReplay)(1)
7958
+ (0, import_rxjs16.map)((storage) => (0, import_lodash_es30.keyBy)(storage.miniMetadatas, (m) => m.id)),
7959
+ (0, import_rxjs16.distinctUntilChanged)(import_lodash_es30.isEqual),
7960
+ (0, import_rxjs16.shareReplay)(1)
7448
7961
  );
7449
7962
  }
7450
7963
  // this is the only public method
7451
7964
  getBalances$(addressesByTokenId) {
7452
7965
  return this.cleanupAddressesByTokenId$(addressesByTokenId).pipe(
7453
- (0, import_rxjs15.map)(
7966
+ (0, import_rxjs16.map)(
7454
7967
  // split by network
7455
- (addressesByTokenId2) => (0, import_lodash_es27.toPairs)(addressesByTokenId2).reduce(
7968
+ (addressesByTokenId2) => (0, import_lodash_es30.toPairs)(addressesByTokenId2).reduce(
7456
7969
  (acc, [tokenId, addresses]) => {
7457
- const networkId = (0, import_chaindata_provider64.parseTokenId)(tokenId).networkId;
7970
+ const networkId = (0, import_chaindata_provider71.parseTokenId)(tokenId).networkId;
7458
7971
  if (!acc[networkId]) acc[networkId] = {};
7459
7972
  acc[networkId][tokenId] = addresses;
7460
7973
  return acc;
@@ -7462,21 +7975,21 @@ var BalancesProvider = class {
7462
7975
  {}
7463
7976
  )
7464
7977
  ),
7465
- (0, import_rxjs15.switchMap)((addressesByTokenIdByNetworkId) => {
7466
- if (!(0, import_lodash_es27.keys)(addressesByTokenIdByNetworkId).length) return (0, import_rxjs15.of)({ isStale: false, results: [] });
7467
- return (0, import_rxjs15.combineLatest)({
7468
- isStale: (0, import_rxjs15.timer)(3e4).pipe(
7469
- (0, import_rxjs15.map)(() => true),
7470
- (0, import_rxjs15.startWith)(false)
7978
+ (0, import_rxjs16.switchMap)((addressesByTokenIdByNetworkId) => {
7979
+ if (!(0, import_lodash_es30.keys)(addressesByTokenIdByNetworkId).length) return (0, import_rxjs16.of)({ isStale: false, results: [] });
7980
+ return (0, import_rxjs16.combineLatest)({
7981
+ isStale: (0, import_rxjs16.timer)(3e4).pipe(
7982
+ (0, import_rxjs16.map)(() => true),
7983
+ (0, import_rxjs16.startWith)(false)
7471
7984
  ),
7472
- results: (0, import_rxjs15.combineLatest)(
7473
- (0, import_lodash_es27.toPairs)(addressesByTokenIdByNetworkId).map(
7985
+ results: (0, import_rxjs16.combineLatest)(
7986
+ (0, import_lodash_es30.toPairs)(addressesByTokenIdByNetworkId).map(
7474
7987
  ([networkId]) => this.getNetworkBalances$(networkId, addressesByTokenIdByNetworkId[networkId])
7475
7988
  )
7476
7989
  )
7477
7990
  });
7478
7991
  }),
7479
- (0, import_rxjs15.map)(
7992
+ (0, import_rxjs16.map)(
7480
7993
  // combine
7481
7994
  ({ isStale, results }) => ({
7482
7995
  status: !isStale && results.some(({ status }) => status === "initialising") ? "initialising" : "live",
@@ -7488,14 +8001,14 @@ var BalancesProvider = class {
7488
8001
  failedBalanceIds: results.flatMap((result) => result.failedBalanceIds)
7489
8002
  })
7490
8003
  ),
7491
- (0, import_rxjs15.distinctUntilChanged)(import_lodash_es27.isEqual)
8004
+ (0, import_rxjs16.distinctUntilChanged)(import_lodash_es30.isEqual)
7492
8005
  );
7493
8006
  }
7494
8007
  fetchBalances(addressesByTokenId) {
7495
- return (0, import_rxjs15.firstValueFrom)(
8008
+ return (0, import_rxjs16.firstValueFrom)(
7496
8009
  this.getBalances$(addressesByTokenId).pipe(
7497
- (0, import_rxjs15.filter)(({ status }) => status === "live"),
7498
- (0, import_rxjs15.map)(({ balances }) => balances)
8010
+ (0, import_rxjs16.filter)(({ status }) => status === "live"),
8011
+ (0, import_rxjs16.map)(({ balances }) => balances)
7499
8012
  )
7500
8013
  );
7501
8014
  }
@@ -7505,12 +8018,12 @@ var BalancesProvider = class {
7505
8018
  getNetworkBalances$(networkId, addressesByTokenId) {
7506
8019
  const network$ = this.#chaindataProvider.getNetworkById$(networkId);
7507
8020
  const tokensMapById$ = this.#chaindataProvider.getTokensMapById$();
7508
- return (0, import_rxjs15.combineLatest)([network$, tokensMapById$]).pipe(
7509
- (0, import_rxjs15.switchMap)(([network, tokensMapById]) => {
7510
- const tokensAndAddresses = (0, import_lodash_es27.toPairs)(addressesByTokenId).map(
8021
+ return (0, import_rxjs16.combineLatest)([network$, tokensMapById$]).pipe(
8022
+ (0, import_rxjs16.switchMap)(([network, tokensMapById]) => {
8023
+ const tokensAndAddresses = (0, import_lodash_es30.toPairs)(addressesByTokenId).map(
7511
8024
  ([tokenId, addresses]) => [tokensMapById[tokenId], addresses]
7512
8025
  );
7513
- return (0, import_rxjs15.combineLatest)(
8026
+ return (0, import_rxjs16.combineLatest)(
7514
8027
  BALANCE_MODULES.filter((mod) => mod.platform === network?.platform).map((mod) => {
7515
8028
  const tokensWithAddresses = tokensAndAddresses.filter(
7516
8029
  ([token]) => token.type === mod.type
@@ -7527,41 +8040,41 @@ var BalancesProvider = class {
7527
8040
  }
7528
8041
  default: {
7529
8042
  log_default.warn("[balances] Unsupported network platform for module", { networkId, mod });
7530
- return (0, import_rxjs15.of)({ status: "live", balances: [], failedBalanceIds: [] });
8043
+ return (0, import_rxjs16.of)({ status: "live", balances: [], failedBalanceIds: [] });
7531
8044
  }
7532
8045
  }
7533
8046
  })
7534
8047
  );
7535
8048
  }),
7536
- (0, import_rxjs15.map)((results) => {
8049
+ (0, import_rxjs16.map)((results) => {
7537
8050
  const errorBalanceIds = results.flatMap((result) => result.failedBalanceIds);
7538
- const staleBalances = errorBalanceIds.map((balanceId) => this.#storage.value.balances[balanceId]).filter(import_util16.isNotNil).map((b) => ({ ...b, status: "stale" }));
8051
+ const staleBalances = errorBalanceIds.map((balanceId) => this.#storage.value.balances[balanceId]).filter(import_util15.isNotNil).map((b) => ({ ...b, status: "stale" }));
7539
8052
  return {
7540
8053
  status: results.some(({ status }) => status === "initialising") ? "initialising" : "live",
7541
8054
  balances: results.flatMap((result) => result.balances).concat(staleBalances).sort(sortByBalanceId),
7542
8055
  failedBalanceIds: []
7543
8056
  };
7544
8057
  }),
7545
- (0, import_rxjs15.distinctUntilChanged)(import_lodash_es27.isEqual)
8058
+ (0, import_rxjs16.distinctUntilChanged)(import_lodash_es30.isEqual)
7546
8059
  );
7547
8060
  }
7548
8061
  getPolkadotNetworkModuleBalances$(networkId, tokensWithAddresses, mod) {
7549
- return (0, import_util16.getSharedObservable)(
8062
+ return (0, import_util15.getSharedObservable)(
7550
8063
  `BalancesProvider.getPolkadotNetworkModuleBalances$`,
7551
8064
  { networkId, mod, tokensWithAddresses },
7552
8065
  () => {
7553
8066
  if (!tokensWithAddresses.length)
7554
- return (0, import_rxjs15.of)({ status: "live", balances: [], failedBalanceIds: [] });
7555
- const moduleAddressesByTokenId = (0, import_lodash_es27.fromPairs)(
8067
+ return (0, import_rxjs16.of)({ status: "live", balances: [], failedBalanceIds: [] });
8068
+ const moduleAddressesByTokenId = (0, import_lodash_es30.fromPairs)(
7556
8069
  tokensWithAddresses.map(([token, addresses]) => [token.id, addresses])
7557
8070
  );
7558
- const balanceIds = (0, import_lodash_es27.toPairs)(moduleAddressesByTokenId).flatMap(
8071
+ const balanceIds = (0, import_lodash_es30.toPairs)(moduleAddressesByTokenId).flatMap(
7559
8072
  ([tokenId, addresses]) => addresses.map((address) => getBalanceId({ tokenId, address }))
7560
8073
  );
7561
8074
  if (!this.#chainConnectors.substrate) {
7562
8075
  log_default.warn("[balances] no substrate connector or miniMetadata for module", mod.type);
7563
- return (0, import_rxjs15.defer)(
7564
- () => (0, import_rxjs15.of)({
8076
+ return (0, import_rxjs16.defer)(
8077
+ () => (0, import_rxjs16.of)({
7565
8078
  status: "initialising",
7566
8079
  balances: this.getStoredBalances(moduleAddressesByTokenId),
7567
8080
  failedBalanceIds: []
@@ -7569,8 +8082,8 @@ var BalancesProvider = class {
7569
8082
  );
7570
8083
  }
7571
8084
  const moduleBalances$ = this.getNetworkMiniMetadatas$(networkId).pipe(
7572
- (0, import_rxjs15.map)((miniMetadatas) => miniMetadatas.find((m) => m.source === mod.type)),
7573
- (0, import_rxjs15.switchMap)(
8085
+ (0, import_rxjs16.map)((miniMetadatas) => miniMetadatas.find((m) => m.source === mod.type)),
8086
+ (0, import_rxjs16.switchMap)(
7574
8087
  (miniMetadata) => mod.subscribeBalances({
7575
8088
  networkId,
7576
8089
  tokensWithAddresses,
@@ -7578,14 +8091,14 @@ var BalancesProvider = class {
7578
8091
  miniMetadata
7579
8092
  })
7580
8093
  ),
7581
- (0, import_rxjs15.catchError)(() => import_rxjs15.EMPTY),
8094
+ (0, import_rxjs16.catchError)(() => import_rxjs16.EMPTY),
7582
8095
  // don't emit, let provider mark balances stale
7583
- (0, import_rxjs15.tap)((results) => {
8096
+ (0, import_rxjs16.tap)((results) => {
7584
8097
  if (results.dynamicTokens?.length) {
7585
8098
  this.#chaindataProvider.registerDynamicTokens(results.dynamicTokens);
7586
8099
  }
7587
8100
  }),
7588
- (0, import_rxjs15.map)(
8101
+ (0, import_rxjs16.map)(
7589
8102
  (results) => ({
7590
8103
  status: "live",
7591
8104
  // exclude zero balances
@@ -7595,16 +8108,16 @@ var BalancesProvider = class {
7595
8108
  )
7596
8109
  })
7597
8110
  ),
7598
- (0, import_rxjs15.tap)((results) => {
8111
+ (0, import_rxjs16.tap)((results) => {
7599
8112
  this.updateStorage$(balanceIds, results);
7600
8113
  }),
7601
8114
  // shareReplay + keepAlive(0) keep the subscription alive while root observable is being unsubscribed+resubscribed, in case any input change
7602
- (0, import_rxjs15.shareReplay)({ refCount: true, bufferSize: 1 }),
7603
- (0, import_util16.keepAlive)(0)
8115
+ (0, import_rxjs16.shareReplay)({ refCount: true, bufferSize: 1 }),
8116
+ (0, import_util15.keepAlive)(0)
7604
8117
  );
7605
- return (0, import_rxjs15.defer)(
8118
+ return (0, import_rxjs16.defer)(
7606
8119
  () => moduleBalances$.pipe(
7607
- (0, import_rxjs15.startWith)({
8120
+ (0, import_rxjs16.startWith)({
7608
8121
  status: "initialising",
7609
8122
  balances: this.getStoredBalances(moduleAddressesByTokenId),
7610
8123
  failedBalanceIds: []
@@ -7615,22 +8128,22 @@ var BalancesProvider = class {
7615
8128
  );
7616
8129
  }
7617
8130
  getEthereumNetworkModuleBalances$(networkId, tokensWithAddresses, mod) {
7618
- return (0, import_util16.getSharedObservable)(
8131
+ return (0, import_util15.getSharedObservable)(
7619
8132
  `BalancesProvider.getEthereumNetworkModuleBalances$`,
7620
8133
  { networkId, mod, tokensWithAddresses },
7621
8134
  () => {
7622
8135
  if (!tokensWithAddresses.length)
7623
- return (0, import_rxjs15.of)({ status: "live", balances: [], failedBalanceIds: [] });
7624
- const moduleAddressesByTokenId = (0, import_lodash_es27.fromPairs)(
8136
+ return (0, import_rxjs16.of)({ status: "live", balances: [], failedBalanceIds: [] });
8137
+ const moduleAddressesByTokenId = (0, import_lodash_es30.fromPairs)(
7625
8138
  tokensWithAddresses.map(([token, addresses]) => [token.id, addresses])
7626
8139
  );
7627
- const balanceIds = (0, import_lodash_es27.toPairs)(moduleAddressesByTokenId).flatMap(
8140
+ const balanceIds = (0, import_lodash_es30.toPairs)(moduleAddressesByTokenId).flatMap(
7628
8141
  ([tokenId, addresses]) => addresses.map((address) => getBalanceId({ tokenId, address }))
7629
8142
  );
7630
8143
  if (!this.#chainConnectors.evm) {
7631
8144
  log_default.warn("[balances] no ethereum connector for module", mod.type);
7632
- return (0, import_rxjs15.defer)(
7633
- () => (0, import_rxjs15.of)({
8145
+ return (0, import_rxjs16.defer)(
8146
+ () => (0, import_rxjs16.of)({
7634
8147
  status: "initialising",
7635
8148
  balances: this.getStoredBalances(moduleAddressesByTokenId),
7636
8149
  failedBalanceIds: []
@@ -7642,9 +8155,9 @@ var BalancesProvider = class {
7642
8155
  tokensWithAddresses,
7643
8156
  connector: this.#chainConnectors.evm
7644
8157
  }).pipe(
7645
- (0, import_rxjs15.catchError)(() => import_rxjs15.EMPTY),
8158
+ (0, import_rxjs16.catchError)(() => import_rxjs16.EMPTY),
7646
8159
  // don't emit, let provider mark balances stale
7647
- (0, import_rxjs15.map)(
8160
+ (0, import_rxjs16.map)(
7648
8161
  (results) => ({
7649
8162
  status: "live",
7650
8163
  // exclude zero balances
@@ -7654,16 +8167,16 @@ var BalancesProvider = class {
7654
8167
  )
7655
8168
  })
7656
8169
  ),
7657
- (0, import_rxjs15.tap)((results) => {
8170
+ (0, import_rxjs16.tap)((results) => {
7658
8171
  this.updateStorage$(balanceIds, results);
7659
8172
  }),
7660
8173
  // shareReplay + keepAlive(0) keep the subscription alive while root observable is being unsubscribed+resubscribed, in case any input change
7661
- (0, import_rxjs15.shareReplay)({ refCount: true, bufferSize: 1 }),
7662
- (0, import_util16.keepAlive)(0)
8174
+ (0, import_rxjs16.shareReplay)({ refCount: true, bufferSize: 1 }),
8175
+ (0, import_util15.keepAlive)(0)
7663
8176
  );
7664
- return (0, import_rxjs15.defer)(
8177
+ return (0, import_rxjs16.defer)(
7665
8178
  () => moduleBalances$.pipe(
7666
- (0, import_rxjs15.startWith)({
8179
+ (0, import_rxjs16.startWith)({
7667
8180
  status: "initialising",
7668
8181
  balances: this.getStoredBalances(moduleAddressesByTokenId),
7669
8182
  failedBalanceIds: []
@@ -7674,22 +8187,22 @@ var BalancesProvider = class {
7674
8187
  );
7675
8188
  }
7676
8189
  getSolanaNetworkModuleBalances$(networkId, tokensWithAddresses, mod) {
7677
- return (0, import_util16.getSharedObservable)(
8190
+ return (0, import_util15.getSharedObservable)(
7678
8191
  `BalancesProvider.getSolanaNetworkModuleBalances$`,
7679
8192
  { networkId, mod, tokensWithAddresses },
7680
8193
  () => {
7681
8194
  if (!tokensWithAddresses.length)
7682
- return (0, import_rxjs15.of)({ status: "live", balances: [], failedBalanceIds: [] });
7683
- const moduleAddressesByTokenId = (0, import_lodash_es27.fromPairs)(
8195
+ return (0, import_rxjs16.of)({ status: "live", balances: [], failedBalanceIds: [] });
8196
+ const moduleAddressesByTokenId = (0, import_lodash_es30.fromPairs)(
7684
8197
  tokensWithAddresses.map(([token, addresses]) => [token.id, addresses])
7685
8198
  );
7686
- const balanceIds = (0, import_lodash_es27.toPairs)(moduleAddressesByTokenId).flatMap(
8199
+ const balanceIds = (0, import_lodash_es30.toPairs)(moduleAddressesByTokenId).flatMap(
7687
8200
  ([tokenId, addresses]) => addresses.map((address) => getBalanceId({ tokenId, address }))
7688
8201
  );
7689
8202
  if (!this.#chainConnectors.solana) {
7690
8203
  log_default.warn("[balances] no solana connector for module", mod.type);
7691
- return (0, import_rxjs15.defer)(
7692
- () => (0, import_rxjs15.of)({
8204
+ return (0, import_rxjs16.defer)(
8205
+ () => (0, import_rxjs16.of)({
7693
8206
  status: "initialising",
7694
8207
  balances: this.getStoredBalances(moduleAddressesByTokenId),
7695
8208
  failedBalanceIds: []
@@ -7701,9 +8214,14 @@ var BalancesProvider = class {
7701
8214
  tokensWithAddresses,
7702
8215
  connector: this.#chainConnectors.solana
7703
8216
  }).pipe(
7704
- (0, import_rxjs15.catchError)(() => import_rxjs15.EMPTY),
8217
+ (0, import_rxjs16.catchError)(() => import_rxjs16.EMPTY),
7705
8218
  // don't emit, let provider mark balances stale
7706
- (0, import_rxjs15.map)(
8219
+ (0, import_rxjs16.tap)((results) => {
8220
+ if (results.dynamicTokens?.length) {
8221
+ this.#chaindataProvider.registerDynamicTokens(results.dynamicTokens);
8222
+ }
8223
+ }),
8224
+ (0, import_rxjs16.map)(
7707
8225
  (results) => ({
7708
8226
  status: "live",
7709
8227
  // exclude zero balances
@@ -7713,16 +8231,16 @@ var BalancesProvider = class {
7713
8231
  )
7714
8232
  })
7715
8233
  ),
7716
- (0, import_rxjs15.tap)((results) => {
8234
+ (0, import_rxjs16.tap)((results) => {
7717
8235
  this.updateStorage$(balanceIds, results);
7718
8236
  }),
7719
8237
  // shareReplay + keepAlive(0) keep the subscription alive while root observable is being unsubscribed+resubscribed, in case any input change
7720
- (0, import_rxjs15.shareReplay)({ refCount: true, bufferSize: 1 }),
7721
- (0, import_util16.keepAlive)(0)
8238
+ (0, import_rxjs16.shareReplay)({ refCount: true, bufferSize: 1 }),
8239
+ (0, import_util15.keepAlive)(0)
7722
8240
  );
7723
- return (0, import_rxjs15.defer)(
8241
+ return (0, import_rxjs16.defer)(
7724
8242
  () => moduleBalances$.pipe(
7725
- (0, import_rxjs15.startWith)({
8243
+ (0, import_rxjs16.startWith)({
7726
8244
  status: "initialising",
7727
8245
  balances: this.getStoredBalances(moduleAddressesByTokenId),
7728
8246
  failedBalanceIds: []
@@ -7736,14 +8254,14 @@ var BalancesProvider = class {
7736
8254
  if (balancesResult.status !== "live") return;
7737
8255
  const storage = this.#storage.getValue();
7738
8256
  const failedIds = new Set(balancesResult.failedBalanceIds);
7739
- const balances = (0, import_lodash_es27.assign)(
8257
+ const balances = (0, import_lodash_es30.assign)(
7740
8258
  {},
7741
8259
  storage.balances,
7742
8260
  // delete all balances expected in the result set (except the ones that failed). because if they are not present it means they are empty.
7743
- (0, import_lodash_es27.fromPairs)(
8261
+ (0, import_lodash_es30.fromPairs)(
7744
8262
  balanceIds.filter((bid) => !failedIds.has(bid)).map((balanceId) => [balanceId, void 0])
7745
8263
  ),
7746
- (0, import_lodash_es27.keyBy)(
8264
+ (0, import_lodash_es30.keyBy)(
7747
8265
  // storage balances must have status "cache", because they are used as start value when initialising subsequent subscriptions
7748
8266
  balancesResult.balances.map((b) => ({ ...b, status: "cache" })),
7749
8267
  (b) => getBalanceId(b)
@@ -7753,24 +8271,24 @@ var BalancesProvider = class {
7753
8271
  const balance = balances[errorBalanceId];
7754
8272
  if (balance) balance.status = "stale";
7755
8273
  }
7756
- this.#storage.next((0, import_lodash_es27.assign)({}, storage, { balances }));
8274
+ this.#storage.next((0, import_lodash_es30.assign)({}, storage, { balances }));
7757
8275
  }
7758
8276
  getNetworkMiniMetadatas$(networkId) {
7759
- return (0, import_util16.getSharedObservable)(`BalancesProvider.getNetworkMiniMetadatas$`, { networkId }, () => {
8277
+ return (0, import_util15.getSharedObservable)(`BalancesProvider.getNetworkMiniMetadatas$`, { networkId }, () => {
7760
8278
  return this.#chaindataProvider.getNetworkById$(networkId).pipe(
7761
- (0, import_rxjs15.switchMap)(
7762
- (network) => (0, import_chaindata_provider64.isNetworkDot)(network) ? this.getNetworkSpecVersion$(networkId).pipe(
7763
- (0, import_rxjs15.switchMap)(
7764
- (specVersion) => specVersion === null ? (0, import_rxjs15.of)([]) : this.getMiniMetadatas$(networkId, specVersion)
8279
+ (0, import_rxjs16.switchMap)(
8280
+ (network) => (0, import_chaindata_provider71.isNetworkDot)(network) ? this.getNetworkSpecVersion$(networkId).pipe(
8281
+ (0, import_rxjs16.switchMap)(
8282
+ (specVersion) => specVersion === null ? (0, import_rxjs16.of)([]) : this.getMiniMetadatas$(networkId, specVersion)
7765
8283
  )
7766
- ) : (0, import_rxjs15.of)([])
8284
+ ) : (0, import_rxjs16.of)([])
7767
8285
  ),
7768
- (0, import_rxjs15.distinctUntilChanged)(import_lodash_es27.isEqual)
8286
+ (0, import_rxjs16.distinctUntilChanged)(import_lodash_es30.isEqual)
7769
8287
  );
7770
8288
  });
7771
8289
  }
7772
8290
  getNetworkSpecVersion$(networkId) {
7773
- return (0, import_rxjs15.from)(
8291
+ return (0, import_rxjs16.from)(
7774
8292
  (0, import_viem9.withRetry)(() => getSpecVersion(this.#chainConnectors.substrate, networkId), {
7775
8293
  delay: 2e3,
7776
8294
  shouldRetry: (err) => {
@@ -7779,9 +8297,9 @@ var BalancesProvider = class {
7779
8297
  }
7780
8298
  })
7781
8299
  ).pipe(
7782
- (0, import_rxjs15.catchError)(() => {
8300
+ (0, import_rxjs16.catchError)(() => {
7783
8301
  log_default.warn("Failed to fetch spec version for network", networkId);
7784
- return (0, import_rxjs15.of)(null);
8302
+ return (0, import_rxjs16.of)(null);
7785
8303
  })
7786
8304
  );
7787
8305
  }
@@ -7793,15 +8311,15 @@ var BalancesProvider = class {
7793
8311
  source: mod.type
7794
8312
  })
7795
8313
  );
7796
- return (0, import_rxjs15.combineLatest)({
8314
+ return (0, import_rxjs16.combineLatest)({
7797
8315
  defaultMiniMetadatas: this.getDefaultMiniMetadatas$(miniMetadataIds),
7798
8316
  storedMiniMetadatas: this.getStoredMiniMetadatas$(miniMetadataIds)
7799
8317
  }).pipe(
7800
- (0, import_rxjs15.switchMap)(({ storedMiniMetadatas, defaultMiniMetadatas }) => {
7801
- if (defaultMiniMetadatas) return (0, import_rxjs15.of)(defaultMiniMetadatas);
7802
- if (storedMiniMetadatas) return (0, import_rxjs15.of)(storedMiniMetadatas);
7803
- if (!this.#chainConnectors.substrate) return (0, import_rxjs15.of)([]);
7804
- return (0, import_rxjs15.from)(
8318
+ (0, import_rxjs16.switchMap)(({ storedMiniMetadatas, defaultMiniMetadatas }) => {
8319
+ if (defaultMiniMetadatas) return (0, import_rxjs16.of)(defaultMiniMetadatas);
8320
+ if (storedMiniMetadatas) return (0, import_rxjs16.of)(storedMiniMetadatas);
8321
+ if (!this.#chainConnectors.substrate) return (0, import_rxjs16.of)([]);
8322
+ return (0, import_rxjs16.from)(
7805
8323
  (0, import_viem9.withRetry)(
7806
8324
  () => (
7807
8325
  // can fail if metadata cant be fetched
@@ -7821,65 +8339,65 @@ var BalancesProvider = class {
7821
8339
  }
7822
8340
  )
7823
8341
  ).pipe(
7824
- (0, import_rxjs15.catchError)(() => {
8342
+ (0, import_rxjs16.catchError)(() => {
7825
8343
  log_default.warn("Failed to fetch metadata for network", networkId);
7826
- return (0, import_rxjs15.of)([]);
8344
+ return (0, import_rxjs16.of)([]);
7827
8345
  }),
7828
8346
  // and persist in storage for later reuse
7829
- (0, import_rxjs15.tap)((newMiniMetadatas) => {
8347
+ (0, import_rxjs16.tap)((newMiniMetadatas) => {
7830
8348
  if (!newMiniMetadatas.length) return;
7831
8349
  const storage = this.#storage.getValue();
7832
- const miniMetadatas = (0, import_lodash_es27.assign)(
8350
+ const miniMetadatas = (0, import_lodash_es30.assign)(
7833
8351
  // keep minimetadatas of other networks
7834
- (0, import_lodash_es27.keyBy)(
7835
- (0, import_lodash_es27.values)(storage.miniMetadatas).filter((m) => m.chainId !== networkId),
8352
+ (0, import_lodash_es30.keyBy)(
8353
+ (0, import_lodash_es30.values)(storage.miniMetadatas).filter((m) => m.chainId !== networkId),
7836
8354
  (m) => m.id
7837
8355
  ),
7838
8356
  // add the ones for our network
7839
- (0, import_lodash_es27.keyBy)(newMiniMetadatas, (m) => m.id)
8357
+ (0, import_lodash_es30.keyBy)(newMiniMetadatas, (m) => m.id)
7840
8358
  );
7841
- this.#storage.next((0, import_lodash_es27.assign)({}, storage, { miniMetadatas }));
8359
+ this.#storage.next((0, import_lodash_es30.assign)({}, storage, { miniMetadatas }));
7842
8360
  })
7843
8361
  );
7844
8362
  }),
7845
8363
  // emit only when mini metadata changes, as a change here would restart all subscriptions for the network
7846
- (0, import_rxjs15.distinctUntilChanged)(import_lodash_es27.isEqual)
8364
+ (0, import_rxjs16.distinctUntilChanged)(import_lodash_es30.isEqual)
7847
8365
  );
7848
8366
  }
7849
8367
  getStoredMiniMetadatas$(miniMetadataIds) {
7850
8368
  return this.storedMiniMetadataMapById$.pipe(
7851
- (0, import_rxjs15.map)((mapById) => {
8369
+ (0, import_rxjs16.map)((mapById) => {
7852
8370
  const miniMetadatas = miniMetadataIds.map((id) => mapById[id]);
7853
- return miniMetadatas.length && miniMetadatas.every(import_util16.isTruthy) ? miniMetadatas : null;
8371
+ return miniMetadatas.length && miniMetadatas.every(import_util15.isTruthy) ? miniMetadatas : null;
7854
8372
  }),
7855
8373
  // source changes very often
7856
- (0, import_rxjs15.distinctUntilChanged)(import_lodash_es27.isEqual)
8374
+ (0, import_rxjs16.distinctUntilChanged)(import_lodash_es30.isEqual)
7857
8375
  );
7858
8376
  }
7859
8377
  getDefaultMiniMetadatas$(miniMetadataIds) {
7860
8378
  return this.#chaindataProvider.miniMetadatasMapById$.pipe(
7861
- (0, import_rxjs15.map)((mapById) => {
8379
+ (0, import_rxjs16.map)((mapById) => {
7862
8380
  const miniMetadatas = miniMetadataIds.map((id) => mapById[id]);
7863
- return miniMetadatas.length && miniMetadatas.every(import_util16.isTruthy) ? miniMetadatas : null;
8381
+ return miniMetadatas.length && miniMetadatas.every(import_util15.isTruthy) ? miniMetadatas : null;
7864
8382
  })
7865
8383
  );
7866
8384
  }
7867
8385
  getStoredBalances(addressesByToken) {
7868
- const balanceDefs = (0, import_lodash_es27.toPairs)(addressesByToken).flatMap(
8386
+ const balanceDefs = (0, import_lodash_es30.toPairs)(addressesByToken).flatMap(
7869
8387
  ([tokenId, addresses]) => addresses.map((address) => [tokenId, address])
7870
8388
  );
7871
- return balanceDefs.map(([tokenId, address]) => this.#storage.value.balances[getBalanceId({ address, tokenId })]).filter(import_util16.isNotNil).sort(sortByBalanceId);
8389
+ return balanceDefs.map(([tokenId, address]) => this.#storage.value.balances[getBalanceId({ address, tokenId })]).filter(import_util15.isNotNil).sort(sortByBalanceId);
7872
8390
  }
7873
8391
  cleanupAddressesByTokenId$(addressesByTokenId) {
7874
8392
  return this.#chaindataProvider.getNetworksMapById$().pipe(
7875
- (0, import_rxjs15.map)((networksById) => {
7876
- return (0, import_lodash_es27.fromPairs)(
7877
- (0, import_lodash_es27.toPairs)(addressesByTokenId).map(([tokenId, addresses]) => {
7878
- const networkId = (0, import_chaindata_provider64.parseTokenId)(tokenId).networkId;
8393
+ (0, import_rxjs16.map)((networksById) => {
8394
+ return (0, import_lodash_es30.fromPairs)(
8395
+ (0, import_lodash_es30.toPairs)(addressesByTokenId).map(([tokenId, addresses]) => {
8396
+ const networkId = (0, import_chaindata_provider71.parseTokenId)(tokenId).networkId;
7879
8397
  const network = networksById[networkId];
7880
8398
  return [
7881
8399
  tokenId,
7882
- (0, import_lodash_es27.uniq)(addresses.map(import_crypto8.normalizeAddress)).filter(
8400
+ (0, import_lodash_es30.uniq)(addresses.map(import_crypto8.normalizeAddress)).filter(
7883
8401
  (address) => network && isAddressCompatibleWithNetwork(network, address)
7884
8402
  )
7885
8403
  ];
@@ -7918,7 +8436,7 @@ var sortByBalanceId = (a, b) => getBalanceId(a).localeCompare(getBalanceId(b));
7918
8436
  var sortByMiniMetadataId = (a, b) => a.id.localeCompare(b.id);
7919
8437
 
7920
8438
  // src/version.ts
7921
- var import_chaindata_provider65 = require("@talismn/chaindata-provider");
8439
+ var import_chaindata_provider72 = require("@talismn/chaindata-provider");
7922
8440
  // Annotate the CommonJS export names for ESM import in node:
7923
8441
  0 && (module.exports = {
7924
8442
  ALPHA_PRICE_SCALE,
@@ -7942,6 +8460,8 @@ var import_chaindata_provider65 = require("@talismn/chaindata-provider");
7942
8460
  SolNativeTokenConfigSchema,
7943
8461
  SolSplBalanceModule,
7944
8462
  SolSplTokenConfigSchema,
8463
+ SolToken2022BalanceModule,
8464
+ SolToken2022TokenConfigSchema,
7945
8465
  SubAssetsBalanceModule,
7946
8466
  SubAssetsTokenConfigSchema,
7947
8467
  SubDTaoBalanceModule,