@nradko/metric-omm-sdk-v1 0.3.0 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +98 -111
  2. package/dist/abis/MetricOmmPool.d.ts +14 -0
  3. package/dist/abis/MetricOmmPool.d.ts.map +1 -1
  4. package/dist/abis/MetricOmmPool.js +18 -0
  5. package/dist/abis/MetricOmmPool.js.map +1 -1
  6. package/dist/abis/MetricOmmPoolDataProvider.d.ts +0 -136
  7. package/dist/abis/MetricOmmPoolDataProvider.d.ts.map +1 -1
  8. package/dist/abis/MetricOmmPoolDataProvider.js +0 -177
  9. package/dist/abis/MetricOmmPoolDataProvider.js.map +1 -1
  10. package/dist/abis/MetricOmmPoolStateView.d.ts +238 -0
  11. package/dist/abis/MetricOmmPoolStateView.d.ts.map +1 -0
  12. package/dist/abis/MetricOmmPoolStateView.js +315 -0
  13. package/dist/abis/MetricOmmPoolStateView.js.map +1 -0
  14. package/dist/abis/MetricOmmSimpleRouter.d.ts +619 -0
  15. package/dist/abis/{MetricOmmPoolSwapper.d.ts.map → MetricOmmSimpleRouter.d.ts.map} +1 -1
  16. package/dist/abis/MetricOmmSimpleRouter.js +805 -0
  17. package/dist/abis/MetricOmmSimpleRouter.js.map +1 -0
  18. package/dist/abis/MetricOmmSwapQuoter.d.ts +576 -0
  19. package/dist/abis/{PriceProviderUi.d.ts.map → MetricOmmSwapQuoter.d.ts.map} +1 -1
  20. package/dist/abis/MetricOmmSwapQuoter.js +748 -0
  21. package/dist/abis/MetricOmmSwapQuoter.js.map +1 -0
  22. package/dist/abis/OracleProvider.d.ts +106 -0
  23. package/dist/abis/OracleProvider.d.ts.map +1 -0
  24. package/dist/abis/OracleProvider.js +62 -0
  25. package/dist/abis/OracleProvider.js.map +1 -0
  26. package/dist/abis/PriceProvider.d.ts +8 -2
  27. package/dist/abis/PriceProvider.d.ts.map +1 -1
  28. package/dist/abis/PriceProvider.js +9 -1
  29. package/dist/abis/PriceProvider.js.map +1 -1
  30. package/dist/abis/index.d.ts +4 -2
  31. package/dist/abis/index.d.ts.map +1 -1
  32. package/dist/abis/index.js +4 -2
  33. package/dist/abis/index.js.map +1 -1
  34. package/dist/addresses.d.ts +3 -3
  35. package/dist/addresses.d.ts.map +1 -1
  36. package/dist/addresses.js +10 -10
  37. package/dist/addresses.js.map +1 -1
  38. package/dist/constants.d.ts +4 -1
  39. package/dist/constants.d.ts.map +1 -1
  40. package/dist/constants.js +7 -2
  41. package/dist/constants.js.map +1 -1
  42. package/dist/index.d.ts +5 -3
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +8 -4
  45. package/dist/index.js.map +1 -1
  46. package/dist/oracle/index.d.ts +5 -0
  47. package/dist/oracle/index.d.ts.map +1 -0
  48. package/dist/oracle/index.js +5 -0
  49. package/dist/oracle/index.js.map +1 -0
  50. package/dist/oracle/registry.d.ts +53 -0
  51. package/dist/oracle/registry.d.ts.map +1 -0
  52. package/dist/oracle/registry.js +70 -0
  53. package/dist/oracle/registry.js.map +1 -0
  54. package/dist/quoter/index.d.ts +6 -0
  55. package/dist/quoter/index.d.ts.map +1 -0
  56. package/dist/quoter/index.js +6 -0
  57. package/dist/quoter/index.js.map +1 -0
  58. package/dist/quoter/quote.d.ts +58 -0
  59. package/dist/quoter/quote.d.ts.map +1 -0
  60. package/dist/quoter/quote.js +74 -0
  61. package/dist/quoter/quote.js.map +1 -0
  62. package/dist/quoter/quotePath.d.ts +65 -0
  63. package/dist/quoter/quotePath.d.ts.map +1 -0
  64. package/dist/quoter/quotePath.js +108 -0
  65. package/dist/quoter/quotePath.js.map +1 -0
  66. package/dist/router/index.d.ts +2 -1
  67. package/dist/router/index.d.ts.map +1 -1
  68. package/dist/router/index.js +2 -1
  69. package/dist/router/index.js.map +1 -1
  70. package/dist/router/swap.d.ts +37 -92
  71. package/dist/router/swap.d.ts.map +1 -1
  72. package/dist/router/swap.js +96 -298
  73. package/dist/router/swap.js.map +1 -1
  74. package/dist/router/swapPath.d.ts +56 -0
  75. package/dist/router/swapPath.d.ts.map +1 -0
  76. package/dist/router/swapPath.js +98 -0
  77. package/dist/router/swapPath.js.map +1 -0
  78. package/dist/swap/path.d.ts +13 -0
  79. package/dist/swap/path.d.ts.map +1 -0
  80. package/dist/swap/path.js +74 -0
  81. package/dist/swap/path.js.map +1 -0
  82. package/package.json +4 -5
  83. package/src/abis/MetricOmmPool.ts +18 -0
  84. package/src/abis/MetricOmmPoolDataProvider.ts +0 -177
  85. package/src/abis/MetricOmmPoolStateView.ts +314 -0
  86. package/src/abis/MetricOmmSimpleRouter.ts +804 -0
  87. package/src/abis/MetricOmmSwapQuoter.ts +747 -0
  88. package/src/abis/OracleProvider.ts +61 -0
  89. package/src/abis/PriceProvider.ts +9 -1
  90. package/src/abis/index.ts +4 -2
  91. package/src/addresses.ts +13 -13
  92. package/src/constants.ts +7 -2
  93. package/src/index.ts +62 -23
  94. package/src/oracle/index.ts +14 -0
  95. package/src/oracle/registry.ts +146 -0
  96. package/src/quoter/index.ts +28 -0
  97. package/src/quoter/quote.ts +193 -0
  98. package/src/quoter/quotePath.ts +240 -0
  99. package/src/router/index.ts +24 -25
  100. package/src/router/swap.ts +142 -480
  101. package/src/router/swapPath.ts +181 -0
  102. package/src/swap/path.ts +107 -0
  103. package/dist/abis/MetricOmmPoolSwapper.d.ts +0 -917
  104. package/dist/abis/MetricOmmPoolSwapper.js +0 -1185
  105. package/dist/abis/MetricOmmPoolSwapper.js.map +0 -1
  106. package/dist/abis/PriceProviderUi.d.ts +0 -433
  107. package/dist/abis/PriceProviderUi.js +0 -318
  108. package/dist/abis/PriceProviderUi.js.map +0 -1
  109. package/src/abis/MetricOmmPoolSwapper.ts +0 -1184
  110. package/src/abis/PriceProviderUi.ts +0 -317
@@ -0,0 +1,53 @@
1
+ /**
2
+ * MetricAMM SDK - Providers oracle: pool registration + blacklist.
3
+ *
4
+ * The abuse-protected providers oracle (smart-contracts-poc OracleBase: Pyth/Chainlink) only serves
5
+ * attributed price reads for pools that are registered for a feed and not blacklisted. These helpers
6
+ * read that status and perform the permissionless paid registration.
7
+ */
8
+ import type { Address, Hex, PublicClient, TransactionReceipt, WalletClient } from "viem";
9
+ /** Combined registration/blacklist status of a pool for a feed on a given oracle. */
10
+ export interface PoolOracleStatus {
11
+ /** Whether `pool` is registered for `feedId` (required for the attributed price read). */
12
+ registered: boolean;
13
+ /** Whether `pool` is blacklisted (reads are rejected regardless of registration). */
14
+ blacklisted: boolean;
15
+ /** Current registration fee (wei) required by `register`. */
16
+ registrationFee: bigint;
17
+ }
18
+ export interface RegisterPoolParams {
19
+ publicClient: PublicClient;
20
+ walletClient: WalletClient;
21
+ /** Address of the providers oracle (the price provider's `offchainOracle`). */
22
+ oracleAddress: Address;
23
+ feedId: Hex;
24
+ /** Pool to register; must be recognized by `factory.isPool(pool)`. */
25
+ pool: Address;
26
+ /** An oracle-approved pool factory that recognizes `pool`. */
27
+ factory: Address;
28
+ /** Sender account. */
29
+ account: Address;
30
+ /** Fee to pay (wei). Defaults to the oracle's current `registrationFee()`. Overpayment is not refunded. */
31
+ value?: bigint;
32
+ /** Wait for the tx receipt (default true). */
33
+ awaitReceipt?: boolean;
34
+ }
35
+ export interface RegisterPoolResult {
36
+ hash: Hex;
37
+ receipt?: TransactionReceipt;
38
+ }
39
+ /** Read the oracle's current registration fee (wei). */
40
+ export declare function getRegistrationFee(publicClient: PublicClient, oracleAddress: Address): Promise<bigint>;
41
+ /** Whether `account` (typically a pool) is blacklisted on the oracle. */
42
+ export declare function isPoolBlacklisted(publicClient: PublicClient, oracleAddress: Address, account: Address): Promise<boolean>;
43
+ /** Whether `pool` is registered for `feedId` on the oracle. */
44
+ export declare function isPoolRegistered(publicClient: PublicClient, oracleAddress: Address, feedId: Hex, pool: Address): Promise<boolean>;
45
+ /** Read registration + blacklist status and the current fee in a single multicall. */
46
+ export declare function getPoolOracleStatus(publicClient: PublicClient, oracleAddress: Address, feedId: Hex, pool: Address): Promise<PoolOracleStatus>;
47
+ /**
48
+ * Permissionless paid registration: whitelist `pool` for `feedId` on the oracle (and clear any
49
+ * blacklist on the pool). Pays `value` (defaults to the current `registrationFee`); the `factory`
50
+ * must be oracle-approved and recognize `pool` via `isPool`.
51
+ */
52
+ export declare function registerPool(params: RegisterPoolParams): Promise<RegisterPoolResult>;
53
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/oracle/registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAGzF,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,0FAA0F;IAC1F,UAAU,EAAE,OAAO,CAAC;IACpB,qFAAqF;IACrF,WAAW,EAAE,OAAO,CAAC;IACrB,6DAA6D;IAC7D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,YAAY,CAAC;IAC3B,YAAY,EAAE,YAAY,CAAC;IAC3B,+EAA+E;IAC/E,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,GAAG,CAAC;IACZ,sEAAsE;IACtE,IAAI,EAAE,OAAO,CAAC;IACd,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB,sBAAsB;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,2GAA2G;IAC3G,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,wDAAwD;AACxD,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,MAAM,CAAC,CAMjB;AAED,yEAAyE;AACzE,wBAAsB,iBAAiB,CACrC,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,OAAO,EACtB,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED,+DAA+D;AAC/D,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,OAAO,EACtB,MAAM,EAAE,GAAG,EACX,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,OAAO,CAAC,CAOlB;AAED,sFAAsF;AACtF,wBAAsB,mBAAmB,CACvC,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,OAAO,EACtB,MAAM,EAAE,GAAG,EACX,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,gBAAgB,CAAC,CAqB3B;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2B1F"}
@@ -0,0 +1,70 @@
1
+ import { ORACLE_PROVIDER_ABI } from "../constants.js";
2
+ /** Read the oracle's current registration fee (wei). */
3
+ export async function getRegistrationFee(publicClient, oracleAddress) {
4
+ return (await publicClient.readContract({
5
+ address: oracleAddress,
6
+ abi: ORACLE_PROVIDER_ABI,
7
+ functionName: "registrationFee",
8
+ }));
9
+ }
10
+ /** Whether `account` (typically a pool) is blacklisted on the oracle. */
11
+ export async function isPoolBlacklisted(publicClient, oracleAddress, account) {
12
+ return (await publicClient.readContract({
13
+ address: oracleAddress,
14
+ abi: ORACLE_PROVIDER_ABI,
15
+ functionName: "blacklisted",
16
+ args: [account],
17
+ }));
18
+ }
19
+ /** Whether `pool` is registered for `feedId` on the oracle. */
20
+ export async function isPoolRegistered(publicClient, oracleAddress, feedId, pool) {
21
+ return (await publicClient.readContract({
22
+ address: oracleAddress,
23
+ abi: ORACLE_PROVIDER_ABI,
24
+ functionName: "registeredPool",
25
+ args: [feedId, pool],
26
+ }));
27
+ }
28
+ /** Read registration + blacklist status and the current fee in a single multicall. */
29
+ export async function getPoolOracleStatus(publicClient, oracleAddress, feedId, pool) {
30
+ const [registered, blacklisted, registrationFee] = (await publicClient.multicall({
31
+ allowFailure: false,
32
+ contracts: [
33
+ {
34
+ address: oracleAddress,
35
+ abi: ORACLE_PROVIDER_ABI,
36
+ functionName: "registeredPool",
37
+ args: [feedId, pool],
38
+ },
39
+ {
40
+ address: oracleAddress,
41
+ abi: ORACLE_PROVIDER_ABI,
42
+ functionName: "blacklisted",
43
+ args: [pool],
44
+ },
45
+ { address: oracleAddress, abi: ORACLE_PROVIDER_ABI, functionName: "registrationFee" },
46
+ ],
47
+ }));
48
+ return { registered, blacklisted, registrationFee };
49
+ }
50
+ /**
51
+ * Permissionless paid registration: whitelist `pool` for `feedId` on the oracle (and clear any
52
+ * blacklist on the pool). Pays `value` (defaults to the current `registrationFee`); the `factory`
53
+ * must be oracle-approved and recognize `pool` via `isPool`.
54
+ */
55
+ export async function registerPool(params) {
56
+ const { publicClient, walletClient, oracleAddress, feedId, pool, factory, account, awaitReceipt = true, } = params;
57
+ const value = params.value ?? (await getRegistrationFee(publicClient, oracleAddress));
58
+ const { request } = await publicClient.simulateContract({
59
+ address: oracleAddress,
60
+ abi: ORACLE_PROVIDER_ABI,
61
+ functionName: "register",
62
+ args: [feedId, pool, factory],
63
+ value,
64
+ account,
65
+ });
66
+ const hash = await walletClient.writeContract(request);
67
+ const receipt = awaitReceipt ? await publicClient.waitForTransactionReceipt({ hash }) : undefined;
68
+ return { hash, receipt };
69
+ }
70
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/oracle/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * MetricAMM SDK - SwapQuoter functions.
3
+ */
4
+ export { quoteLiveExactIn, quoteLiveExactOut, quoteHypotheticalExactInput, quoteHypotheticalExactOutput, resolveQuoterAddress, defaultPriceLimitX64, type QuoteSwapResult, type QuoteLiveExactInParams, type QuoteLiveExactOutParams, type QuoteHypotheticalExactInputParams, type QuoteHypotheticalExactOutputParams, } from "./quotePath.js";
5
+ export { quoteLiveExactInSingle, quoteLiveExactOutSingle, quoteHypotheticalExactInputSingle, quoteHypotheticalExactOutputSingle, type QuoteLiveExactInSingleParams, type QuoteLiveExactOutSingleParams, type QuoteHypotheticalExactInputSingleParams, type QuoteHypotheticalExactOutputSingleParams, } from "./quote.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/quoter/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,2BAA2B,EAC3B,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,EACpB,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,iCAAiC,EACtC,KAAK,kCAAkC,GACxC,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,iCAAiC,EACjC,kCAAkC,EAClC,KAAK,4BAA4B,EACjC,KAAK,6BAA6B,EAClC,KAAK,uCAAuC,EAC5C,KAAK,wCAAwC,GAC9C,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * MetricAMM SDK - SwapQuoter functions.
3
+ */
4
+ export { quoteLiveExactIn, quoteLiveExactOut, quoteHypotheticalExactInput, quoteHypotheticalExactOutput, resolveQuoterAddress, defaultPriceLimitX64, } from "./quotePath.js";
5
+ export { quoteLiveExactInSingle, quoteLiveExactOutSingle, quoteHypotheticalExactInputSingle, quoteHypotheticalExactOutputSingle, } from "./quote.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/quoter/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,2BAA2B,EAC3B,4BAA4B,EAC5B,oBAAoB,EACpB,oBAAoB,GAMrB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,iCAAiC,EACjC,kCAAkC,GAKnC,MAAM,YAAY,CAAC"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * MetricAMM SDK - MetricOmmSwapQuoter single-hop quotes.
3
+ */
4
+ import type { Address, PublicClient, Hex } from "viem";
5
+ import { type QuoteSwapResult } from "./quotePath.js";
6
+ export interface QuoteLiveExactInSingleParams {
7
+ publicClient: PublicClient;
8
+ pool: Address;
9
+ tokenIn: Address;
10
+ tokenOut: Address;
11
+ recipient: Address;
12
+ amountIn: bigint;
13
+ priceLimitX64?: bigint;
14
+ extensionData?: Hex;
15
+ quoterAddress?: Address;
16
+ }
17
+ export interface QuoteLiveExactOutSingleParams {
18
+ publicClient: PublicClient;
19
+ pool: Address;
20
+ tokenIn: Address;
21
+ tokenOut: Address;
22
+ recipient: Address;
23
+ amountOut: bigint;
24
+ priceLimitX64?: bigint;
25
+ extensionData?: Hex;
26
+ quoterAddress?: Address;
27
+ }
28
+ export interface QuoteHypotheticalExactInputSingleParams {
29
+ publicClient: PublicClient;
30
+ pool: Address;
31
+ tokenIn: Address;
32
+ tokenOut: Address;
33
+ recipient: Address;
34
+ amountIn: bigint;
35
+ bidPriceX64: bigint;
36
+ askPriceX64: bigint;
37
+ priceLimitX64?: bigint;
38
+ extensionData?: Hex;
39
+ quoterAddress?: Address;
40
+ }
41
+ export interface QuoteHypotheticalExactOutputSingleParams {
42
+ publicClient: PublicClient;
43
+ pool: Address;
44
+ tokenIn: Address;
45
+ tokenOut: Address;
46
+ recipient: Address;
47
+ amountOut: bigint;
48
+ bidPriceX64: bigint;
49
+ askPriceX64: bigint;
50
+ priceLimitX64?: bigint;
51
+ extensionData?: Hex;
52
+ quoterAddress?: Address;
53
+ }
54
+ export declare function quoteLiveExactInSingle(params: QuoteLiveExactInSingleParams): Promise<QuoteSwapResult>;
55
+ export declare function quoteLiveExactOutSingle(params: QuoteLiveExactOutSingleParams): Promise<QuoteSwapResult>;
56
+ export declare function quoteHypotheticalExactInputSingle(params: QuoteHypotheticalExactInputSingleParams): Promise<QuoteSwapResult>;
57
+ export declare function quoteHypotheticalExactOutputSingle(params: QuoteHypotheticalExactOutputSingleParams): Promise<QuoteSwapResult>;
58
+ //# sourceMappingURL=quote.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote.d.ts","sourceRoot":"","sources":["../../src/quoter/quote.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEvD,OAAO,EAKL,KAAK,eAAe,EACrB,MAAM,gBAAgB,CAAC;AAExB,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,6BAA6B;IAC5C,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,uCAAuC;IACtD,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,wCAAwC;IACvD,YAAY,EAAE,YAAY,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,GAAG,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,4BAA4B,GACnC,OAAO,CAAC,eAAe,CAAC,CA2B1B;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,6BAA6B,GACpC,OAAO,CAAC,eAAe,CAAC,CA2B1B;AAED,wBAAsB,iCAAiC,CACrD,MAAM,EAAE,uCAAuC,GAC9C,OAAO,CAAC,eAAe,CAAC,CA6B1B;AAED,wBAAsB,kCAAkC,CACtD,MAAM,EAAE,wCAAwC,GAC/C,OAAO,CAAC,eAAe,CAAC,CA6B1B"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * MetricAMM SDK - MetricOmmSwapQuoter single-hop quotes.
3
+ */
4
+ import { resolveZeroForOne } from "../swap/path.js";
5
+ import { defaultPriceLimitX64, resolveQuoterAddress, simulateQuote, withQuoteExtensionData, } from "./quotePath.js";
6
+ export async function quoteLiveExactInSingle(params) {
7
+ const zeroForOne = await resolveZeroForOne(params.publicClient, params.pool, params.tokenIn, params.tokenOut);
8
+ const priceLimitX64 = params.priceLimitX64 ?? defaultPriceLimitX64(zeroForOne);
9
+ const quoterAddress = await resolveQuoterAddress({
10
+ publicClient: params.publicClient,
11
+ quoterAddress: params.quoterAddress,
12
+ });
13
+ return simulateQuote(params.publicClient, quoterAddress, params.recipient, "quoteLiveExactInSingle", [
14
+ params.pool,
15
+ params.recipient,
16
+ zeroForOne,
17
+ params.amountIn,
18
+ priceLimitX64,
19
+ withQuoteExtensionData(params.extensionData),
20
+ ]);
21
+ }
22
+ export async function quoteLiveExactOutSingle(params) {
23
+ const zeroForOne = await resolveZeroForOne(params.publicClient, params.pool, params.tokenIn, params.tokenOut);
24
+ const priceLimitX64 = params.priceLimitX64 ?? defaultPriceLimitX64(zeroForOne);
25
+ const quoterAddress = await resolveQuoterAddress({
26
+ publicClient: params.publicClient,
27
+ quoterAddress: params.quoterAddress,
28
+ });
29
+ return simulateQuote(params.publicClient, quoterAddress, params.recipient, "quoteLiveExactOutSingle", [
30
+ params.pool,
31
+ params.recipient,
32
+ zeroForOne,
33
+ params.amountOut,
34
+ priceLimitX64,
35
+ withQuoteExtensionData(params.extensionData),
36
+ ]);
37
+ }
38
+ export async function quoteHypotheticalExactInputSingle(params) {
39
+ const zeroForOne = await resolveZeroForOne(params.publicClient, params.pool, params.tokenIn, params.tokenOut);
40
+ const priceLimitX64 = params.priceLimitX64 ?? defaultPriceLimitX64(zeroForOne);
41
+ const quoterAddress = await resolveQuoterAddress({
42
+ publicClient: params.publicClient,
43
+ quoterAddress: params.quoterAddress,
44
+ });
45
+ return simulateQuote(params.publicClient, quoterAddress, params.recipient, "quoteHypotheticalExactInputSingle", [
46
+ params.pool,
47
+ params.recipient,
48
+ zeroForOne,
49
+ params.amountIn,
50
+ priceLimitX64,
51
+ params.bidPriceX64,
52
+ params.askPriceX64,
53
+ withQuoteExtensionData(params.extensionData),
54
+ ]);
55
+ }
56
+ export async function quoteHypotheticalExactOutputSingle(params) {
57
+ const zeroForOne = await resolveZeroForOne(params.publicClient, params.pool, params.tokenIn, params.tokenOut);
58
+ const priceLimitX64 = params.priceLimitX64 ?? defaultPriceLimitX64(zeroForOne);
59
+ const quoterAddress = await resolveQuoterAddress({
60
+ publicClient: params.publicClient,
61
+ quoterAddress: params.quoterAddress,
62
+ });
63
+ return simulateQuote(params.publicClient, quoterAddress, params.recipient, "quoteHypotheticalExactOutputSingle", [
64
+ params.pool,
65
+ params.recipient,
66
+ zeroForOne,
67
+ params.amountOut,
68
+ priceLimitX64,
69
+ params.bidPriceX64,
70
+ params.askPriceX64,
71
+ withQuoteExtensionData(params.extensionData),
72
+ ]);
73
+ }
74
+ //# sourceMappingURL=quote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quote.js","sourceRoot":"","sources":["../../src/quoter/quote.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * MetricAMM SDK - MetricOmmSwapQuoter multihop quotes and shared helpers.
3
+ */
4
+ import type { Address, PublicClient, Hex } from "viem";
5
+ export type QuoteSwapResult = {
6
+ amountIn: bigint;
7
+ amountOut: bigint;
8
+ };
9
+ export interface QuoteLiveExactInParams {
10
+ publicClient: PublicClient;
11
+ tokenIn: Address;
12
+ tokenOut: Address;
13
+ pools: readonly Address[];
14
+ extensionDatas?: readonly Hex[];
15
+ recipient: Address;
16
+ amountIn: bigint;
17
+ quoterAddress?: Address;
18
+ }
19
+ export interface QuoteLiveExactOutParams {
20
+ publicClient: PublicClient;
21
+ tokenIn: Address;
22
+ tokenOut: Address;
23
+ pools: readonly Address[];
24
+ extensionDatas?: readonly Hex[];
25
+ recipient: Address;
26
+ amountOut: bigint;
27
+ quoterAddress?: Address;
28
+ }
29
+ export interface QuoteHypotheticalExactInputParams {
30
+ publicClient: PublicClient;
31
+ tokenIn: Address;
32
+ tokenOut: Address;
33
+ pools: readonly Address[];
34
+ extensionDatas?: readonly Hex[];
35
+ bidPricesX64: readonly bigint[];
36
+ askPricesX64: readonly bigint[];
37
+ recipient: Address;
38
+ amountIn: bigint;
39
+ quoterAddress?: Address;
40
+ }
41
+ export interface QuoteHypotheticalExactOutputParams {
42
+ publicClient: PublicClient;
43
+ tokenIn: Address;
44
+ tokenOut: Address;
45
+ pools: readonly Address[];
46
+ extensionDatas?: readonly Hex[];
47
+ bidPricesX64: readonly bigint[];
48
+ askPricesX64: readonly bigint[];
49
+ recipient: Address;
50
+ amountOut: bigint;
51
+ quoterAddress?: Address;
52
+ }
53
+ export declare function resolveQuoterAddress(params: {
54
+ publicClient?: PublicClient;
55
+ quoterAddress?: Address;
56
+ }): Promise<Address>;
57
+ export declare function defaultPriceLimitX64(zeroForOne: boolean): bigint;
58
+ export declare function withQuoteExtensionData(extensionData?: Hex): Hex;
59
+ export declare function validateHypotheticalPrices(pools: readonly Address[], bidPricesX64: readonly bigint[], askPricesX64: readonly bigint[]): void;
60
+ export declare function simulateQuote(publicClient: PublicClient, quoterAddress: Address, recipient: Address, functionName: "quoteLiveExactInSingle" | "quoteLiveExactOutSingle" | "quoteLiveExactIn" | "quoteLiveExactOut" | "quoteHypotheticalExactInputSingle" | "quoteHypotheticalExactOutputSingle" | "quoteHypotheticalExactInput" | "quoteHypotheticalExactOutput", args: readonly unknown[]): Promise<QuoteSwapResult>;
61
+ export declare function quoteLiveExactIn(params: QuoteLiveExactInParams): Promise<QuoteSwapResult>;
62
+ export declare function quoteLiveExactOut(params: QuoteLiveExactOutParams): Promise<QuoteSwapResult>;
63
+ export declare function quoteHypotheticalExactInput(params: QuoteHypotheticalExactInputParams): Promise<QuoteSwapResult>;
64
+ export declare function quoteHypotheticalExactOutput(params: QuoteHypotheticalExactOutputParams): Promise<QuoteSwapResult>;
65
+ //# sourceMappingURL=quotePath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quotePath.d.ts","sourceRoot":"","sources":["../../src/quoter/quotePath.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * MetricAMM SDK - MetricOmmSwapQuoter multihop quotes and shared helpers.
3
+ */
4
+ import { getAddressesOrThrow } from "../addresses.js";
5
+ import { MAX_UINT128, QUOTER_ABI } from "../constants.js";
6
+ import { EMPTY_EXTENSION_DATA } from "../extensions/types.js";
7
+ import { resolveSwapPath } from "../swap/path.js";
8
+ export async function resolveQuoterAddress(params) {
9
+ if (params.quoterAddress)
10
+ return params.quoterAddress;
11
+ if (!params.publicClient) {
12
+ throw new Error("Either publicClient or quoterAddress must be provided");
13
+ }
14
+ const chainId = params.publicClient.chain?.id ?? (await params.publicClient.getChainId());
15
+ const addresses = getAddressesOrThrow(chainId);
16
+ if (addresses.quoter === "0x0000000000000000000000000000000000000000" || !addresses.quoter) {
17
+ throw new Error(`Chain ${chainId} has no default quoter address. Pass a quoterAddress to override.`);
18
+ }
19
+ return addresses.quoter;
20
+ }
21
+ export function defaultPriceLimitX64(zeroForOne) {
22
+ return zeroForOne ? 0n : MAX_UINT128;
23
+ }
24
+ export function withQuoteExtensionData(extensionData) {
25
+ return extensionData ?? EMPTY_EXTENSION_DATA;
26
+ }
27
+ export function validateHypotheticalPrices(pools, bidPricesX64, askPricesX64) {
28
+ if (bidPricesX64.length !== pools.length || askPricesX64.length !== pools.length) {
29
+ throw new Error("bidPricesX64 and askPricesX64 length must match pools length");
30
+ }
31
+ }
32
+ export async function simulateQuote(publicClient, quoterAddress, recipient, functionName, args) {
33
+ const { result: [amountIn, amountOut], } = (await publicClient.simulateContract({
34
+ address: quoterAddress,
35
+ abi: QUOTER_ABI,
36
+ functionName,
37
+ args,
38
+ account: recipient,
39
+ }));
40
+ return { amountIn, amountOut };
41
+ }
42
+ export async function quoteLiveExactIn(params) {
43
+ const quoterAddress = await resolveQuoterAddress({
44
+ publicClient: params.publicClient,
45
+ quoterAddress: params.quoterAddress,
46
+ });
47
+ const { extensionDatas, zeroForOneBitMap } = await resolveSwapPath(params.publicClient, params.tokenIn, params.tokenOut, params.pools, params.extensionDatas);
48
+ return simulateQuote(params.publicClient, quoterAddress, params.recipient, "quoteLiveExactIn", [
49
+ {
50
+ pools: [...params.pools],
51
+ extensionDatas,
52
+ zeroForOneBitMap,
53
+ amountIn: params.amountIn,
54
+ },
55
+ ]);
56
+ }
57
+ export async function quoteLiveExactOut(params) {
58
+ const quoterAddress = await resolveQuoterAddress({
59
+ publicClient: params.publicClient,
60
+ quoterAddress: params.quoterAddress,
61
+ });
62
+ const { extensionDatas, zeroForOneBitMap } = await resolveSwapPath(params.publicClient, params.tokenIn, params.tokenOut, params.pools, params.extensionDatas);
63
+ return simulateQuote(params.publicClient, quoterAddress, params.recipient, "quoteLiveExactOut", [
64
+ {
65
+ pools: [...params.pools],
66
+ extensionDatas,
67
+ zeroForOneBitMap,
68
+ amountOut: params.amountOut,
69
+ },
70
+ ]);
71
+ }
72
+ export async function quoteHypotheticalExactInput(params) {
73
+ validateHypotheticalPrices(params.pools, params.bidPricesX64, params.askPricesX64);
74
+ const quoterAddress = await resolveQuoterAddress({
75
+ publicClient: params.publicClient,
76
+ quoterAddress: params.quoterAddress,
77
+ });
78
+ const { extensionDatas, zeroForOneBitMap } = await resolveSwapPath(params.publicClient, params.tokenIn, params.tokenOut, params.pools, params.extensionDatas);
79
+ return simulateQuote(params.publicClient, quoterAddress, params.recipient, "quoteHypotheticalExactInput", [
80
+ {
81
+ pools: [...params.pools],
82
+ extensionDatas,
83
+ zeroForOneBitMap,
84
+ amountIn: params.amountIn,
85
+ bidPricesX64: [...params.bidPricesX64],
86
+ askPricesX64: [...params.askPricesX64],
87
+ },
88
+ ]);
89
+ }
90
+ export async function quoteHypotheticalExactOutput(params) {
91
+ validateHypotheticalPrices(params.pools, params.bidPricesX64, params.askPricesX64);
92
+ const quoterAddress = await resolveQuoterAddress({
93
+ publicClient: params.publicClient,
94
+ quoterAddress: params.quoterAddress,
95
+ });
96
+ const { extensionDatas, zeroForOneBitMap } = await resolveSwapPath(params.publicClient, params.tokenIn, params.tokenOut, params.pools, params.extensionDatas);
97
+ return simulateQuote(params.publicClient, quoterAddress, params.recipient, "quoteHypotheticalExactOutput", [
98
+ {
99
+ pools: [...params.pools],
100
+ extensionDatas,
101
+ zeroForOneBitMap,
102
+ amountOut: params.amountOut,
103
+ bidPricesX64: [...params.bidPricesX64],
104
+ askPricesX64: [...params.askPricesX64],
105
+ },
106
+ ]);
107
+ }
108
+ //# sourceMappingURL=quotePath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quotePath.js","sourceRoot":"","sources":["../../src/quoter/quotePath.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * MetricAMM SDK - Router Functions
3
3
  */
4
- export { quoteSwap, buildArgsForSwapExactInput, buildArgsAndExpectedAmountsForSwapExactInput, quoteExpectedAmountsForSwapExactInput, buildArgsForSwapExactOutput, buildArgsAndExpectedAmountsForSwapExactOutput, quoteExpectedAmountsForSwapExactOutput, encodeSwapExactInputCalldata, encodeSwapExactOutputCalldata, prepareSwapExactInputCalldata, prepareSwapExactOutputCalldata, prepareSwapExactInputNativeForTokensCalldata, type PreparedSwapTransaction, type BuildSwapWithFactoryParams, type BuildSwapPrices, type BuildSwapExactInputParams, type QuoteExpectedAmountsForSwapExactInputParams, type SwapExactInputParams, type BuildSwapExactOutputParams, type QuoteExpectedAmountsForSwapExactOutputParams, type SwapExactOutputParams, type SwapExactInputArgs, type SwapExactOutputArgs, type QuoteSwapParams, type QuoteSwapResult, } from "./swap.js";
4
+ export { buildExactInputParams, buildExactOutputParams, encodeExactInputCalldata, encodeExactOutputCalldata, encodeZeroForOneBitMap, prepareExactInputCalldata, prepareExactOutputCalldata, type ExactInputParams, type ExactOutputParams, type BuildExactInputParams, type BuildExactOutputParams, } from "./swapPath.js";
5
+ export { buildExactInputSingleParams, buildExactOutputSingleParams, encodeExactInputSingleCalldata, encodeExactOutputSingleCalldata, prepareExactInputSingleCalldata, prepareExactOutputSingleCalldata, type ExactInputSingleParams, type ExactOutputSingleParams, type BuildExactInputSingleParams, type BuildExactOutputSingleParams, } from "./swap.js";
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,SAAS,EACT,0BAA0B,EAC1B,4CAA4C,EAC5C,qCAAqC,EACrC,2BAA2B,EAC3B,6CAA6C,EAC7C,sCAAsC,EACtC,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAC7B,8BAA8B,EAC9B,4CAA4C,EAC5C,KAAK,uBAAuB,EAC5B,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC9B,KAAK,2CAA2C,EAChD,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,EAC/B,KAAK,4CAA4C,EACjD,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,eAAe,GACrB,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,EAC1B,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,8BAA8B,EAC9B,+BAA+B,EAC/B,+BAA+B,EAC/B,gCAAgC,EAChC,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,4BAA4B,GAClC,MAAM,WAAW,CAAC"}
@@ -1,5 +1,6 @@
1
1
  /**
2
2
  * MetricAMM SDK - Router Functions
3
3
  */
4
- export { quoteSwap, buildArgsForSwapExactInput, buildArgsAndExpectedAmountsForSwapExactInput, quoteExpectedAmountsForSwapExactInput, buildArgsForSwapExactOutput, buildArgsAndExpectedAmountsForSwapExactOutput, quoteExpectedAmountsForSwapExactOutput, encodeSwapExactInputCalldata, encodeSwapExactOutputCalldata, prepareSwapExactInputCalldata, prepareSwapExactOutputCalldata, prepareSwapExactInputNativeForTokensCalldata, } from "./swap.js";
4
+ export { buildExactInputParams, buildExactOutputParams, encodeExactInputCalldata, encodeExactOutputCalldata, encodeZeroForOneBitMap, prepareExactInputCalldata, prepareExactOutputCalldata, } from "./swapPath.js";
5
+ export { buildExactInputSingleParams, buildExactOutputSingleParams, encodeExactInputSingleCalldata, encodeExactOutputSingleCalldata, prepareExactInputSingleCalldata, prepareExactOutputSingleCalldata, } from "./swap.js";
5
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,SAAS,EACT,0BAA0B,EAC1B,4CAA4C,EAC5C,qCAAqC,EACrC,2BAA2B,EAC3B,6CAA6C,EAC7C,sCAAsC,EACtC,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAC7B,8BAA8B,EAC9B,4CAA4C,GAc7C,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,GAK3B,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,2BAA2B,EAC3B,4BAA4B,EAC5B,8BAA8B,EAC9B,+BAA+B,EAC/B,+BAA+B,EAC/B,gCAAgC,GAKjC,MAAM,WAAW,CAAC"}