System options
A loja é configurada pelas system options: nome, cores, logo, módulos, meios de pagamento, SEO e outras preferências do tenant. O backend expõe esse pacote em GET /system/info/:context.
O Cinderace Core entrega isso como sdk.systemOptions, com cache em memória, cache persistente opcional e tipos derivados do contrato real do backend.
Primeiro acesso
Seção intitulada “Primeiro acesso”const options = await sdk.systemOptions.get();
console.log(options.labels?.siteName);console.log(options.colors?.primary);console.log(options.seo?.description);A primeira chamada busca no servidor. As seguintes reutilizam o valor em cache até o TTL expirar. O objeto retornado é compartilhado com o cache, então trate-o como somente leitura.
Contextos
Seção intitulada “Contextos”const site = await sdk.systemOptions.get("site");const drawer = await sdk.systemOptions.get("drawer");Os contextos disponíveis são site, drawer, admin, resellers e app-builder. O padrão é site, e você pode trocar na instância:
import { LMSdk } from "@luckymaker/sdk-core";
const sdk = new LMSdk({ baseUrl: "api.sualoja.com.br", systemOptions: { context: "site" }});- Memória: sempre ativo, por instância da SDK.
- Persistente:
localStorageno browser, isolado porbaseUrl. Usestorage: falsepara desligar. - TTL padrão: 60 segundos, alinhado ao cache do backend.
- Requisições simultâneas: compartilham a mesma chamada, sem duplicar tráfego.
import { LMSdk } from "@luckymaker/sdk-core";
const sdk = new LMSdk({ baseUrl: "api.sualoja.com.br", systemOptions: { ttl: 5 * 60_000, storage: false }});Para usar outro storage, implemente SystemOptionsStorage:
import { LMSdk } from "@luckymaker/sdk-core";
const sdk = new LMSdk({ baseUrl: "api.sualoja.com.br", systemOptions: { storage: { read: (key) => sessionStorage.getItem(key), write: (key, value) => sessionStorage.setItem(key, value), remove: (key) => sessionStorage.removeItem(key) } }});Atualizar e inspecionar
Seção intitulada “Atualizar e inspecionar”await sdk.systemOptions.refresh(); // ignora o cache e busca de novosdk.systemOptions.peek(); // último valor em memória, sem Promiseawait sdk.systemOptions.clear(); // limpa o contexto padrãoawait sdk.systemOptions.clearAll();refresh() é útil depois de uma ação que altera a configuração da loja. O peek() serve para ler o valor já carregado em um componente síncrono.
Features e variáveis
Seção intitulada “Features e variáveis”const features = await sdk.systemOptions.features();const vars = await sdk.systemOptions.vars(["services.zendesk.enabled"]);features() e vars() também usam cache em memória, com TTLs próprios:
import { LMSdk } from "@luckymaker/sdk-core";
const sdk = new LMSdk({ baseUrl: "api.sualoja.com.br", systemOptions: { featuresTtl: 30_000, varsTtl: 60_000 }});O retorno de get() é FrontendWhitelabel:
import type { FrontendWhitelabel } from "@luckymaker/sdk-core";
const options: FrontendWhitelabel = await sdk.systemOptions.get();O tipo acompanha o SystemOptions do backend, então campos como labels.siteName, colors.primary e seo.description aparecem com o formato real — e o retorno é parcial, porque cada contexto expõe apenas as opções públicas que se aplicam a ele.