Ir para o conteúdo
decodecodeveloper docs
Storefront → Blocks → Referência adicional

SDK utilities

Verified SDK examples for encoding, redirect maps, server timing and connection-closed retries.

Estes exemplos complementam Packages and exports e foram verificados no código instalado de @decocms/blocks@7.43.0 e no snapshot de origem do PR #585. Para componentes, scripts e detecção de dispositivos, use Component patterns.

Base64 encoding

encodeBase64 accepts a string, ArrayBuffer, or Uint8Array; decodeBase64 returns bytes. Decode the bytes with TextDecoder when you need text.

import { encodeBase64, decodeBase64 } from "@decocms/blocks/sdk/encoding";
 
const encoded = encodeBase64("storefront");
const text = new TextDecoder().decode(decodeBase64(encoded));

Redirect maps

parseRedirectsCsv reads comma-separated from,to[,type] rows. addRedirects takes a redirect map and the parsed entries. Build the map from the request's current content so a content reload does not leave a stale map captured at module scope.

import { loadRedirects, parseRedirectsCsv, addRedirects, matchRedirect } from "@decocms/blocks/sdk/redirects";
 
export function findRedirect(pathname: string, blocks: Record<string, unknown>, csv: string) {
  const map = loadRedirects(blocks);
  addRedirects(map, parseRedirectsCsv(csv));
  return matchRedirect(pathname, map);
}

The parser uses 301 for permanent or 301, and 302 otherwise. For content-managed CSV redirects, use the generated-content workflow.

Server timing

createServerTimings creates a collector. start returns a completion callback; record accepts an already measured duration; toHeader serializes the entries.

import { createServerTimings } from "@decocms/blocks/sdk/serverTimings";
 
export async function timedResponse(run: () => Promise<Response>) {
  const timings = createServerTimings();
  const end = timings.start("upstream");
  const response = await run();
  end();
  const result = new Response(response.body, { status: response.status, headers: response.headers });
  result.headers.set("Server-Timing", timings.toHeader());
  return result;
}

Connection-closed retries

retryExceptionOr500().execute(fn) retries errors whose message contains connection closed before message completed. It makes at most three attempts, with delays of 100 ms and 200 ms between retries. Despite the helper's name, it does not inspect an HTTP 500 response: a returned response is a successful result. Handle response statuses in application code.

import { retryExceptionOr500 } from "@decocms/blocks/sdk/retry";
 
export function fetchWithConnectionRetry(url: string) {
  return retryExceptionOr500().execute(() => fetch(url));
}

Verified modules: encoding, redirects, server timings, retry. Reviewed 2026-10-05.