@waiaas/daemon 2.6.0-rc → 2.6.0-rc.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.
- package/dist/api/routes/connect-info.d.ts.map +1 -1
- package/dist/api/routes/connect-info.js +6 -0
- package/dist/api/routes/connect-info.js.map +1 -1
- package/dist/api/routes/openapi-schemas.d.ts +94 -22
- package/dist/api/routes/openapi-schemas.d.ts.map +1 -1
- package/dist/api/routes/openapi-schemas.js +1 -0
- package/dist/api/routes/openapi-schemas.js.map +1 -1
- package/dist/api/routes/policies.d.ts.map +1 -1
- package/dist/api/routes/policies.js +18 -4
- package/dist/api/routes/policies.js.map +1 -1
- package/dist/api/routes/tokens.d.ts.map +1 -1
- package/dist/api/routes/tokens.js +1 -0
- package/dist/api/routes/tokens.js.map +1 -1
- package/dist/infrastructure/database/migrate.d.ts +1 -1
- package/dist/infrastructure/database/migrate.d.ts.map +1 -1
- package/dist/infrastructure/database/migrate.js +42 -3
- package/dist/infrastructure/database/migrate.js.map +1 -1
- package/dist/infrastructure/database/schema.d.ts +19 -0
- package/dist/infrastructure/database/schema.d.ts.map +1 -1
- package/dist/infrastructure/database/schema.js +1 -0
- package/dist/infrastructure/database/schema.js.map +1 -1
- package/dist/infrastructure/oracle/coingecko-oracle.d.ts +9 -1
- package/dist/infrastructure/oracle/coingecko-oracle.d.ts.map +1 -1
- package/dist/infrastructure/oracle/coingecko-oracle.js +40 -23
- package/dist/infrastructure/oracle/coingecko-oracle.js.map +1 -1
- package/dist/infrastructure/oracle/coingecko-platform-ids.d.ts +11 -10
- package/dist/infrastructure/oracle/coingecko-platform-ids.d.ts.map +1 -1
- package/dist/infrastructure/oracle/coingecko-platform-ids.js +20 -12
- package/dist/infrastructure/oracle/coingecko-platform-ids.js.map +1 -1
- package/dist/infrastructure/oracle/index.d.ts +1 -1
- package/dist/infrastructure/oracle/index.d.ts.map +1 -1
- package/dist/infrastructure/oracle/index.js +1 -1
- package/dist/infrastructure/oracle/index.js.map +1 -1
- package/dist/infrastructure/oracle/oracle-chain.d.ts.map +1 -1
- package/dist/infrastructure/oracle/oracle-chain.js +7 -4
- package/dist/infrastructure/oracle/oracle-chain.js.map +1 -1
- package/dist/infrastructure/oracle/price-cache.d.ts +24 -8
- package/dist/infrastructure/oracle/price-cache.d.ts.map +1 -1
- package/dist/infrastructure/oracle/price-cache.js +32 -11
- package/dist/infrastructure/oracle/price-cache.js.map +1 -1
- package/dist/infrastructure/oracle/pyth-feed-ids.d.ts +11 -8
- package/dist/infrastructure/oracle/pyth-feed-ids.d.ts.map +1 -1
- package/dist/infrastructure/oracle/pyth-feed-ids.js +16 -17
- package/dist/infrastructure/oracle/pyth-feed-ids.js.map +1 -1
- package/dist/infrastructure/oracle/pyth-oracle.d.ts.map +1 -1
- package/dist/infrastructure/oracle/pyth-oracle.js +7 -4
- package/dist/infrastructure/oracle/pyth-oracle.js.map +1 -1
- package/dist/infrastructure/token-registry/token-registry-service.d.ts +1 -0
- package/dist/infrastructure/token-registry/token-registry-service.d.ts.map +1 -1
- package/dist/infrastructure/token-registry/token-registry-service.js +15 -1
- package/dist/infrastructure/token-registry/token-registry-service.js.map +1 -1
- package/dist/notifications/channels/discord.d.ts.map +1 -1
- package/dist/notifications/channels/discord.js +5 -1
- package/dist/notifications/channels/discord.js.map +1 -1
- package/dist/notifications/channels/ntfy.d.ts.map +1 -1
- package/dist/notifications/channels/ntfy.js +3 -0
- package/dist/notifications/channels/ntfy.js.map +1 -1
- package/dist/notifications/channels/slack.d.ts.map +1 -1
- package/dist/notifications/channels/slack.js +5 -1
- package/dist/notifications/channels/slack.js.map +1 -1
- package/dist/notifications/channels/telegram.d.ts.map +1 -1
- package/dist/notifications/channels/telegram.js +4 -0
- package/dist/notifications/channels/telegram.js.map +1 -1
- package/dist/notifications/notification-service.d.ts.map +1 -1
- package/dist/notifications/notification-service.js +7 -1
- package/dist/notifications/notification-service.js.map +1 -1
- package/dist/pipeline/database-policy-engine.d.ts +38 -9
- package/dist/pipeline/database-policy-engine.d.ts.map +1 -1
- package/dist/pipeline/database-policy-engine.js +189 -37
- package/dist/pipeline/database-policy-engine.js.map +1 -1
- package/dist/pipeline/resolve-effective-amount-usd.d.ts +1 -1
- package/dist/pipeline/resolve-effective-amount-usd.d.ts.map +1 -1
- package/dist/pipeline/resolve-effective-amount-usd.js +5 -3
- package/dist/pipeline/resolve-effective-amount-usd.js.map +1 -1
- package/dist/pipeline/sign-only.d.ts +4 -0
- package/dist/pipeline/sign-only.d.ts.map +1 -1
- package/dist/pipeline/sign-only.js +1 -0
- package/dist/pipeline/sign-only.js.map +1 -1
- package/dist/pipeline/stages.d.ts.map +1 -1
- package/dist/pipeline/stages.js +9 -1
- package/dist/pipeline/stages.js.map +1 -1
- package/dist/services/incoming/incoming-tx-monitor-service.d.ts.map +1 -1
- package/dist/services/incoming/incoming-tx-monitor-service.js +21 -0
- package/dist/services/incoming/incoming-tx-monitor-service.js.map +1 -1
- package/dist/services/wc-session-service.d.ts +0 -2
- package/dist/services/wc-session-service.d.ts.map +1 -1
- package/dist/services/wc-session-service.js +2 -23
- package/dist/services/wc-session-service.js.map +1 -1
- package/package.json +4 -4
- package/public/admin/assets/index-BE0U9eAD.js +1 -0
- package/public/admin/index.html +1 -1
- package/public/admin/assets/index-D06O_cSo.js +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getCoinGeckoPlatform } from './coingecko-platform-ids.js';
|
|
2
2
|
import { PriceNotAvailableError, CoinGeckoNotConfiguredError } from './oracle-errors.js';
|
|
3
|
-
import { buildCacheKey } from './price-cache.js';
|
|
3
|
+
import { buildCacheKey, resolveNetwork } from './price-cache.js';
|
|
4
4
|
// Re-export error classes for consumer convenience
|
|
5
5
|
export { PriceNotAvailableError, CoinGeckoNotConfiguredError } from './oracle-errors.js';
|
|
6
6
|
/** CoinGecko Demo API base URL. */
|
|
@@ -34,13 +34,14 @@ export class CoinGeckoOracle {
|
|
|
34
34
|
*/
|
|
35
35
|
async getPrice(token) {
|
|
36
36
|
this.ensureConfigured();
|
|
37
|
+
const network = resolveNetwork(token.chain, token.network);
|
|
37
38
|
// Delegate native tokens to getNativePrice
|
|
38
39
|
if (token.address === 'native') {
|
|
39
|
-
return this.
|
|
40
|
+
return this.getNativePriceByNetwork(network);
|
|
40
41
|
}
|
|
41
|
-
const platform = getCoinGeckoPlatform(
|
|
42
|
+
const platform = getCoinGeckoPlatform(network);
|
|
42
43
|
if (!platform) {
|
|
43
|
-
throw new PriceNotAvailableError(`Unsupported
|
|
44
|
+
throw new PriceNotAvailableError(`Unsupported network for CoinGecko: ${network}`);
|
|
44
45
|
}
|
|
45
46
|
// EVM addresses must be lowercased for CoinGecko API
|
|
46
47
|
const address = token.chain === 'ethereum'
|
|
@@ -55,7 +56,7 @@ export class CoinGeckoOracle {
|
|
|
55
56
|
const lookupKey = token.chain === 'ethereum' ? address.toLowerCase() : address;
|
|
56
57
|
const tokenData = data[lookupKey];
|
|
57
58
|
if (!tokenData?.usd) {
|
|
58
|
-
throw new PriceNotAvailableError(`CoinGecko returned no price for ${token.symbol ?? token.address} on ${
|
|
59
|
+
throw new PriceNotAvailableError(`CoinGecko returned no price for ${token.symbol ?? token.address} on ${network}`);
|
|
59
60
|
}
|
|
60
61
|
return this.buildPriceInfo(tokenData.usd);
|
|
61
62
|
}
|
|
@@ -73,29 +74,31 @@ export class CoinGeckoOracle {
|
|
|
73
74
|
async getPrices(tokens) {
|
|
74
75
|
this.ensureConfigured();
|
|
75
76
|
const result = new Map();
|
|
76
|
-
// Separate native and non-native tokens
|
|
77
|
+
// Separate native and non-native tokens, group by resolved network
|
|
77
78
|
const nativeTokens = [];
|
|
78
|
-
const
|
|
79
|
+
const tokensByNetwork = new Map();
|
|
79
80
|
for (const token of tokens) {
|
|
80
81
|
if (token.address === 'native') {
|
|
81
82
|
nativeTokens.push(token);
|
|
82
83
|
}
|
|
83
84
|
else {
|
|
84
|
-
const
|
|
85
|
+
const network = resolveNetwork(token.chain, token.network);
|
|
86
|
+
const list = tokensByNetwork.get(network) ?? [];
|
|
85
87
|
list.push(token);
|
|
86
|
-
|
|
88
|
+
tokensByNetwork.set(network, list);
|
|
87
89
|
}
|
|
88
90
|
}
|
|
89
|
-
// Batch query per
|
|
91
|
+
// Batch query per network (comma-separated addresses)
|
|
90
92
|
const batchPromises = [];
|
|
91
|
-
for (const [
|
|
92
|
-
batchPromises.push(this.fetchBatchTokenPrices(
|
|
93
|
+
for (const [network, networkTokens] of tokensByNetwork) {
|
|
94
|
+
batchPromises.push(this.fetchBatchTokenPrices(network, networkTokens, result));
|
|
93
95
|
}
|
|
94
96
|
// Native token queries
|
|
95
97
|
for (const token of nativeTokens) {
|
|
96
|
-
|
|
98
|
+
const network = resolveNetwork(token.chain, token.network);
|
|
99
|
+
batchPromises.push(this.getNativePriceByNetwork(network)
|
|
97
100
|
.then((price) => {
|
|
98
|
-
result.set(buildCacheKey(
|
|
101
|
+
result.set(buildCacheKey(network, 'native'), price);
|
|
99
102
|
})
|
|
100
103
|
.catch(() => {
|
|
101
104
|
// Skip failed native price queries
|
|
@@ -107,16 +110,27 @@ export class CoinGeckoOracle {
|
|
|
107
110
|
/**
|
|
108
111
|
* Get native token price (SOL or ETH).
|
|
109
112
|
*
|
|
113
|
+
* Part of IPriceOracle interface. Resolves network internally from chain.
|
|
114
|
+
*
|
|
110
115
|
* @param chain - Chain type ('solana' or 'ethereum').
|
|
111
116
|
* @returns PriceInfo with native token USD price.
|
|
112
117
|
* @throws CoinGeckoNotConfiguredError if API key is empty.
|
|
113
118
|
* @throws PriceNotAvailableError if chain is unsupported or no data.
|
|
114
119
|
*/
|
|
115
120
|
async getNativePrice(chain) {
|
|
121
|
+
const network = resolveNetwork(chain);
|
|
122
|
+
return this.getNativePriceByNetwork(network);
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get native token price by NetworkType.
|
|
126
|
+
*
|
|
127
|
+
* Internal helper used by getPrice() and getPrices() where network is already resolved.
|
|
128
|
+
*/
|
|
129
|
+
async getNativePriceByNetwork(network) {
|
|
116
130
|
this.ensureConfigured();
|
|
117
|
-
const platform = getCoinGeckoPlatform(
|
|
131
|
+
const platform = getCoinGeckoPlatform(network);
|
|
118
132
|
if (!platform) {
|
|
119
|
-
throw new PriceNotAvailableError(`Unsupported
|
|
133
|
+
throw new PriceNotAvailableError(`Unsupported network for CoinGecko native price: ${network}`);
|
|
120
134
|
}
|
|
121
135
|
const url = `${BASE_URL}/simple/price` +
|
|
122
136
|
`?ids=${platform.nativeCoinId}` +
|
|
@@ -125,7 +139,7 @@ export class CoinGeckoOracle {
|
|
|
125
139
|
const data = await this.fetchJson(url);
|
|
126
140
|
const coinData = data[platform.nativeCoinId];
|
|
127
141
|
if (!coinData?.usd) {
|
|
128
|
-
throw new PriceNotAvailableError(`CoinGecko returned no native price for ${
|
|
142
|
+
throw new PriceNotAvailableError(`CoinGecko returned no native price for ${network}`);
|
|
129
143
|
}
|
|
130
144
|
return this.buildPriceInfo(coinData.usd);
|
|
131
145
|
}
|
|
@@ -169,12 +183,14 @@ export class CoinGeckoOracle {
|
|
|
169
183
|
isStale: false,
|
|
170
184
|
};
|
|
171
185
|
}
|
|
172
|
-
/** Fetch batch token prices for a single
|
|
173
|
-
async fetchBatchTokenPrices(
|
|
174
|
-
const platform = getCoinGeckoPlatform(
|
|
186
|
+
/** Fetch batch token prices for a single network and add to result map. */
|
|
187
|
+
async fetchBatchTokenPrices(network, tokens, result) {
|
|
188
|
+
const platform = getCoinGeckoPlatform(network);
|
|
175
189
|
if (!platform)
|
|
176
190
|
return;
|
|
177
|
-
|
|
191
|
+
// EVM addresses must be lowercased for CoinGecko API
|
|
192
|
+
const isEvm = tokens[0]?.chain === 'ethereum';
|
|
193
|
+
const addresses = tokens.map((t) => isEvm ? t.address.toLowerCase() : t.address);
|
|
178
194
|
const url = `${BASE_URL}/simple/token_price/${platform.platformId}` +
|
|
179
195
|
`?contract_addresses=${addresses.join(',')}` +
|
|
180
196
|
`&vs_currencies=usd` +
|
|
@@ -182,12 +198,13 @@ export class CoinGeckoOracle {
|
|
|
182
198
|
try {
|
|
183
199
|
const data = await this.fetchJson(url);
|
|
184
200
|
for (const token of tokens) {
|
|
185
|
-
const addr =
|
|
201
|
+
const addr = isEvm
|
|
186
202
|
? token.address.toLowerCase()
|
|
187
203
|
: token.address;
|
|
188
204
|
const tokenData = data[addr];
|
|
189
205
|
if (tokenData?.usd) {
|
|
190
|
-
|
|
206
|
+
const tokenNetwork = resolveNetwork(token.chain, token.network);
|
|
207
|
+
result.set(buildCacheKey(tokenNetwork, token.address), this.buildPriceInfo(tokenData.usd));
|
|
191
208
|
}
|
|
192
209
|
}
|
|
193
210
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coingecko-oracle.js","sourceRoot":"","sources":["../../../src/infrastructure/oracle/coingecko-oracle.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"coingecko-oracle.js","sourceRoot":"","sources":["../../../src/infrastructure/oracle/coingecko-oracle.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CoinGecko platform ID and native coin ID mapping.
|
|
3
3
|
*
|
|
4
|
-
* Maps WAIaaS
|
|
4
|
+
* Maps WAIaaS NetworkType to CoinGecko API identifiers:
|
|
5
5
|
* - platformId: used in /simple/token_price/{platformId} path
|
|
6
6
|
* - nativeCoinId: used in /simple/price?ids={nativeCoinId} path
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* Supports 6 mainnet networks: Solana, Ethereum, Polygon, Arbitrum, Optimism, Base.
|
|
9
|
+
* Testnet networks are intentionally excluded (no CoinGecko prices for testnet tokens).
|
|
10
10
|
*/
|
|
11
|
-
/** CoinGecko platform configuration for a
|
|
11
|
+
/** CoinGecko platform configuration for a network. */
|
|
12
12
|
export interface CoinGeckoPlatform {
|
|
13
13
|
/** Platform ID for /simple/token_price/{platformId} endpoint. */
|
|
14
14
|
platformId: string;
|
|
@@ -16,17 +16,18 @@ export interface CoinGeckoPlatform {
|
|
|
16
16
|
nativeCoinId: string;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
* Map from WAIaaS
|
|
19
|
+
* Map from WAIaaS NetworkType to CoinGecko platform/coin IDs.
|
|
20
20
|
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
21
|
+
* 6 mainnet entries covering Solana + Ethereum L1 + 4 EVM L2 networks.
|
|
22
|
+
* Polygon uses 'matic-network' as nativeCoinId (POL/MATIC gas token).
|
|
23
|
+
* Arbitrum/Optimism/Base use 'ethereum' as nativeCoinId (ETH gas token).
|
|
23
24
|
*/
|
|
24
25
|
export declare const COINGECKO_PLATFORM_MAP: Record<string, CoinGeckoPlatform>;
|
|
25
26
|
/**
|
|
26
|
-
* Look up CoinGecko platform config for a
|
|
27
|
+
* Look up CoinGecko platform config for a network.
|
|
27
28
|
*
|
|
28
|
-
* @param
|
|
29
|
+
* @param network - WAIaaS NetworkType (e.g., 'ethereum-mainnet', 'polygon-mainnet').
|
|
29
30
|
* @returns CoinGeckoPlatform if supported, undefined otherwise.
|
|
30
31
|
*/
|
|
31
|
-
export declare function getCoinGeckoPlatform(
|
|
32
|
+
export declare function getCoinGeckoPlatform(network: string): CoinGeckoPlatform | undefined;
|
|
32
33
|
//# sourceMappingURL=coingecko-platform-ids.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coingecko-platform-ids.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/oracle/coingecko-platform-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,
|
|
1
|
+
{"version":3,"file":"coingecko-platform-ids.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/oracle/coingecko-platform-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,oEAAoE;IACpE,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAUpE,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEnF"}
|
|
@@ -1,30 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CoinGecko platform ID and native coin ID mapping.
|
|
3
3
|
*
|
|
4
|
-
* Maps WAIaaS
|
|
4
|
+
* Maps WAIaaS NetworkType to CoinGecko API identifiers:
|
|
5
5
|
* - platformId: used in /simple/token_price/{platformId} path
|
|
6
6
|
* - nativeCoinId: used in /simple/price?ids={nativeCoinId} path
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
8
|
+
* Supports 6 mainnet networks: Solana, Ethereum, Polygon, Arbitrum, Optimism, Base.
|
|
9
|
+
* Testnet networks are intentionally excluded (no CoinGecko prices for testnet tokens).
|
|
10
10
|
*/
|
|
11
11
|
/**
|
|
12
|
-
* Map from WAIaaS
|
|
12
|
+
* Map from WAIaaS NetworkType to CoinGecko platform/coin IDs.
|
|
13
13
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
14
|
+
* 6 mainnet entries covering Solana + Ethereum L1 + 4 EVM L2 networks.
|
|
15
|
+
* Polygon uses 'matic-network' as nativeCoinId (POL/MATIC gas token).
|
|
16
|
+
* Arbitrum/Optimism/Base use 'ethereum' as nativeCoinId (ETH gas token).
|
|
16
17
|
*/
|
|
17
18
|
export const COINGECKO_PLATFORM_MAP = {
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
// Solana (mainnet only -- devnet/testnet have no CoinGecko prices)
|
|
20
|
+
'mainnet': { platformId: 'solana', nativeCoinId: 'solana' },
|
|
21
|
+
// EVM Mainnet L1
|
|
22
|
+
'ethereum-mainnet': { platformId: 'ethereum', nativeCoinId: 'ethereum' },
|
|
23
|
+
// EVM L2 Mainnets
|
|
24
|
+
'polygon-mainnet': { platformId: 'polygon-pos', nativeCoinId: 'matic-network' },
|
|
25
|
+
'arbitrum-mainnet': { platformId: 'arbitrum-one', nativeCoinId: 'ethereum' },
|
|
26
|
+
'optimism-mainnet': { platformId: 'optimistic-ethereum', nativeCoinId: 'ethereum' },
|
|
27
|
+
'base-mainnet': { platformId: 'base', nativeCoinId: 'ethereum' },
|
|
20
28
|
};
|
|
21
29
|
/**
|
|
22
|
-
* Look up CoinGecko platform config for a
|
|
30
|
+
* Look up CoinGecko platform config for a network.
|
|
23
31
|
*
|
|
24
|
-
* @param
|
|
32
|
+
* @param network - WAIaaS NetworkType (e.g., 'ethereum-mainnet', 'polygon-mainnet').
|
|
25
33
|
* @returns CoinGeckoPlatform if supported, undefined otherwise.
|
|
26
34
|
*/
|
|
27
|
-
export function getCoinGeckoPlatform(
|
|
28
|
-
return COINGECKO_PLATFORM_MAP[
|
|
35
|
+
export function getCoinGeckoPlatform(network) {
|
|
36
|
+
return COINGECKO_PLATFORM_MAP[network];
|
|
29
37
|
}
|
|
30
38
|
//# sourceMappingURL=coingecko-platform-ids.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coingecko-platform-ids.js","sourceRoot":"","sources":["../../../src/infrastructure/oracle/coingecko-platform-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH
|
|
1
|
+
{"version":3,"file":"coingecko-platform-ids.js","sourceRoot":"","sources":["../../../src/infrastructure/oracle/coingecko-platform-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAsC;IACvE,mEAAmE;IACnE,SAAS,EAAW,EAAE,UAAU,EAAE,QAAQ,EAAe,YAAY,EAAE,QAAQ,EAAE;IACjF,iBAAiB;IACjB,kBAAkB,EAAE,EAAE,UAAU,EAAE,UAAU,EAAa,YAAY,EAAE,UAAU,EAAE;IACnF,kBAAkB;IAClB,iBAAiB,EAAG,EAAE,UAAU,EAAE,aAAa,EAAU,YAAY,EAAE,eAAe,EAAE;IACxF,kBAAkB,EAAE,EAAE,UAAU,EAAE,cAAc,EAAS,YAAY,EAAE,UAAU,EAAE;IACnF,kBAAkB,EAAE,EAAE,UAAU,EAAE,qBAAqB,EAAE,YAAY,EAAE,UAAU,EAAE;IACnF,cAAc,EAAM,EAAE,UAAU,EAAE,MAAM,EAAiB,YAAY,EAAE,UAAU,EAAE;CACpF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Pyth oracle, CoinGecko oracle, and feed/platform ID helpers.
|
|
6
6
|
*/
|
|
7
7
|
export { classifyPriceAge, PriceAgeEnum, PRICE_AGE_THRESHOLDS, PRICE_AGES, type PriceAge, } from './price-age.js';
|
|
8
|
-
export { InMemoryPriceCache, buildCacheKey } from './price-cache.js';
|
|
8
|
+
export { InMemoryPriceCache, buildCacheKey, resolveNetwork } from './price-cache.js';
|
|
9
9
|
export { PriceNotAvailableError, CoinGeckoNotConfiguredError, ForexNotAvailableError } from './oracle-errors.js';
|
|
10
10
|
export { PythOracle } from './pyth-oracle.js';
|
|
11
11
|
export { PYTH_FEED_IDS, getFeedId, getNativeFeedId, } from './pyth-feed-ids.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/oracle/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,UAAU,EACV,KAAK,QAAQ,GACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/oracle/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,UAAU,EACV,KAAK,QAAQ,GACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAErF,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EACL,aAAa,EACb,SAAS,EACT,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,KAAK,iBAAiB,GACvB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Pyth oracle, CoinGecko oracle, and feed/platform ID helpers.
|
|
6
6
|
*/
|
|
7
7
|
export { classifyPriceAge, PriceAgeEnum, PRICE_AGE_THRESHOLDS, PRICE_AGES, } from './price-age.js';
|
|
8
|
-
export { InMemoryPriceCache, buildCacheKey } from './price-cache.js';
|
|
8
|
+
export { InMemoryPriceCache, buildCacheKey, resolveNetwork } from './price-cache.js';
|
|
9
9
|
export { PriceNotAvailableError, CoinGeckoNotConfiguredError, ForexNotAvailableError } from './oracle-errors.js';
|
|
10
10
|
export { PythOracle } from './pyth-oracle.js';
|
|
11
11
|
export { PYTH_FEED_IDS, getFeedId, getNativeFeedId, } from './pyth-feed-ids.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/oracle/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,UAAU,GAEX,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/oracle/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,UAAU,GAEX,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAErF,OAAO,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEjH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EACL,aAAa,EACb,SAAS,EACT,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GAErB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,WAAW,EAAwB,MAAM,mBAAmB,CAAC;AAEtE,4BAA4B;AAC5B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAA6B,MAAM,yBAAyB,CAAC;AACtF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAqB,MAAM,uBAAuB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oracle-chain.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/oracle/oracle-chain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAQ3D,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,OAAO,EAAE,YAAY,CAAC;IACtB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,sFAAsF;IACtF,KAAK,EAAE,kBAAkB,CAAC;IAC1B,mEAAmE;IACnE,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAqBD;;;;;GAKG;AACH,qBAAa,WAAY,YAAW,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,IAAI,EAAE,eAAe;IAOjC;;;;;;;;;;;;;;OAcG;IACG,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"oracle-chain.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/oracle/oracle-chain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7F,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAQ3D,kEAAkE;AAClE,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,OAAO,EAAE,YAAY,CAAC;IACtB,wFAAwF;IACxF,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,sFAAsF;IACtF,KAAK,EAAE,kBAAkB,CAAC;IAC1B,mEAAmE;IACnE,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC;AAqBD;;;;;GAKG;AACH,qBAAa,WAAY,YAAW,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA2B;IACpD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,IAAI,EAAE,eAAe;IAOjC;;;;;;;;;;;;;;OAcG;IACG,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC;IASnD;;;;;;;;;OASG;IACG,SAAS,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAkBpE;;;;;;;OAOG;IACG,cAAc,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAM1D;;;;OAIG;IACH,aAAa,IAAI,UAAU;IAQ3B;;;;;;;;;;;;OAYG;YACW,iBAAiB;CA4ChC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { buildCacheKey } from './price-cache.js';
|
|
1
|
+
import { buildCacheKey, resolveNetwork } from './price-cache.js';
|
|
2
2
|
import { PriceNotAvailableError } from './oracle-errors.js';
|
|
3
3
|
// ---------------------------------------------------------------------------
|
|
4
4
|
// Helpers
|
|
@@ -50,7 +50,8 @@ export class OracleChain {
|
|
|
50
50
|
* @throws PriceNotAvailableError when no source can provide a price.
|
|
51
51
|
*/
|
|
52
52
|
async getPrice(token) {
|
|
53
|
-
const
|
|
53
|
+
const network = resolveNetwork(token.chain, token.network);
|
|
54
|
+
const cacheKey = buildCacheKey(network, token.address);
|
|
54
55
|
return this.cache.getOrFetch(cacheKey, async () => {
|
|
55
56
|
return this.fetchWithFallback(token, cacheKey);
|
|
56
57
|
});
|
|
@@ -70,7 +71,8 @@ export class OracleChain {
|
|
|
70
71
|
const promises = tokens.map(async (token) => {
|
|
71
72
|
try {
|
|
72
73
|
const price = await this.getPrice(token);
|
|
73
|
-
const
|
|
74
|
+
const network = resolveNetwork(token.chain, token.network);
|
|
75
|
+
const key = buildCacheKey(network, token.address);
|
|
74
76
|
result.set(key, price);
|
|
75
77
|
}
|
|
76
78
|
catch {
|
|
@@ -89,8 +91,9 @@ export class OracleChain {
|
|
|
89
91
|
* @returns PriceInfo for the native token.
|
|
90
92
|
*/
|
|
91
93
|
async getNativePrice(chain) {
|
|
94
|
+
const network = resolveNetwork(chain);
|
|
92
95
|
const decimals = chain === 'solana' ? 9 : 18;
|
|
93
|
-
return this.getPrice({ address: 'native', decimals, chain });
|
|
96
|
+
return this.getPrice({ address: 'native', decimals, chain, network });
|
|
94
97
|
}
|
|
95
98
|
/**
|
|
96
99
|
* Get cache statistics from InMemoryPriceCache.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oracle-chain.js","sourceRoot":"","sources":["../../../src/infrastructure/oracle/oracle-chain.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"oracle-chain.js","sourceRoot":"","sources":["../../../src/infrastructure/oracle/oracle-chain.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,18 +10,34 @@
|
|
|
10
10
|
* Between TTL and staleMax, getStale() returns the old value for fallback use.
|
|
11
11
|
* - maxEntries (128 default): LRU capacity. Oldest entry evicted on overflow.
|
|
12
12
|
*/
|
|
13
|
-
import type { PriceInfo, CacheStats } from '@waiaas/core';
|
|
13
|
+
import type { PriceInfo, CacheStats, ChainType, NetworkType } from '@waiaas/core';
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
15
|
+
* Resolve NetworkType from a token's chain and optional network fields.
|
|
16
16
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
17
|
+
* Falls back to the chain's primary mainnet for backward compatibility
|
|
18
|
+
* when network is not provided.
|
|
19
19
|
*
|
|
20
|
-
* @param chain - Chain
|
|
21
|
-
* @param
|
|
22
|
-
* @returns
|
|
20
|
+
* @param chain - Chain type ('solana' | 'ethereum').
|
|
21
|
+
* @param network - Optional network type. If provided, returned as-is.
|
|
22
|
+
* @returns Resolved NetworkType.
|
|
23
23
|
*/
|
|
24
|
-
export declare function
|
|
24
|
+
export declare function resolveNetwork(chain: ChainType, network?: NetworkType): NetworkType;
|
|
25
|
+
/**
|
|
26
|
+
* Build a CAIP-19 cache key for a token.
|
|
27
|
+
*
|
|
28
|
+
* Uses nativeAssetId/tokenAssetId from @waiaas/core (Phase 231 SSoT).
|
|
29
|
+
* EVM addresses are lowercased internally by tokenAssetId().
|
|
30
|
+
* Solana base58 addresses are preserved by tokenAssetId().
|
|
31
|
+
*
|
|
32
|
+
* @param network - NetworkType (e.g., 'ethereum-mainnet', 'polygon-mainnet', 'mainnet').
|
|
33
|
+
* @param address - Token address or 'native' for native token.
|
|
34
|
+
* @returns CAIP-19 asset type URI as cache key.
|
|
35
|
+
*
|
|
36
|
+
* @example buildCacheKey('ethereum-mainnet', 'native') => 'eip155:1/slip44:60'
|
|
37
|
+
* @example buildCacheKey('polygon-mainnet', '0xAddr') => 'eip155:137/erc20:0xaddr'
|
|
38
|
+
* @example buildCacheKey('mainnet', 'EPjFWdd5...') => 'solana:5eykt.../token:EPjFWdd5...'
|
|
39
|
+
*/
|
|
40
|
+
export declare function buildCacheKey(network: NetworkType, address: string): string;
|
|
25
41
|
/**
|
|
26
42
|
* In-memory price cache with LRU eviction and cache stampede prevention.
|
|
27
43
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"price-cache.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/oracle/price-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"price-cache.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/oracle/price-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAelF;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,CAGnF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAK3E;AAED;;;;;;;GAOG;AACH,qBAAa,kBAAkB;IAa3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAd7B,8BAA8B;IAC9B,MAAM,CAAC,QAAQ,CAAC,cAAc,SAAiB;IAC/C,qCAAqC;IACrC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,SAAkB;IACtD,gCAAgC;IAChC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,OAAO;IAE1C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiC;IACvD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAyC;IAC1E,OAAO,CAAC,KAAK,CAAsD;gBAGhD,KAAK,GAAE,MAA0C,EACjD,UAAU,GAAE,MAAgD,EAC5D,UAAU,GAAE,MAA+C;IAG9E;;;;;;;;OAQG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAoBlC;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAkBvC;;;;;;;;OAQG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;IAuBxC;;;;;;;;;;OAUG;IACG,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,SAAS,CAAC;IAuBpF;;;;OAIG;IACH,QAAQ,IAAI,UAAU;IAOtB;;OAEG;IACH,KAAK,IAAI,IAAI;CAKd"}
|
|
@@ -1,18 +1,39 @@
|
|
|
1
|
+
import { nativeAssetId, tokenAssetId } from '@waiaas/core';
|
|
1
2
|
/**
|
|
2
|
-
*
|
|
3
|
+
* Resolve NetworkType from a token's chain and optional network fields.
|
|
3
4
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
5
|
+
* Falls back to the chain's primary mainnet for backward compatibility
|
|
6
|
+
* when network is not provided.
|
|
6
7
|
*
|
|
7
|
-
* @param chain - Chain
|
|
8
|
-
* @param
|
|
9
|
-
* @returns
|
|
8
|
+
* @param chain - Chain type ('solana' | 'ethereum').
|
|
9
|
+
* @param network - Optional network type. If provided, returned as-is.
|
|
10
|
+
* @returns Resolved NetworkType.
|
|
10
11
|
*/
|
|
11
|
-
export function
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
export function resolveNetwork(chain, network) {
|
|
13
|
+
if (network)
|
|
14
|
+
return network;
|
|
15
|
+
return chain === 'solana' ? 'mainnet' : 'ethereum-mainnet';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Build a CAIP-19 cache key for a token.
|
|
19
|
+
*
|
|
20
|
+
* Uses nativeAssetId/tokenAssetId from @waiaas/core (Phase 231 SSoT).
|
|
21
|
+
* EVM addresses are lowercased internally by tokenAssetId().
|
|
22
|
+
* Solana base58 addresses are preserved by tokenAssetId().
|
|
23
|
+
*
|
|
24
|
+
* @param network - NetworkType (e.g., 'ethereum-mainnet', 'polygon-mainnet', 'mainnet').
|
|
25
|
+
* @param address - Token address or 'native' for native token.
|
|
26
|
+
* @returns CAIP-19 asset type URI as cache key.
|
|
27
|
+
*
|
|
28
|
+
* @example buildCacheKey('ethereum-mainnet', 'native') => 'eip155:1/slip44:60'
|
|
29
|
+
* @example buildCacheKey('polygon-mainnet', '0xAddr') => 'eip155:137/erc20:0xaddr'
|
|
30
|
+
* @example buildCacheKey('mainnet', 'EPjFWdd5...') => 'solana:5eykt.../token:EPjFWdd5...'
|
|
31
|
+
*/
|
|
32
|
+
export function buildCacheKey(network, address) {
|
|
33
|
+
if (address === 'native') {
|
|
34
|
+
return nativeAssetId(network);
|
|
35
|
+
}
|
|
36
|
+
return tokenAssetId(network, address);
|
|
16
37
|
}
|
|
17
38
|
/**
|
|
18
39
|
* In-memory price cache with LRU eviction and cache stampede prevention.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"price-cache.js","sourceRoot":"","sources":["../../../src/infrastructure/oracle/price-cache.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"price-cache.js","sourceRoot":"","sources":["../../../src/infrastructure/oracle/price-cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pyth Hermes feed ID hardcoded mappings.
|
|
3
3
|
*
|
|
4
|
-
* Maps cache keys
|
|
4
|
+
* Maps CAIP-19 cache keys to Pyth price feed IDs (hex, no 0x prefix).
|
|
5
|
+
* Keys are generated programmatically via nativeAssetId/tokenAssetId
|
|
6
|
+
* to ensure consistency with buildCacheKey() output.
|
|
7
|
+
*
|
|
5
8
|
* These feed IDs are chain-agnostic -- Pyth uses the same feed for SOL/USD
|
|
6
9
|
* regardless of whether the query comes from Solana or EVM context.
|
|
7
10
|
*
|
|
@@ -11,21 +14,21 @@
|
|
|
11
14
|
*
|
|
12
15
|
* Feed IDs verified via Pyth Hermes /v2/price_feeds API (2026-02-15).
|
|
13
16
|
*/
|
|
14
|
-
import type {
|
|
15
|
-
/** Hardcoded Pyth price feed IDs for major tokens. */
|
|
17
|
+
import type { NetworkType } from '@waiaas/core';
|
|
18
|
+
/** Hardcoded Pyth price feed IDs for major tokens (keyed by CAIP-19 asset type). */
|
|
16
19
|
export declare const PYTH_FEED_IDS: ReadonlyMap<string, string>;
|
|
17
20
|
/**
|
|
18
21
|
* Look up a Pyth feed ID by cache key.
|
|
19
22
|
*
|
|
20
|
-
* @param cacheKey -
|
|
23
|
+
* @param cacheKey - CAIP-19 cache key (e.g. 'solana:5eykt.../slip44:501').
|
|
21
24
|
* @returns Feed ID hex string (no 0x prefix) or undefined if not registered.
|
|
22
25
|
*/
|
|
23
26
|
export declare function getFeedId(cacheKey: string): string | undefined;
|
|
24
27
|
/**
|
|
25
|
-
* Get the Pyth feed ID for a
|
|
28
|
+
* Get the Pyth feed ID for a network's native token.
|
|
26
29
|
*
|
|
27
|
-
* @param
|
|
28
|
-
* @returns Feed ID hex string or undefined if
|
|
30
|
+
* @param network - Network type (e.g., 'mainnet' for Solana, 'ethereum-mainnet' for Ethereum).
|
|
31
|
+
* @returns Feed ID hex string or undefined if network not supported.
|
|
29
32
|
*/
|
|
30
|
-
export declare function getNativeFeedId(
|
|
33
|
+
export declare function getNativeFeedId(network: NetworkType): string | undefined;
|
|
31
34
|
//# sourceMappingURL=pyth-feed-ids.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pyth-feed-ids.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/oracle/pyth-feed-ids.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"pyth-feed-ids.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/oracle/pyth-feed-ids.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAOhD,oFAAoF;AACpF,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAQpD,CAAC;AAgBH;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE9D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAExE"}
|