From 72ef99d2115e536822afaf5f04e2fa8c63f91c4e Mon Sep 17 00:00:00 2001 From: nimbold <11913706+nimbold@users.noreply.github.com> Date: Mon, 8 Jun 2026 05:46:24 +0330 Subject: [PATCH] refactor: add backward compatibility support for extension tokens --- Sources/Firelink/LocalExtensionServer.swift | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Sources/Firelink/LocalExtensionServer.swift b/Sources/Firelink/LocalExtensionServer.swift index 4dec076..5dec809 100644 --- a/Sources/Firelink/LocalExtensionServer.swift +++ b/Sources/Firelink/LocalExtensionServer.swift @@ -8,7 +8,15 @@ final class LocalExtensionServer: @unchecked Sendable { static let maxRequestBytes = 128 * 1024 static let maxURLCount = 200 static let extensionRequestHeader = "x-firelink-extension" - static let extensionRequestToken = "firelink-extension-v1" + + // IMPORTANT(Backward Compatibility): + // Extension updates on Mozilla/Chrome stores can take several days to be approved. + // Therefore, we MUST NOT introduce breaking changes to the LocalExtensionServer API + // without maintaining backward compatibility for older extensions. + // If you need to update the API (e.g., changing the payload structure), add the new + // token here and handle both versions in `processRequest`. + static let supportedExtensionTokens = Set(["firelink-extension-v1"]) + static let allowedSchemes = Set(["http", "https", "ftp", "sftp"]) } @@ -138,7 +146,8 @@ final class LocalExtensionServer: @unchecked Sendable { return .methodNotAllowed } - guard request.header(named: Constants.extensionRequestHeader) == Constants.extensionRequestToken else { + guard let token = request.header(named: Constants.extensionRequestHeader), + Constants.supportedExtensionTokens.contains(token) else { return .forbidden }