@coinbase/agentkit 0.10.0 → 0.10.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 (169) hide show
  1. package/README.md +195 -23
  2. package/dist/action-providers/across/acrossActionProvider.js +3 -3
  3. package/dist/action-providers/across/schemas.d.ts +1 -1
  4. package/dist/action-providers/baseAccount/baseAccountActionProvider.d.ts +46 -0
  5. package/dist/action-providers/baseAccount/baseAccountActionProvider.js +404 -0
  6. package/dist/action-providers/baseAccount/baseAccountActionProvider.test.d.ts +1 -0
  7. package/dist/action-providers/baseAccount/baseAccountActionProvider.test.js +325 -0
  8. package/dist/action-providers/baseAccount/index.d.ts +2 -0
  9. package/dist/action-providers/baseAccount/index.js +18 -0
  10. package/dist/action-providers/baseAccount/schemas.d.ts +43 -0
  11. package/dist/action-providers/baseAccount/schemas.js +62 -0
  12. package/dist/action-providers/baseAccount/types.d.ts +17 -0
  13. package/dist/action-providers/baseAccount/types.js +2 -0
  14. package/dist/action-providers/baseAccount/utils.d.ts +14 -0
  15. package/dist/action-providers/baseAccount/utils.js +57 -0
  16. package/dist/action-providers/cdp/cdpApiActionProvider.d.ts +3 -12
  17. package/dist/action-providers/cdp/cdpApiActionProvider.js +2 -81
  18. package/dist/action-providers/cdp/cdpApiActionProvider.test.js +0 -125
  19. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.d.ts +18 -3
  20. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.js +224 -23
  21. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.test.js +280 -0
  22. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.d.ts +17 -2
  23. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.js +224 -18
  24. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.test.js +267 -1
  25. package/dist/action-providers/cdp/schemas.d.ts +12 -12
  26. package/dist/action-providers/cdp/schemas.js +17 -5
  27. package/dist/action-providers/cdp/swapUtils.d.ts +23 -0
  28. package/dist/action-providers/cdp/swapUtils.js +106 -0
  29. package/dist/action-providers/clanker/clankerActionProvider.d.ts +43 -0
  30. package/dist/action-providers/clanker/clankerActionProvider.js +130 -0
  31. package/dist/action-providers/clanker/clankerActionProvider.test.d.ts +4 -0
  32. package/dist/action-providers/clanker/clankerActionProvider.test.js +119 -0
  33. package/dist/action-providers/clanker/index.d.ts +2 -0
  34. package/dist/action-providers/clanker/index.js +18 -0
  35. package/dist/action-providers/clanker/schemas.d.ts +56 -0
  36. package/dist/action-providers/clanker/schemas.js +47 -0
  37. package/dist/action-providers/clanker/utils.d.ts +9 -0
  38. package/dist/action-providers/clanker/utils.js +23 -0
  39. package/dist/action-providers/compound/constants.d.ts +1 -1
  40. package/dist/action-providers/compound/constants.js +2 -2
  41. package/dist/action-providers/erc20/constants.d.ts +35 -135
  42. package/dist/action-providers/erc20/constants.js +37 -189
  43. package/dist/action-providers/erc20/erc20ActionProvider.d.ts +9 -1
  44. package/dist/action-providers/erc20/erc20ActionProvider.js +87 -35
  45. package/dist/action-providers/erc20/erc20ActionProvider.test.js +115 -52
  46. package/dist/action-providers/erc20/schemas.d.ts +25 -12
  47. package/dist/action-providers/erc20/schemas.js +34 -6
  48. package/dist/action-providers/erc20/utils.d.ts +19 -0
  49. package/dist/action-providers/erc20/utils.js +54 -0
  50. package/dist/action-providers/flaunch/client_utils.d.ts +25 -0
  51. package/dist/action-providers/flaunch/client_utils.js +62 -0
  52. package/dist/action-providers/flaunch/constants.d.ts +42 -21
  53. package/dist/action-providers/flaunch/constants.js +113 -38
  54. package/dist/action-providers/flaunch/flaunchActionProvider.d.ts +4 -43
  55. package/dist/action-providers/flaunch/flaunchActionProvider.js +133 -209
  56. package/dist/action-providers/flaunch/flaunchActionProvider.test.js +113 -13
  57. package/dist/action-providers/flaunch/metadata_utils.d.ts +12 -0
  58. package/dist/action-providers/flaunch/metadata_utils.js +216 -0
  59. package/dist/action-providers/flaunch/schemas.d.ts +39 -3
  60. package/dist/action-providers/flaunch/schemas.js +62 -10
  61. package/dist/action-providers/flaunch/{utils.d.ts → swap_utils.d.ts} +17 -19
  62. package/dist/action-providers/flaunch/{utils.js → swap_utils.js} +137 -172
  63. package/dist/action-providers/index.d.ts +4 -0
  64. package/dist/action-providers/index.js +4 -0
  65. package/dist/action-providers/jupiter/schemas.d.ts +1 -1
  66. package/dist/action-providers/moonwell/schemas.d.ts +2 -2
  67. package/dist/action-providers/morpho/morphoActionProvider.js +5 -5
  68. package/dist/action-providers/morpho/schemas.d.ts +2 -2
  69. package/dist/action-providers/pyth/pythActionProvider.d.ts +2 -2
  70. package/dist/action-providers/pyth/pythActionProvider.js +83 -26
  71. package/dist/action-providers/pyth/pythActionProvider.test.js +179 -23
  72. package/dist/action-providers/pyth/schemas.d.ts +6 -0
  73. package/dist/action-providers/pyth/schemas.js +9 -1
  74. package/dist/action-providers/superfluid/constants.d.ts +814 -0
  75. package/dist/action-providers/superfluid/constants.js +2826 -0
  76. package/dist/action-providers/superfluid/graphQueries/endpoints.d.ts +2 -0
  77. package/dist/action-providers/superfluid/graphQueries/endpoints.js +5 -0
  78. package/dist/action-providers/superfluid/graphQueries/queries.d.ts +1 -0
  79. package/dist/action-providers/superfluid/graphQueries/queries.js +35 -0
  80. package/dist/action-providers/superfluid/graphQueries/superfluidGraphQueries.d.ts +8 -0
  81. package/dist/action-providers/superfluid/graphQueries/superfluidGraphQueries.js +24 -0
  82. package/dist/action-providers/superfluid/graphQueries/types.d.ts +27 -0
  83. package/dist/action-providers/superfluid/graphQueries/types.js +2 -0
  84. package/dist/action-providers/superfluid/index.d.ts +7 -0
  85. package/dist/action-providers/superfluid/index.js +23 -0
  86. package/dist/action-providers/superfluid/schemas.d.ts +86 -0
  87. package/dist/action-providers/superfluid/schemas.js +103 -0
  88. package/dist/action-providers/superfluid/superfluidActionProvider.d.ts +20 -0
  89. package/dist/action-providers/superfluid/superfluidActionProvider.js +36 -0
  90. package/dist/action-providers/superfluid/superfluidPoolActionProvider.d.ts +46 -0
  91. package/dist/action-providers/superfluid/superfluidPoolActionProvider.js +143 -0
  92. package/dist/action-providers/superfluid/superfluidPoolActionProvider.test.d.ts +1 -0
  93. package/dist/action-providers/superfluid/superfluidPoolActionProvider.test.js +92 -0
  94. package/dist/action-providers/superfluid/superfluidQueryActionProvider.d.ts +27 -0
  95. package/dist/action-providers/superfluid/superfluidQueryActionProvider.js +71 -0
  96. package/dist/action-providers/superfluid/superfluidQueryActionProvider.test.d.ts +1 -0
  97. package/dist/action-providers/superfluid/superfluidQueryActionProvider.test.js +57 -0
  98. package/dist/action-providers/superfluid/superfluidStreamActionProvider.d.ts +56 -0
  99. package/dist/action-providers/superfluid/superfluidStreamActionProvider.js +191 -0
  100. package/dist/action-providers/superfluid/superfluidStreamActionProvider.test.d.ts +1 -0
  101. package/dist/action-providers/superfluid/superfluidStreamActionProvider.test.js +80 -0
  102. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.d.ts +30 -0
  103. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.js +109 -0
  104. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.test.d.ts +1 -0
  105. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.test.js +75 -0
  106. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.d.ts +32 -0
  107. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.js +101 -0
  108. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.test.d.ts +1 -0
  109. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.test.js +85 -0
  110. package/dist/action-providers/superfluid/utils/parseLogs.d.ts +19 -0
  111. package/dist/action-providers/superfluid/utils/parseLogs.js +81 -0
  112. package/dist/action-providers/truemarkets/truemarketsActionProvider.d.ts +4 -16
  113. package/dist/action-providers/truemarkets/truemarketsActionProvider.js +20 -41
  114. package/dist/action-providers/truemarkets/truemarketsActionProvider.test.js +11 -33
  115. package/dist/action-providers/wallet/walletActionProvider.js +24 -10
  116. package/dist/action-providers/wallet/walletActionProvider.test.js +6 -2
  117. package/dist/action-providers/x402/schemas.d.ts +7 -0
  118. package/dist/action-providers/x402/schemas.js +11 -1
  119. package/dist/action-providers/x402/utils.d.ts +55 -0
  120. package/dist/action-providers/x402/utils.js +160 -0
  121. package/dist/action-providers/x402/x402ActionProvider.d.ts +9 -9
  122. package/dist/action-providers/x402/x402ActionProvider.js +158 -39
  123. package/dist/action-providers/x402/x402ActionProvider.test.js +116 -10
  124. package/dist/action-providers/zeroX/index.d.ts +1 -0
  125. package/dist/action-providers/zeroX/index.js +17 -0
  126. package/dist/action-providers/zeroX/schemas.d.ts +51 -0
  127. package/dist/action-providers/zeroX/schemas.js +82 -0
  128. package/dist/action-providers/zeroX/utils.d.ts +23 -0
  129. package/dist/action-providers/zeroX/utils.js +106 -0
  130. package/dist/action-providers/zeroX/zeroXActionProvider.d.ts +57 -0
  131. package/dist/action-providers/zeroX/zeroXActionProvider.js +407 -0
  132. package/dist/action-providers/zeroX/zeroXActionProvider.test.d.ts +1 -0
  133. package/dist/action-providers/zeroX/zeroXActionProvider.test.js +445 -0
  134. package/dist/utils.d.ts +10 -0
  135. package/dist/utils.js +43 -13
  136. package/dist/wallet-providers/cdpEvmWalletProvider.d.ts +27 -2
  137. package/dist/wallet-providers/cdpEvmWalletProvider.js +54 -36
  138. package/dist/wallet-providers/cdpEvmWalletProvider.test.js +7 -0
  139. package/dist/wallet-providers/cdpShared.d.ts +5 -0
  140. package/dist/wallet-providers/cdpSmartWalletProvider.d.ts +29 -3
  141. package/dist/wallet-providers/cdpSmartWalletProvider.js +66 -25
  142. package/dist/wallet-providers/cdpSmartWalletProvider.test.js +6 -10
  143. package/dist/wallet-providers/cdpSolanaWalletProvider.d.ts +1 -1
  144. package/dist/wallet-providers/cdpSolanaWalletProvider.js +7 -7
  145. package/dist/wallet-providers/cdpSolanaWalletProvider.test.js +15 -12
  146. package/dist/wallet-providers/evmWalletProvider.d.ts +13 -2
  147. package/dist/wallet-providers/evmWalletProvider.js +4 -0
  148. package/dist/wallet-providers/legacyCdpSmartWalletProvider.d.ts +18 -2
  149. package/dist/wallet-providers/legacyCdpSmartWalletProvider.js +23 -2
  150. package/dist/wallet-providers/legacyCdpWalletProvider.d.ts +19 -2
  151. package/dist/wallet-providers/legacyCdpWalletProvider.js +27 -2
  152. package/dist/wallet-providers/legacyCdpWalletProvider.test.js +6 -0
  153. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.d.ts +17 -2
  154. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.js +39 -3
  155. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.test.js +1 -1
  156. package/dist/wallet-providers/privyEvmWalletProvider.d.ts +2 -0
  157. package/dist/wallet-providers/privyEvmWalletProvider.js +2 -1
  158. package/dist/wallet-providers/privyEvmWalletProvider.test.js +12 -1
  159. package/dist/wallet-providers/solanaKeypairWalletProvider.d.ts +1 -1
  160. package/dist/wallet-providers/solanaKeypairWalletProvider.js +3 -4
  161. package/dist/wallet-providers/solanaKeypairWalletProvider.test.js +4 -2
  162. package/dist/wallet-providers/viemWalletProvider.d.ts +20 -3
  163. package/dist/wallet-providers/viemWalletProvider.js +33 -4
  164. package/dist/wallet-providers/viemWalletProvider.test.js +27 -6
  165. package/dist/wallet-providers/walletProvider.d.ts +1 -1
  166. package/dist/wallet-providers/zeroDevWalletProvider.d.ts +17 -2
  167. package/dist/wallet-providers/zeroDevWalletProvider.js +26 -5
  168. package/dist/wallet-providers/zeroDevWalletProvider.test.js +12 -2
  169. package/package.json +8 -4
@@ -9,35 +9,180 @@ describe("PythActionProvider", () => {
9
9
  jest.resetAllMocks().restoreAllMocks();
10
10
  });
11
11
  describe("fetchPriceFeed", () => {
12
- it("should return the first price feed ID that matches the input token symbol", async () => {
12
+ it("should return the first price feed ID that matches the input token symbol for crypto", async () => {
13
13
  fetchMock.mockResolvedValueOnce({
14
14
  ok: true,
15
- json: async () => [{ id: "some-price-feed-id", attributes: { base: "BTC" } }],
15
+ json: async () => [
16
+ { id: "some-price-feed-id", attributes: { base: "BTC", quote_currency: "USD" } },
17
+ ],
16
18
  });
17
- const priceFeedId = await provider.fetchPriceFeed({ tokenSymbol: "BTC" });
18
- expect(priceFeedId).toEqual("some-price-feed-id");
19
+ const result = await provider.fetchPriceFeed({
20
+ tokenSymbol: "BTC",
21
+ assetType: "crypto",
22
+ quoteCurrency: "USD",
23
+ });
24
+ const parsed = JSON.parse(result);
25
+ expect(parsed.success).toBe(true);
26
+ expect(parsed.priceFeedID).toEqual("some-price-feed-id");
19
27
  });
20
- it("should throw an error if no price feed is found", async () => {
28
+ it("should return the first price feed ID that matches the input token symbol for metals", async () => {
21
29
  fetchMock.mockResolvedValueOnce({
22
30
  ok: true,
23
- json: async () => [{ id: "some-price-feed-id", attributes: { base: "BTC" } }],
31
+ json: async () => [
32
+ { id: "gold-price-feed-id", attributes: { base: "XAU", quote_currency: "USD" } },
33
+ ],
34
+ });
35
+ const result = await provider.fetchPriceFeed({
36
+ tokenSymbol: "XAU",
37
+ assetType: "metal",
38
+ quoteCurrency: "USD",
24
39
  });
25
- await expect(provider.fetchPriceFeed({ tokenSymbol: "ETH" })).rejects.toThrow("No price feed found for ETH");
40
+ const parsed = JSON.parse(result);
41
+ expect(parsed.success).toBe(true);
42
+ expect(parsed.priceFeedID).toEqual("gold-price-feed-id");
26
43
  });
27
- it("should throw an error if the response is not ok", async () => {
44
+ it("should return the first price feed ID that matches the input token symbol for commodities", async () => {
45
+ fetchMock.mockResolvedValueOnce({
46
+ ok: true,
47
+ json: async () => [
48
+ { id: "oil-price-feed-id", attributes: { base: "WTI", quote_currency: "USD" } },
49
+ ],
50
+ });
51
+ const result = await provider.fetchPriceFeed({
52
+ tokenSymbol: "WTI",
53
+ assetType: "metal",
54
+ quoteCurrency: "USD",
55
+ });
56
+ const parsed = JSON.parse(result);
57
+ expect(parsed.success).toBe(true);
58
+ expect(parsed.priceFeedID).toEqual("oil-price-feed-id");
59
+ });
60
+ it("should return the first price feed ID that matches the input token symbol for equities", async () => {
61
+ fetchMock.mockResolvedValueOnce({
62
+ ok: true,
63
+ json: async () => [
64
+ {
65
+ id: "apple-price-feed-id",
66
+ attributes: {
67
+ base: "AAPL",
68
+ quote_currency: "USD",
69
+ symbol: "Equity.US.AAPL/USD",
70
+ display_symbol: "AAPL/USD",
71
+ },
72
+ },
73
+ ],
74
+ });
75
+ const result = await provider.fetchPriceFeed({
76
+ tokenSymbol: "AAPL",
77
+ assetType: "equity",
78
+ quoteCurrency: "USD",
79
+ });
80
+ const parsed = JSON.parse(result);
81
+ expect(parsed.success).toBe(true);
82
+ expect(parsed.priceFeedID).toEqual("apple-price-feed-id");
83
+ });
84
+ it("should return the first price feed ID that matches the input token symbol for FX", async () => {
85
+ fetchMock.mockResolvedValueOnce({
86
+ ok: true,
87
+ json: async () => [
88
+ { id: "eur-price-feed-id", attributes: { base: "EUR", quote_currency: "USD" } },
89
+ ],
90
+ });
91
+ const result = await provider.fetchPriceFeed({
92
+ tokenSymbol: "EUR",
93
+ assetType: "fx",
94
+ quoteCurrency: "USD",
95
+ });
96
+ const parsed = JSON.parse(result);
97
+ expect(parsed.success).toBe(true);
98
+ expect(parsed.priceFeedID).toEqual("eur-price-feed-id");
99
+ });
100
+ it("should return error if no price feed is found", async () => {
101
+ fetchMock.mockResolvedValueOnce({
102
+ ok: true,
103
+ json: async () => [
104
+ { id: "some-price-feed-id", attributes: { base: "BTC", quote_currency: "USD" } },
105
+ ],
106
+ });
107
+ const result = await provider.fetchPriceFeed({
108
+ tokenSymbol: "SOL",
109
+ assetType: "crypto",
110
+ quoteCurrency: "USD",
111
+ });
112
+ const parsed = JSON.parse(result);
113
+ expect(parsed.success).toBe(false);
114
+ expect(parsed.error).toContain("No price feed found for SOL/USD");
115
+ });
116
+ it("should return error if the response is not ok", async () => {
28
117
  fetchMock.mockResolvedValueOnce({
29
118
  ok: false,
30
119
  status: 404,
31
120
  });
32
- await expect(provider.fetchPriceFeed({ tokenSymbol: "BTC" })).rejects.toThrow("HTTP error! status: 404");
121
+ const result = await provider.fetchPriceFeed({
122
+ tokenSymbol: "BTC",
123
+ assetType: "crypto",
124
+ quoteCurrency: "USD",
125
+ });
126
+ const parsed = JSON.parse(result);
127
+ expect(parsed.success).toBe(false);
128
+ expect(parsed.error).toContain("HTTP error! status: 404");
33
129
  });
34
- it("should throw an error if response is ok but no data is returned", async () => {
130
+ it("should return error if response is ok but no data is returned", async () => {
35
131
  fetchMock.mockResolvedValueOnce({
36
132
  ok: true,
37
133
  json: async () => [],
38
134
  });
39
- const provider = (0, pythActionProvider_1.pythActionProvider)();
40
- await expect(provider.fetchPriceFeed({ tokenSymbol: "BTC" })).rejects.toThrow("No price feed found for BTC");
135
+ const result = await provider.fetchPriceFeed({
136
+ tokenSymbol: "BTC",
137
+ assetType: "crypto",
138
+ quoteCurrency: "USD",
139
+ });
140
+ const parsed = JSON.parse(result);
141
+ expect(parsed.success).toBe(false);
142
+ expect(parsed.error).toContain("No price feed found for BTC");
143
+ });
144
+ it("should prefer regular market hours feed for equities over pre/post market", async () => {
145
+ fetchMock.mockResolvedValueOnce({
146
+ ok: true,
147
+ json: async () => [
148
+ {
149
+ id: "post-market-feed-id",
150
+ attributes: {
151
+ base: "COIN",
152
+ quote_currency: "USD",
153
+ symbol: "Equity.US.COIN/USD.POST",
154
+ display_symbol: "COIN/USD POST MARKET",
155
+ },
156
+ },
157
+ {
158
+ id: "regular-market-feed-id",
159
+ attributes: {
160
+ base: "COIN",
161
+ quote_currency: "USD",
162
+ symbol: "Equity.US.COIN/USD",
163
+ display_symbol: "COIN/USD",
164
+ },
165
+ },
166
+ {
167
+ id: "pre-market-feed-id",
168
+ attributes: {
169
+ base: "COIN",
170
+ quote_currency: "USD",
171
+ symbol: "Equity.US.COIN/USD.PRE",
172
+ display_symbol: "COIN/USD PRE MARKET",
173
+ },
174
+ },
175
+ ],
176
+ });
177
+ const result = await provider.fetchPriceFeed({
178
+ tokenSymbol: "COIN",
179
+ assetType: "equity",
180
+ quoteCurrency: "USD",
181
+ });
182
+ const parsed = JSON.parse(result);
183
+ expect(parsed.success).toBe(true);
184
+ expect(parsed.priceFeedID).toEqual("regular-market-feed-id");
185
+ expect(parsed.feedType).toEqual("COIN/USD");
41
186
  });
42
187
  });
43
188
  describe("fetchPrice", () => {
@@ -55,8 +200,10 @@ describe("PythActionProvider", () => {
55
200
  ],
56
201
  }),
57
202
  });
58
- const price = await provider.fetchPrice({ priceFeedID: "some-price-feed-id" });
59
- expect(price).toEqual("1");
203
+ const result = await provider.fetchPrice({ priceFeedID: "some-price-feed-id" });
204
+ const parsed = JSON.parse(result);
205
+ expect(parsed.success).toBe(true);
206
+ expect(parsed.price).toEqual("1");
60
207
  });
61
208
  it("should return the price for a given price feed ID with a negative exponent", async () => {
62
209
  fetchMock.mockResolvedValueOnce({
@@ -72,9 +219,10 @@ describe("PythActionProvider", () => {
72
219
  ],
73
220
  }),
74
221
  });
75
- const provider = (0, pythActionProvider_1.pythActionProvider)();
76
- const price = await provider.fetchPrice({ priceFeedID: "some-price-feed-id" });
77
- expect(price).toEqual("1.00");
222
+ const result = await provider.fetchPrice({ priceFeedID: "some-price-feed-id" });
223
+ const parsed = JSON.parse(result);
224
+ expect(parsed.success).toBe(true);
225
+ expect(parsed.price).toEqual("1.00");
78
226
  });
79
227
  it("should handle scaled price starting with a decimal", async () => {
80
228
  fetchMock.mockResolvedValueOnce({
@@ -90,24 +238,32 @@ describe("PythActionProvider", () => {
90
238
  ],
91
239
  }),
92
240
  });
93
- const price = await provider.fetchPrice({ priceFeedID: "some-price-feed-id" });
94
- expect(price).toEqual("0.25");
241
+ const result = await provider.fetchPrice({ priceFeedID: "some-price-feed-id" });
242
+ const parsed = JSON.parse(result);
243
+ expect(parsed.success).toBe(true);
244
+ expect(parsed.price).toEqual("0.25");
95
245
  });
96
- it("should throw an error if there is no price data", async () => {
246
+ it("should return error if there is no price data", async () => {
97
247
  fetchMock.mockResolvedValueOnce({
98
248
  ok: true,
99
249
  json: async () => ({
100
250
  parsed: [],
101
251
  }),
102
252
  });
103
- await expect(provider.fetchPrice({ priceFeedID: "some-price-feed-id" })).rejects.toThrow("No price data found for some-price-feed-id");
253
+ const result = await provider.fetchPrice({ priceFeedID: "some-price-feed-id" });
254
+ const parsed = JSON.parse(result);
255
+ expect(parsed.success).toBe(false);
256
+ expect(parsed.error).toContain("No price data found for some-price-feed-id");
104
257
  });
105
- it("should throw an error if response is not ok", async () => {
258
+ it("should return error if response is not ok", async () => {
106
259
  fetchMock.mockResolvedValueOnce({
107
260
  ok: false,
108
261
  status: 404,
109
262
  });
110
- await expect(provider.fetchPrice({ priceFeedID: "some-price-feed-id" })).rejects.toThrow("HTTP error! status: 404");
263
+ const result = await provider.fetchPrice({ priceFeedID: "some-price-feed-id" });
264
+ const parsed = JSON.parse(result);
265
+ expect(parsed.success).toBe(false);
266
+ expect(parsed.error).toContain("HTTP error! status: 404");
111
267
  });
112
268
  });
113
269
  });
@@ -4,10 +4,16 @@ import { z } from "zod";
4
4
  */
5
5
  export declare const PythFetchPriceFeedIDSchema: z.ZodObject<{
6
6
  tokenSymbol: z.ZodString;
7
+ quoteCurrency: z.ZodDefault<z.ZodString>;
8
+ assetType: z.ZodDefault<z.ZodEnum<["crypto", "equity", "fx", "metal"]>>;
7
9
  }, "strict", z.ZodTypeAny, {
8
10
  tokenSymbol: string;
11
+ quoteCurrency: string;
12
+ assetType: "crypto" | "equity" | "fx" | "metal";
9
13
  }, {
10
14
  tokenSymbol: string;
15
+ quoteCurrency?: string | undefined;
16
+ assetType?: "crypto" | "equity" | "fx" | "metal" | undefined;
11
17
  }>;
12
18
  /**
13
19
  * Input schema for Pyth fetch price action.
@@ -7,7 +7,15 @@ const zod_1 = require("zod");
7
7
  */
8
8
  exports.PythFetchPriceFeedIDSchema = zod_1.z
9
9
  .object({
10
- tokenSymbol: zod_1.z.string().describe("The token symbol to fetch the price feed ID for"),
10
+ tokenSymbol: zod_1.z.string().describe("The asset ticker/symbol to fetch the price feed ID for"),
11
+ quoteCurrency: zod_1.z
12
+ .string()
13
+ .default("USD")
14
+ .describe("The quote currency to filter by (defaults to USD)"),
15
+ assetType: zod_1.z
16
+ .enum(["crypto", "equity", "fx", "metal"])
17
+ .default("crypto")
18
+ .describe("The asset type to search for (crypto, equity, fx, metal)"),
11
19
  })
12
20
  .strict();
13
21
  /**