fix: accept compressed Robot revision ETags
This commit is contained in:
@@ -11,7 +11,7 @@ const MAX_RESPONSE_BYTES = 256 * 1024;
|
||||
const DEFAULT_TIMEOUT_MS = 15_000;
|
||||
const LOCAL_ROOT = '/api/works/ai-hardware';
|
||||
const UPSTREAM_ROOT = '/api/ai-hardware';
|
||||
const STRONG_REVISION = /^"(0|[1-9]\d*)"$/;
|
||||
const REVISION_ETAG = /^(?:W\/)?"(0|[1-9]\d*)"$/;
|
||||
const LOCAL_ID = /^[A-Za-z0-9][A-Za-z0-9_-]{0,35}$/;
|
||||
const OPERATION_ID = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
||||
const MAX_RETRY_AFTER_SECONDS = 2;
|
||||
@@ -285,9 +285,9 @@ function validateConfigUpdate(body: Record<string, unknown>): Record<string, unk
|
||||
return output;
|
||||
}
|
||||
|
||||
function strongRevisionFrom(response: Response): number {
|
||||
function revisionFromEtag(response: Response): number {
|
||||
const etag = response.headers.get('etag');
|
||||
const match = etag?.match(STRONG_REVISION);
|
||||
const match = etag?.match(REVISION_ETAG);
|
||||
if (!match) throw new SafeRouteError(502, 'AI_HARDWARE_INVALID_ETAG', 'AI hardware service returned an invalid revision', true);
|
||||
const revision = Number(match[1]);
|
||||
if (!Number.isSafeInteger(revision)) throw new SafeRouteError(502, 'AI_HARDWARE_INVALID_ETAG', 'AI hardware service returned an invalid revision', true);
|
||||
@@ -559,7 +559,7 @@ export function createAiHardwareRouteHandler(dependencies: AiHardwareRouteDepend
|
||||
}
|
||||
let revision: number | undefined;
|
||||
try {
|
||||
revision = requireEtag ? strongRevisionFrom(response) : undefined;
|
||||
revision = requireEtag ? revisionFromEtag(response) : undefined;
|
||||
} catch (error) {
|
||||
await cancelTimedResponse(activeCall);
|
||||
throw error;
|
||||
|
||||
Reference in New Issue
Block a user