diff --git a/.github/scripts/data/baseline.json b/.github/scripts/data/baseline.json index 004d3a6050b..e28a4550423 100644 --- a/.github/scripts/data/baseline.json +++ b/.github/scripts/data/baseline.json @@ -1,5 +1,5 @@ { - "timestamp": "2026-05-08T18:30:27Z", + "timestamp": "2026-05-08T19:40:17Z", "knownIds": [ "aptos-apt-usd", "aptos-btc-usd", @@ -242,6 +242,9 @@ "arbitrum-dot-usd-premium-prod", "arbitrum-dpi-usd", "arbitrum-drift-usd-refprice-mainnet-production", + "arbitrum-driv-usd-streams-extendedhoursequityprice-mainnet-production", + "arbitrum-driv-usd-streams-overnighthoursequityprice-mainnet-production", + "arbitrum-driv-usd-streams-regularhoursequityprice-mainnet-production", "arbitrum-dusk-usd-refprice-mainnet-production", "arbitrum-dydx-usd-refprice-ds-premium-global-003-prod", "arbitrum-dym-usd-refprice-mainnet-production", @@ -329,6 +332,7 @@ "arbitrum-gmt-usd-refprice-mainnet-production", "arbitrum-gmx-usd", "arbitrum-gmx-usd-premium-prod", + "arbitrum-gmx-usd-streams-dexprice-mainnet-production", "arbitrum-gns-usd", "arbitrum-gns-usd-refprice-mainnet-production", "arbitrum-goat-usd-premium-prod-v03", @@ -3047,6 +3051,10 @@ "feedID": "arbitrum-mainnet-0x00032afb9aa32c936f8c2677b408baf1368634729d54265cf14530bcaafb02d7", "shutdownDate": "February 2026" }, + { + "feedID": "arbitrum-mainnet-0x00033a310e5f25a0720f4956a024f4a7151315c701e7ebb8abb17bf0bb4fc377", + "shutdownDate": "May 20th, 2026" + }, { "feedID": "arbitrum-mainnet-0x0003b4ec54949f46ad9565d0636cfd3b058dcfd4969a030efd9c52e9a82cff7f", "shutdownDate": "April 29th, 2026" @@ -3055,6 +3063,18 @@ "feedID": "arbitrum-mainnet-0x0008d9a039c26729cae90134d55a78ac09efd8cc53bc6493ed90da1f0938c884", "shutdownDate": "December 2025" }, + { + "feedID": "arbitrum-mainnet-0x000b4824f581b99b463e05947062af1cb923b37e78f5b5e6c03cd12e8d73d961", + "shutdownDate": "May 20th, 2026" + }, + { + "feedID": "arbitrum-mainnet-0x000ba2a3b2710914e13b9cf3764c4d7dd1f19cdd0caf132097aa1e67919db376", + "shutdownDate": "May 20th, 2026" + }, + { + "feedID": "arbitrum-mainnet-0x000bac8c6d14d2bbe242bb207c638f5e90a867fce57c70acb321a64e6bae0787", + "shutdownDate": "May 20th, 2026" + }, { "feedID": "arbitrum-testnet-0x00034f75735eb98cc1044f93e356355145e1e90975e2b05568e6127ac4b335ca", "shutdownDate": "February 2026" @@ -3063,6 +3083,10 @@ "feedID": "arbitrum-testnet-0x00035c29e5a1c006269dd12f836db9cd0d5497a49ca4d7f8121ba475e6ba344c", "shutdownDate": "February 2026" }, + { + "feedID": "arbitrum-testnet-0x0003851316e55c5ebf8066ff04a9e44e9cb57476d2d16330c150acacda76a614", + "shutdownDate": "May 20th, 2026" + }, { "feedID": "arbitrum-testnet-0x0003cc49c321ba2c57b824c677472e23779afe34d4e62558b23471d1b49edfff", "shutdownDate": "March 2026" @@ -3078,6 +3102,18 @@ { "feedID": "arbitrum-testnet-0x0008c67cbb3c0ac1daf0d5c716a1300b86094088444e990bad2f7b4fc3ad5a2e", "shutdownDate": "December 2025" + }, + { + "feedID": "arbitrum-testnet-0x000b67e878094c60b4fd093f1ab6792cccb93d88cf3f50220e83bbc691500aef", + "shutdownDate": "May 20th, 2026" + }, + { + "feedID": "arbitrum-testnet-0x000b8817c0bde2e222f6aba3ebf37ee717013c31406e9efb735e8a0e93a73ab0", + "shutdownDate": "May 20th, 2026" + }, + { + "feedID": "arbitrum-testnet-0x000ba1fd3836234e882ab86c2f7337223b2b85ef4f7beeae3386ae910786d910", + "shutdownDate": "May 20th, 2026" } ] } diff --git a/public/changelog.json b/public/changelog.json index 28376c0e9c2..a7353520de2 100644 --- a/public/changelog.json +++ b/public/changelog.json @@ -402,6 +402,48 @@ } }, "data": [ + { + "category": "integration", + "date": "2026-05-08", + "description": "The following Data Streams are scheduled for deprecation on May 20th, 2026. See [Deprecating Data Streams](https://docs.chain.link/data-streams/deprecating-streams) for shutdown dates and the latest status:", + "relatedNetworks": ["arbitrum"], + "relatedTokens": [ + { + "assetName": "Global X Autonomous & EV ETF (arbitrum mainnet)", + "baseAsset": "DRIV", + "quoteAsset": "USD", + "network": "arbitrum", + "url": "https://docs.chain.link/data-streams/deprecating-streams?page=1&search=DRIV", + "iconUrl": "https://d2f70xi62kby8n.cloudfront.net/tokens/driv.webp" + }, + { + "assetName": "Global X Autonomous & EV ETF (arbitrum testnet)", + "baseAsset": "DRIV", + "quoteAsset": "USD", + "network": "arbitrum", + "url": "https://docs.chain.link/data-streams/deprecating-streams?testnetSearch=DRIV&testnetPage=1", + "iconUrl": "https://d2f70xi62kby8n.cloudfront.net/tokens/driv.webp" + }, + { + "assetName": "GMX (arbitrum mainnet)", + "baseAsset": "GMX", + "quoteAsset": "USD", + "network": "arbitrum", + "url": "https://docs.chain.link/data-streams/deprecating-streams?page=1&search=GMX", + "iconUrl": "https://d2f70xi62kby8n.cloudfront.net/tokens/gmx.webp" + }, + { + "assetName": "GMX (arbitrum testnet)", + "baseAsset": "GMX", + "quoteAsset": "USD", + "network": "arbitrum", + "url": "https://docs.chain.link/data-streams/deprecating-streams?testnetSearch=GMX&testnetPage=1", + "iconUrl": "https://d2f70xi62kby8n.cloudfront.net/tokens/gmx.webp" + } + ], + "title": "Streams scheduled for deprecation", + "topic": "Data Streams" + }, { "category": "integration", "date": "2026-05-08", diff --git a/src/scripts/data/detect-new-data.ts b/src/scripts/data/detect-new-data.ts index b5ba3d7f997..a8bbef65e8b 100644 --- a/src/scripts/data/detect-new-data.ts +++ b/src/scripts/data/detect-new-data.ts @@ -85,6 +85,8 @@ interface DataItem { productSubType?: string deliveryChannelCode?: string feedType?: string + /** RDD docs.feedCategory (e.g. "deprecating", "new") */ + feedCategory?: string network: string networkType?: "mainnet" | "testnet" assetName?: string @@ -262,6 +264,39 @@ function isDeprecatingDataStream(item: DataItem): item is DataItem & { shutdownD return !!item.shutdownDate && item.deliveryChannelCode === "DS" && !!item.streamID } +/** RDD marks shutdown / deprecating streams; those must not become "Added support" changelog rows when unhidden. */ +function shouldExcludeFromNewlyFoundIntegrations(item: DataItem): boolean { + if ((item.feedCategory || "").toLowerCase() === "deprecating") { + return true + } + if (item.shutdownDate && item.deliveryChannelCode === "DS") { + return true + } + if (isDeprecatingDataFeed(item)) { + return true + } + return false +} + +/** Changelog list labels: same base asset on mainnet vs testnet needs visible distinction. */ +function withStreamDeprecationDisplayName(item: DataItem, assetName: string): string { + if (item.networkType === "testnet") { + return `${assetName} (${item.network} testnet)` + } + if (item.networkType === "mainnet") { + return `${assetName} (${item.network} mainnet)` + } + return assetName +} + +function toDeprecatingStreamOutputItem(item: DataItem & { shutdownDate: string }) { + const base = toOutputItem(item, buildDeprecatingStreamUrl) + return { + ...base, + assetName: withStreamDeprecationDisplayName(item, base.assetName || ""), + } +} + /** * Main function to detect new data feeds across all configured networks * This function: @@ -312,7 +347,7 @@ async function detectNewData(): Promise { // 3) Identify newly added items (not in baseline) const newlyFound: DataItem[] = [] for (const item of allItems) { - if (!item.hidden && !knownIds.has(item.feedID)) { + if (!item.hidden && !knownIds.has(item.feedID) && !shouldExcludeFromNewlyFoundIntegrations(item)) { newlyFound.push(item) } } @@ -428,17 +463,17 @@ async function detectNewData(): Promise { previous, current: toOutputItem(current, buildDeprecatingFeedUrl), })), - newlyDeprecatedStreams: newlyDeprecatedStreams.map((item) => toOutputItem(item, buildDeprecatingStreamUrl)), + newlyDeprecatedStreams: newlyDeprecatedStreams.map((item) => toDeprecatingStreamOutputItem(item)), resolvedDeprecatedStreams, changedDeprecatedStreams: changedDeprecatedStreams.map(({ previous, current }) => ({ previous, - current: toOutputItem(current, buildDeprecatingStreamUrl), + current: toDeprecatingStreamOutputItem(current), })), currentDeprecatedItems: deprecationBaselineInitialized ? currentDeprecatedItems.map((item) => toOutputItem(item, buildDeprecatingFeedUrl)) : undefined, currentDeprecatedStreams: streamDeprecationBaselineInitialized - ? currentDeprecatedStreams.map((item) => toOutputItem(item, buildDeprecatingStreamUrl)) + ? currentDeprecatedStreams.map((item) => toDeprecatingStreamOutputItem(item)) : undefined, } @@ -568,6 +603,7 @@ function convertToDataItem(obj: any, network: string): DataItem | null { productType, productSubType, deliveryChannelCode: deliveryChannel, + feedCategory: typeof obj.docs?.feedCategory === "string" ? obj.docs.feedCategory : undefined, network, assetName: topLevelAssetName, baseAsset: baseAsset || (isRefMacro ? topLevelAssetName : undefined), @@ -605,6 +641,7 @@ function convertToStreamDataItem(obj: any, network: string, networkType: "mainne productSubType: obj.docs?.productSubType || "", deliveryChannelCode: obj.docs?.deliveryChannelCode || "DS", feedType: obj.docs?.feedType || obj.feedType || "", + feedCategory: typeof obj.docs?.feedCategory === "string" ? obj.docs.feedCategory : undefined, network, networkType, assetName,