Skip to content

Commit 12a2461

Browse files
authored
fix: URL generation with special path patterns (#2634)
1 parent 3156dc5 commit 12a2461

File tree

2 files changed

+53
-22
lines changed

2 files changed

+53
-22
lines changed

.github/scripts/data/detect-data.sh

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -164,15 +164,13 @@ node <<EOF
164164
// === Build relatedTokens for FEEDS
165165
function buildDataFeedTokens(feedItems) {
166166
return feedItems.map(i => {
167-
// The baseAsset is guaranteed if the item passed the TS checks
168167
const baseLower = i.baseAsset.toLowerCase();
169168
return {
170169
assetName: i.assetName,
171170
baseAsset: i.baseAsset,
172-
// data feeds keep the quoteAsset if it exists
173171
quoteAsset: i.quoteAsset || "",
174172
network: i.network,
175-
url: buildFeedUrl(i),
173+
url: i.url,
176174
iconUrl: \`https://d2f70xi62kby8n.cloudfront.net/tokens/\${baseLower}.webp\`
177175
};
178176
}).sort((a, b) => a.assetName.localeCompare(b.assetName));
@@ -185,16 +183,14 @@ node <<EOF
185183
return {
186184
assetName: i.assetName,
187185
baseAsset: i.baseAsset,
188-
// streams keep the quoteAsset if present
189186
quoteAsset: i.quoteAsset || "",
190-
url: buildFeedUrl(i),
187+
url: i.url,
191188
iconUrl: \`https://d2f70xi62kby8n.cloudfront.net/tokens/\${baseLower}.webp\`
192189
};
193190
}).sort((a, b) => a.assetName.localeCompare(b.assetName));
194191
}
195192
196193
// === Build relatedTokens for SMARTDATA
197-
// no quoteAsset, but we *do* store productTypeCode
198194
function buildSmartDataTokens(smartItems) {
199195
return smartItems.map(i => {
200196
const baseLower = i.baseAsset.toLowerCase();
@@ -203,24 +199,12 @@ node <<EOF
203199
baseAsset: i.baseAsset,
204200
network: i.network,
205201
productTypeCode: i.productTypeCode,
206-
url: buildFeedUrl(i),
202+
url: i.url,
207203
iconUrl: \`https://d2f70xi62kby8n.cloudfront.net/tokens/\${baseLower}.webp\`
208204
};
209205
}).sort((a, b) => a.assetName.localeCompare(b.assetName));
210206
}
211207
212-
function buildFeedUrl(item) {
213-
if (item.deliveryChannelCode === 'DS') {
214-
// data-stream
215-
const base = (item.baseAsset || 'BASE').toLowerCase();
216-
const quote = (item.quoteAsset || 'QUOTE').toLowerCase();
217-
return \`https://data.chain.link/streams/\${base}-\${quote}\`;
218-
}
219-
// else => data feed or smartdata => "https://data.chain.link/feeds/<network>/mainnet/<suffix>"
220-
const feedSuffix = item.feedID.split('-').slice(1).join('-');
221-
return \`https://data.chain.link/feeds/\${item.network}/mainnet/\${feedSuffix}\`;
222-
}
223-
224208
// === Now build each group
225209
const dataFeedsTokens = buildDataFeedTokens(dataFeeds);
226210
const dataStreamsTokens = buildDataStreamTokens(dataStreams);

src/scripts/data/detect-new-data.ts

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,62 @@ function buildIconUrl(baseAsset: string): string {
8282
* @returns URL to the feed's data page
8383
*/
8484
function buildFeedUrl(item: DataItem): string {
85+
// Special case for TRON network - redirect to docs.chain.link
86+
if (item.network === "tron") {
87+
const searchParam = (item.baseAsset || "").toLowerCase()
88+
return `https://docs.chain.link/data-feeds/price-feeds/addresses?page=1&network=tron&search=${searchParam}`
89+
}
90+
91+
// For data streams
8592
if (item.deliveryChannelCode === "DS") {
8693
const base = (item.baseAsset || "BASE").toLowerCase()
8794
const quote = (item.quoteAsset || "QUOTE").toLowerCase()
8895
return `https://data.chain.link/streams/${base}-${quote}`
8996
}
90-
// otherwise, it's "https://data.chain.link/feeds/<network>/mainnet/<suffix>"
91-
const feedSuffix = item.feedID.split("-").slice(1).join("-")
97+
98+
// Network name mapping for URL paths
99+
const NETWORK_NAME_MAPPING: Record<string, string> = {
100+
"bnb-chain": "bsc",
101+
"gnosis-chain": "xdai",
102+
polygonzkevm: "polygon-zkevm",
103+
// Add more mappings as needed
104+
}
105+
106+
// Networks that use their own name instead of "mainnet" in URLs
107+
const NETWORK_PATH_EXCEPTIONS: Record<string, string> = {
108+
sonic: "sonic",
109+
base: "base",
110+
hedera: "hedera",
111+
mantle: "mantle",
112+
polygonzkevm: "polygon-zkevm",
113+
ronin: "ronin",
114+
soneium: "soneium",
115+
xlayer: "xlayer",
116+
zksync: "zksync",
117+
// Add more exceptions as they're discovered
118+
}
119+
120+
// Map the network name if needed
121+
const networkUrlPath = NETWORK_NAME_MAPPING[item.network] || item.network
122+
123+
// Process the feed suffix - handle special cases
124+
let feedSuffix = ""
125+
const feedParts = item.feedID.split("-")
126+
127+
// For BNB Chain feeds, if the first part after network is "chain", remove it
128+
if (item.network === "bnb-chain" && feedParts.length > 1 && feedParts[1] === "chain") {
129+
feedSuffix = feedParts.slice(2).join("-")
130+
} else {
131+
feedSuffix = feedParts.slice(1).join("-")
132+
}
133+
134+
// Remove any spaces for URL safety
92135
const safeSuffix = feedSuffix.replace(/\s/g, "%20")
93-
return `https://data.chain.link/feeds/${item.network}/mainnet/${safeSuffix}`
136+
137+
// Use the network-specific path or fall back to 'mainnet'
138+
const networkPath = NETWORK_PATH_EXCEPTIONS[item.network] || "mainnet"
139+
140+
return `https://data.chain.link/feeds/${networkUrlPath}/${networkPath}/${safeSuffix}`
94141
}
95142

96143
/**

0 commit comments

Comments
 (0)