@spicenet-io/spiceflow-core 0.3.6 → 0.3.7

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.
@@ -1,6 +1,7 @@
1
1
  export type { Network, ChainMeta, ChainType } from "./types.js";
2
2
  export { CHAINS } from "./list.js";
3
3
  import type { Network, ChainMeta } from "./types.js";
4
+ import { type Chain } from "viem";
4
5
  export declare function getChainMeta(chainId: number): ChainMeta | undefined;
5
6
  export declare function getChainsByNetwork(network: Network): ChainMeta[];
6
7
  export declare function getChainIdsByNetwork(network: Network): number[];
@@ -9,6 +10,9 @@ export declare function getTestnetChains(): ChainMeta[];
9
10
  /** Returns ALL chains for a network including non-EVM (StarkNet). */
10
11
  export declare function getAllChainsByNetwork(network: Network): ChainMeta[];
11
12
  export declare function getDelegateContract(chainId: number): `0x${string}` | undefined;
13
+ export declare const VIEM_CHAINS: Record<number, Chain>;
14
+ export declare function getViemChain(chainId: number): Chain | undefined;
15
+ export declare function requireViemChain(chainId: number): Chain;
12
16
  export declare function isStarknetChain(chainId: number): boolean;
13
17
  /**
14
18
  * StarkNet Mainnet chain ID as a JS number.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGrD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEnE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,CAIhE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAE/D;AAED,wBAAgB,gBAAgB,IAAI,SAAS,EAAE,CAE9C;AAED,wBAAgB,gBAAgB,IAAI,SAAS,EAAE,CAE9C;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,CAEnE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,GAAG,SAAS,CAE9E;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/chains/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAe,KAAK,KAAK,EAAE,MAAM,MAAM,CAAC;AAE/C,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAEnE;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,CAIhE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAE/D;AAED,wBAAgB,gBAAgB,IAAI,SAAS,EAAE,CAE9C;AAED,wBAAgB,gBAAgB,IAAI,SAAS,EAAE,CAE9C;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,EAAE,CAEnE;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,MAAM,EAAE,GAAG,SAAS,CAE9E;AA8BD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAI7C,CAAC;AAEF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAKvD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAyB,CAAC"}
package/dist/index.cjs CHANGED
@@ -31,6 +31,7 @@ __export(index_exports, {
31
31
  STARKNET_MAINNET_CHAIN_ID: () => STARKNET_MAINNET_CHAIN_ID,
32
32
  SpiceFlowCore: () => SpiceFlowCore,
33
33
  TOKENS: () => TOKENS,
34
+ VIEM_CHAINS: () => VIEM_CHAINS,
34
35
  WCBTC_ABI: () => WCBTC_ABI,
35
36
  ZERO_ADDRESS: () => ZERO_ADDRESS,
36
37
  applySlippage: () => applySlippage,
@@ -54,8 +55,10 @@ __export(index_exports, {
54
55
  getRecentBlock: () => getRecentBlock,
55
56
  getTestnetChains: () => getTestnetChains,
56
57
  getTokenByAddress: () => getTokenByAddress,
58
+ getTokenBySymbol: () => getTokenBySymbol,
57
59
  getTokenDefinition: () => getTokenDefinition,
58
60
  getTokensForChain: () => getTokensForChain,
61
+ getViemChain: () => getViemChain,
59
62
  hashChainBatches: () => hashChainBatches,
60
63
  isBtcDenominated: () => isBtcDenominated,
61
64
  isNativeToken: () => isNativeToken,
@@ -64,6 +67,8 @@ __export(index_exports, {
64
67
  isUsdDenominated: () => isUsdDenominated,
65
68
  normalizeNativeTokenAddress: () => normalizeNativeTokenAddress,
66
69
  prepareRFQT: () => prepareRFQT,
70
+ requireTokenBySymbol: () => requireTokenBySymbol,
71
+ requireViemChain: () => requireViemChain,
67
72
  resolveTokenRef: () => resolveTokenRef,
68
73
  submitTransaction: () => submitTransaction,
69
74
  truncateAddress: () => truncateAddress,
@@ -669,6 +674,18 @@ function getTokenByAddress(address, chainId) {
669
674
  if (!entry) return void 0;
670
675
  return _resolve(entry.token, entry.deployment);
671
676
  }
677
+ function getTokenBySymbol(symbol, chainId) {
678
+ return getTokensForChain(chainId).find(
679
+ (token) => token.symbol.toUpperCase() === symbol.toUpperCase()
680
+ );
681
+ }
682
+ function requireTokenBySymbol(symbol, chainId) {
683
+ const token = getTokenBySymbol(symbol, chainId);
684
+ if (token) return token;
685
+ throw new Error(
686
+ `Token "${symbol}" not found on chain ${chainId} in the token registry.`
687
+ );
688
+ }
672
689
  function getTokenDefinition(address) {
673
690
  return _addressIndex.get(address.toLowerCase());
674
691
  }
@@ -701,10 +718,7 @@ function isBtcDenominated(address) {
701
718
  }
702
719
  function resolveTokenRef(ref) {
703
720
  const [symbol, chainId] = ref;
704
- const tokens = getTokensForChain(chainId);
705
- const match = tokens.find(
706
- (t) => t.symbol.toUpperCase() === symbol.toUpperCase()
707
- );
721
+ const match = getTokenBySymbol(symbol, chainId);
708
722
  if (!match) {
709
723
  throw new Error(
710
724
  `Token "${symbol}" not found on chain ${chainId} in the token registry.`
@@ -918,6 +932,7 @@ var CHAINS = {
918
932
  };
919
933
 
920
934
  // src/chains/index.ts
935
+ var import_viem2 = require("viem");
921
936
  function getChainMeta(chainId) {
922
937
  return CHAINS[chainId];
923
938
  }
@@ -941,6 +956,41 @@ function getAllChainsByNetwork(network) {
941
956
  function getDelegateContract(chainId) {
942
957
  return CHAINS[chainId]?.delegateContract;
943
958
  }
959
+ function toViemChain(meta) {
960
+ if (meta.chainType === "starknet") return void 0;
961
+ return (0, import_viem2.defineChain)({
962
+ id: meta.id,
963
+ name: meta.name,
964
+ nativeCurrency: meta.nativeCurrency,
965
+ rpcUrls: {
966
+ default: {
967
+ http: [meta.rpcUrl]
968
+ },
969
+ public: {
970
+ http: [meta.rpcUrl]
971
+ }
972
+ },
973
+ ...meta.blockExplorer ? {
974
+ blockExplorers: {
975
+ default: {
976
+ name: meta.displayName || meta.name,
977
+ url: meta.blockExplorer
978
+ }
979
+ }
980
+ } : {}
981
+ });
982
+ }
983
+ var VIEM_CHAINS = Object.fromEntries(
984
+ Object.values(CHAINS).map((meta) => [meta.id, toViemChain(meta)]).filter((entry) => entry[1] !== void 0)
985
+ );
986
+ function getViemChain(chainId) {
987
+ return VIEM_CHAINS[chainId];
988
+ }
989
+ function requireViemChain(chainId) {
990
+ const chain = getViemChain(chainId);
991
+ if (chain) return chain;
992
+ throw new Error(`Viem chain not found for chain ${chainId}.`);
993
+ }
944
994
  function isStarknetChain(chainId) {
945
995
  return getChainMeta(chainId)?.chainType === "starknet";
946
996
  }
@@ -1361,7 +1411,7 @@ var uniV3SwapRouterAbi = [
1361
1411
  ];
1362
1412
 
1363
1413
  // src/swap.ts
1364
- var import_viem2 = require("viem");
1414
+ var import_viem3 = require("viem");
1365
1415
  function applySlippage(amount, slippage = 0.03) {
1366
1416
  const slippageBps = BigInt(Math.floor((1 - slippage) * 1e4));
1367
1417
  return amount * slippageBps / 10000n;
@@ -1380,8 +1430,8 @@ function buildUniV3SwapCalls(params) {
1380
1430
  {
1381
1431
  to: tokenIn,
1382
1432
  value: 0n,
1383
- data: (0, import_viem2.encodeFunctionData)({
1384
- abi: import_viem2.erc20Abi,
1433
+ data: (0, import_viem3.encodeFunctionData)({
1434
+ abi: import_viem3.erc20Abi,
1385
1435
  functionName: "approve",
1386
1436
  args: [config.swapRouter, amountIn]
1387
1437
  })
@@ -1389,7 +1439,7 @@ function buildUniV3SwapCalls(params) {
1389
1439
  {
1390
1440
  to: config.swapRouter,
1391
1441
  value: 0n,
1392
- data: (0, import_viem2.encodeFunctionData)({
1442
+ data: (0, import_viem3.encodeFunctionData)({
1393
1443
  abi: uniV3SwapRouterAbi,
1394
1444
  functionName: "exactInputSingle",
1395
1445
  args: [
@@ -1421,6 +1471,7 @@ function buildUniV3SwapCalls(params) {
1421
1471
  STARKNET_MAINNET_CHAIN_ID,
1422
1472
  SpiceFlowCore,
1423
1473
  TOKENS,
1474
+ VIEM_CHAINS,
1424
1475
  WCBTC_ABI,
1425
1476
  ZERO_ADDRESS,
1426
1477
  applySlippage,
@@ -1444,8 +1495,10 @@ function buildUniV3SwapCalls(params) {
1444
1495
  getRecentBlock,
1445
1496
  getTestnetChains,
1446
1497
  getTokenByAddress,
1498
+ getTokenBySymbol,
1447
1499
  getTokenDefinition,
1448
1500
  getTokensForChain,
1501
+ getViemChain,
1449
1502
  hashChainBatches,
1450
1503
  isBtcDenominated,
1451
1504
  isNativeToken,
@@ -1454,6 +1507,8 @@ function buildUniV3SwapCalls(params) {
1454
1507
  isUsdDenominated,
1455
1508
  normalizeNativeTokenAddress,
1456
1509
  prepareRFQT,
1510
+ requireTokenBySymbol,
1511
+ requireViemChain,
1457
1512
  resolveTokenRef,
1458
1513
  submitTransaction,
1459
1514
  truncateAddress,
package/dist/index.js CHANGED
@@ -594,6 +594,18 @@ function getTokenByAddress(address, chainId) {
594
594
  if (!entry) return void 0;
595
595
  return _resolve(entry.token, entry.deployment);
596
596
  }
597
+ function getTokenBySymbol(symbol, chainId) {
598
+ return getTokensForChain(chainId).find(
599
+ (token) => token.symbol.toUpperCase() === symbol.toUpperCase()
600
+ );
601
+ }
602
+ function requireTokenBySymbol(symbol, chainId) {
603
+ const token = getTokenBySymbol(symbol, chainId);
604
+ if (token) return token;
605
+ throw new Error(
606
+ `Token "${symbol}" not found on chain ${chainId} in the token registry.`
607
+ );
608
+ }
597
609
  function getTokenDefinition(address) {
598
610
  return _addressIndex.get(address.toLowerCase());
599
611
  }
@@ -626,10 +638,7 @@ function isBtcDenominated(address) {
626
638
  }
627
639
  function resolveTokenRef(ref) {
628
640
  const [symbol, chainId] = ref;
629
- const tokens = getTokensForChain(chainId);
630
- const match = tokens.find(
631
- (t) => t.symbol.toUpperCase() === symbol.toUpperCase()
632
- );
641
+ const match = getTokenBySymbol(symbol, chainId);
633
642
  if (!match) {
634
643
  throw new Error(
635
644
  `Token "${symbol}" not found on chain ${chainId} in the token registry.`
@@ -843,6 +852,7 @@ var CHAINS = {
843
852
  };
844
853
 
845
854
  // src/chains/index.ts
855
+ import { defineChain } from "viem";
846
856
  function getChainMeta(chainId) {
847
857
  return CHAINS[chainId];
848
858
  }
@@ -866,6 +876,41 @@ function getAllChainsByNetwork(network) {
866
876
  function getDelegateContract(chainId) {
867
877
  return CHAINS[chainId]?.delegateContract;
868
878
  }
879
+ function toViemChain(meta) {
880
+ if (meta.chainType === "starknet") return void 0;
881
+ return defineChain({
882
+ id: meta.id,
883
+ name: meta.name,
884
+ nativeCurrency: meta.nativeCurrency,
885
+ rpcUrls: {
886
+ default: {
887
+ http: [meta.rpcUrl]
888
+ },
889
+ public: {
890
+ http: [meta.rpcUrl]
891
+ }
892
+ },
893
+ ...meta.blockExplorer ? {
894
+ blockExplorers: {
895
+ default: {
896
+ name: meta.displayName || meta.name,
897
+ url: meta.blockExplorer
898
+ }
899
+ }
900
+ } : {}
901
+ });
902
+ }
903
+ var VIEM_CHAINS = Object.fromEntries(
904
+ Object.values(CHAINS).map((meta) => [meta.id, toViemChain(meta)]).filter((entry) => entry[1] !== void 0)
905
+ );
906
+ function getViemChain(chainId) {
907
+ return VIEM_CHAINS[chainId];
908
+ }
909
+ function requireViemChain(chainId) {
910
+ const chain = getViemChain(chainId);
911
+ if (chain) return chain;
912
+ throw new Error(`Viem chain not found for chain ${chainId}.`);
913
+ }
869
914
  function isStarknetChain(chainId) {
870
915
  return getChainMeta(chainId)?.chainType === "starknet";
871
916
  }
@@ -1345,6 +1390,7 @@ export {
1345
1390
  STARKNET_MAINNET_CHAIN_ID,
1346
1391
  SpiceFlowCore,
1347
1392
  TOKENS,
1393
+ VIEM_CHAINS,
1348
1394
  WCBTC_ABI,
1349
1395
  ZERO_ADDRESS,
1350
1396
  applySlippage,
@@ -1368,8 +1414,10 @@ export {
1368
1414
  getRecentBlock,
1369
1415
  getTestnetChains,
1370
1416
  getTokenByAddress,
1417
+ getTokenBySymbol,
1371
1418
  getTokenDefinition,
1372
1419
  getTokensForChain,
1420
+ getViemChain,
1373
1421
  hashChainBatches,
1374
1422
  isBtcDenominated,
1375
1423
  isNativeToken,
@@ -1378,6 +1426,8 @@ export {
1378
1426
  isUsdDenominated,
1379
1427
  normalizeNativeTokenAddress,
1380
1428
  prepareRFQT,
1429
+ requireTokenBySymbol,
1430
+ requireViemChain,
1381
1431
  resolveTokenRef,
1382
1432
  submitTransaction,
1383
1433
  truncateAddress,
@@ -4,6 +4,8 @@ import type { TokenDefinition, TokenDeployment, Token } from "./types.js";
4
4
  import type { ChainToken, TokenRef } from "../types.js";
5
5
  export declare function getTokensForChain(chainId: number): Token[];
6
6
  export declare function getTokenByAddress(address: string, chainId: number): Token | undefined;
7
+ export declare function getTokenBySymbol(symbol: string, chainId: number): Token | undefined;
8
+ export declare function requireTokenBySymbol(symbol: string, chainId: number): Token;
7
9
  export declare function getTokenDefinition(address: string): TokenDefinition | undefined;
8
10
  export declare function getDeployment(address: string, chainId: number): TokenDeployment | undefined;
9
11
  export declare function getEquivalentAddresses(tokenAddress: string): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA8DxD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,CAI1D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAIrF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE/E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE3F;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAIrE;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAK3D;AAKD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,UAAU,CAmBzD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tokens/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxF,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AA8DxD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,CAI1D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAIrF;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAInF;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAO3E;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE/E;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE3F;AAED,wBAAgB,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,CAIrE;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE5E;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAK3D;AAKD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,UAAU,CAgBzD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spicenet-io/spiceflow-core",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",