You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@decocms/apps-start/website/loaders/secret.ts não decripta secrets — apenas lê process.env[name] ou retorna o encrypted hex as-is. Todos os inits/clients que precisam de credenciais (magento, vtex, algolia que vão sendo portados) reimplementam a mesma função resolveSecret local que também só lê env var.
Enquanto isso, @decocms/start/sdk/crypto.ts já tem resolveSecret(value, envVarName) e decryptSecret(encryptedHex) que:
Decriptam AES-CBC via DECO_CRYPTO_KEY (mesma chave do deco-cx/apps Fresh)
Cacheam o resultado em memória
Fazem fallback pra env var quando encrypted falha
Resultado prático: sites que não setam env var pra cada secret têm o site quebrado em prod, mesmo tendo o encrypted válido no bloco do CMS.
Decripta de fato — decryptFromHex usa DECO_CRYPTO_KEY.
@decocms/apps-start — website/loaders/secret.ts:
constgetSecret=(props: Props): string|null=>{if(name&&process.env[name]!==undefined)returnprocess.env[name]!;// ...if(process.env.NODE_ENV!=="production")console.warn(...);returnencrypted;// ← devolve o hex sem decriptar!};
Só lê env var. Devolve o hex sem decriptar (o consumidor não tem como saber que é encrypted e não plaintext).
@decocms/start/sdk/crypto.ts — resolveSecret:
exportasyncfunctionresolveSecret(value: unknown,envVarName?: string): Promise<string|null>{if(typeofvalue==="string"&&value.length>0)returnvalue;if(value&&typeofvalue==="object"){if(typeofobj.get==="function"){/* old Secret loader pattern */}if(typeofobj.encrypted==="string"){constdecrypted=awaitdecryptSecret(obj.encrypted);if(decrypted)returndecrypted;}}if(envVarName)returnprocess.env[envVarName]??null;returnnull;}
Faz tudo certo — decripta, faz fallback, cacheia.
Proposta
Substituir website/loaders/secret.ts em apps-start por uma versão que chama resolveSecret do framework e expõe a interface Secret { get() } por compat com call sites legados.
Migrar magento/client.ts:resolveSecret interno pra delegar pro framework — mesma função, com decrypt grátis.
(Opcional) Remover website/actions/secrets/encrypt.ts do roadmap de port — admin de criação de segredos roda no painel decocms, não precisa estar no client storefront.
Impacto
Desbloqueia sites em CF Workers que dependem só do DECO_CRYPTO_KEY env var (já setado nos deploys do decocms) sem precisar setar cada secret name individualmente. Em granadobr-tanstack: MAGENTO_API_KEY, ORIGIN_HEADER, ADMIN_KEY (algolia) — todos viriam decriptados automaticamente.
Resumo
@decocms/apps-start/website/loaders/secret.tsnão decripta secrets — apenas lêprocess.env[name]ou retorna oencryptedhex as-is. Todos os inits/clients que precisam de credenciais (magento, vtex, algolia que vão sendo portados) reimplementam a mesma funçãoresolveSecretlocal que também só lê env var.Enquanto isso,
@decocms/start/sdk/crypto.tsjá temresolveSecret(value, envVarName)edecryptSecret(encryptedHex)que:DECO_CRYPTO_KEY(mesma chave do deco-cx/apps Fresh)encryptedfalhaResultado prático: sites que não setam env var pra cada secret têm o site quebrado em prod, mesmo tendo o
encryptedválido no bloco do CMS.Comparação
deco-cx/apps (Fresh/Deno) —
website/loaders/secret.ts:Decripta de fato —
decryptFromHexusaDECO_CRYPTO_KEY.@decocms/apps-start —
website/loaders/secret.ts:Só lê env var. Devolve o hex sem decriptar (o consumidor não tem como saber que é encrypted e não plaintext).
@decocms/start/sdk/crypto.ts—resolveSecret:Faz tudo certo — decripta, faz fallback, cacheia.
Proposta
website/loaders/secret.tsem apps-start por uma versão que chamaresolveSecretdo framework e expõe a interfaceSecret { get() }por compat com call sites legados.magento/client.ts:resolveSecretinterno pra delegar pro framework — mesma função, com decrypt grátis.algolia/client.ts(PR feat(algolia)!: migrate to algoliasearch v5 for CF Workers compat #69 / feat(algolia): initial scaffold port from deco-cx/apps #66 follow-up).website/actions/secrets/encrypt.tsdo roadmap de port — admin de criação de segredos roda no painel decocms, não precisa estar no client storefront.Impacto
Desbloqueia sites em CF Workers que dependem só do
DECO_CRYPTO_KEYenv var (já setado nos deploys do decocms) sem precisar setar cada secret name individualmente. Em granadobr-tanstack:MAGENTO_API_KEY,ORIGIN_HEADER,ADMIN_KEY(algolia) — todos viriam decriptados automaticamente.🤖 Generated with Claude Code