forlogic-core 2.3.0 → 2.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.note/memory/patterns/dynamic-supabase-config.md +2 -2
- package/.note/memory/patterns/environment-detection-logic.md +21 -15
- package/README.md +1 -1
- package/dist/action-plans/config/environments.d.ts +18 -3
- package/dist/action-plans/config/index.d.ts +3 -3
- package/dist/action-plans/index.d.ts +1 -1
- package/dist/audit-trail/config/environments.d.ts +18 -3
- package/dist/audit-trail/config/index.d.ts +3 -3
- package/dist/audit-trail/index.d.ts +1 -1
- package/dist/config/environments.d.ts +18 -3
- package/dist/config/index.d.ts +3 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.esm.js +1 -1
- package/dist/index.js +1 -1
- package/dist/leadership/config/environments.d.ts +18 -3
- package/dist/leadership/config/index.d.ts +3 -3
- package/dist/leadership/index.d.ts +1 -1
- package/dist/leadership/index.esm.js +1 -1
- package/dist/leadership/index.js +1 -1
- package/dist/places/config/environments.d.ts +18 -3
- package/dist/places/config/index.d.ts +3 -3
- package/dist/places/index.d.ts +1 -1
- package/dist/places/index.esm.js +1 -1
- package/dist/places/index.js +1 -1
- package/dist/sign/config/environments.d.ts +18 -3
- package/dist/sign/config/index.d.ts +3 -3
- package/dist/sign/index.d.ts +1 -1
- package/dist/sign/index.esm.js +1 -1
- package/dist/sign/index.js +1 -1
- package/dist/vite/index.esm.js +24 -1
- package/dist/vite/index.js +24 -0
- package/docs/WORKSPACE_KNOWLEDGE.md +1 -1
- package/docs/design-system/patterns/core-providers.md +11 -2
- package/docs/design-system/patterns/feature-flags.md +53 -21
- package/package.json +1 -1
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
|
|
5
5
|
| Variável | Descrição | Padrão |
|
|
6
6
|
|----------|-----------|--------|
|
|
7
|
+
| `VITE_APP_ENV` | Define o ambiente alvo da API/OAuth Qualiex. Valores aceitos: `"PROD"` ou `"DEV"`. Ausente ou qualquer outro valor = `PROD` (failsafe). Ver [seção abaixo](#vite_app_env). | `"PROD"` |
|
|
7
8
|
| `VITE_SHOW_USER_PREFERENCES` | Exibe "Preferências" no menu do usuário (idioma, timezone, formato de data) | Não exibe |
|
|
8
9
|
| `VITE_I18N_DEBUG_MODE` | Modo debug de i18n (mostra chaves ao invés de traduções) | `"false"` |
|
|
9
10
|
| `VITE_IS_QUALIEX` | Usa logos Qualiex ao invés de Forlogic | `"false"` |
|
|
10
11
|
| `VITE_SHOW_EDIT_PROFILE` | Exibe "Editar Perfil" no menu do usuário (foto e idioma) | Não exibe |
|
|
11
12
|
| `VITE_WIKI_URL` | Exibe botão "Wiki" no header da aplicação. O valor é a URL que será aberta ao clicar | Não exibe |
|
|
12
13
|
| `VITE_SHOW_ADMIN_REPORTS` | Exibe relatórios administrativos | `"false"` |
|
|
13
|
-
| `VITE_SUPABASE_PK_OVERRIDE` | **Obrigatória.** Publishable key correta do Supabase. Ver [seção abaixo](#vite_supabase_pk_override). | — |
|
|
14
|
+
| `VITE_SUPABASE_PK_OVERRIDE` | **Obrigatória (modo Supabase).** Publishable key correta do Supabase. Ver [seção abaixo](#vite_supabase_pk_override). | — |
|
|
14
15
|
|
|
15
16
|
## Uso
|
|
16
17
|
|
|
@@ -27,54 +28,85 @@ Variáveis Vite precisam do prefixo `VITE_` para serem expostas ao cliente.
|
|
|
27
28
|
|
|
28
29
|
---
|
|
29
30
|
|
|
31
|
+
## Resolução unificada das envs Supabase (sem duplicação)
|
|
32
|
+
|
|
33
|
+
A partir do `vite.config.ts`, o helper `resolveSupabaseEnv(mode)` (de `forlogic-core/vite`) lê **ambos os formatos** de variáveis e injeta um valor único via `define`:
|
|
34
|
+
|
|
35
|
+
- Aceita `VITE_SUPABASE_*` (legado) **ou** `SUPABASE_*` (formato novo Lovable Cloud).
|
|
36
|
+
- Prioridade: `VITE_SUPABASE_*` → `SUPABASE_*` → fallback derivado (`projectId` extraído da URL).
|
|
37
|
+
- Injeta `import.meta.env.VITE_SUPABASE_URL` / `VITE_SUPABASE_PUBLISHABLE_KEY` / `VITE_SUPABASE_PROJECT_ID` / `VITE_SUPABASE_PK_OVERRIDE` no bundle.
|
|
38
|
+
- O código do app/lib continua usando os nomes `VITE_*` — nada muda no consumo.
|
|
39
|
+
|
|
40
|
+
**Resultado:** o `.env` precisa apenas de **uma** versão de cada variável. Recomendado o formato sem prefixo (Lovable Cloud auto-injeta):
|
|
41
|
+
|
|
42
|
+
```env
|
|
43
|
+
SUPABASE_URL="https://ccjfvpnndclajkleyqkc.supabase.co"
|
|
44
|
+
SUPABASE_PUBLISHABLE_KEY="sb_publishable_w-TKU0hE4bjM_uOgt3fK1g_ewrXKJ8J"
|
|
45
|
+
VITE_SUPABASE_PK_OVERRIDE="sb_publishable_w-TKU0hE4bjM_uOgt3fK1g_ewrXKJ8J"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Ver `mem://patterns/dynamic-supabase-config`.
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## `VITE_APP_ENV`
|
|
53
|
+
|
|
54
|
+
Define **explicitamente** o ambiente alvo da API Qualiex e do OAuth, sem depender de pistas indiretas (project ID do Supabase, hostname, etc).
|
|
55
|
+
|
|
56
|
+
| Valor | Resultado |
|
|
57
|
+
|--------------------------------|------------------------------------------------------------------|
|
|
58
|
+
| `"PROD"` | API `common-v4-api.qualiex.com`, OAuth `login.qualiex.com` |
|
|
59
|
+
| `"DEV"` | API `common-v4-api-dev.qualiex.com`, OAuth `login-dev.qualiex.com` |
|
|
60
|
+
| ausente / qualquer outro valor | **PROD (failsafe)** — esquecer a variável nunca aponta para dev |
|
|
61
|
+
|
|
62
|
+
Apps em produção podem omitir a variável; apps que rodam contra dev **precisam** declarar `VITE_APP_ENV="DEV"` no `.env`. Não existe fallback derivado do Supabase.
|
|
63
|
+
|
|
64
|
+
Helpers disponíveis em `forlogic-core`:
|
|
65
|
+
|
|
66
|
+
- `getAppEnv(): 'PROD' | 'DEV'`
|
|
67
|
+
- `isDevEnv(): boolean`
|
|
68
|
+
- `getEnvironmentConfig(): EnvironmentConfig`
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
30
72
|
## `VITE_SUPABASE_PK_OVERRIDE`
|
|
31
73
|
|
|
32
74
|
### Problema
|
|
33
75
|
|
|
34
|
-
O Supabase desativou as legacy API keys (formato JWT `eyJhbGci...`). A integração Supabase do Lovable **sobrescreve automaticamente** `
|
|
76
|
+
O Supabase desativou as legacy API keys (formato JWT `eyJhbGci...`). A integração Supabase do Lovable **sobrescreve automaticamente** `SUPABASE_PUBLISHABLE_KEY` (e a versão `VITE_*` quando presente) no `.env` com a legacy anon key a cada prompt, causando `401 Unauthorized` em todas as requests.
|
|
35
77
|
|
|
36
78
|
### Solução
|
|
37
79
|
|
|
38
80
|
A lib `forlogic-core` implementa um mecanismo de override:
|
|
39
81
|
|
|
40
|
-
1. Se `VITE_SUPABASE_PK_OVERRIDE` existir no `.env` → a lib usa essa key (ignora
|
|
41
|
-
2. Se não existir → usa `
|
|
42
|
-
3. Se a key ativa for uma JWT legada → exibe banner vermelho no preview (DEV) + erro no console
|
|
82
|
+
1. Se `VITE_SUPABASE_PK_OVERRIDE` existir no `.env` → a lib usa essa key (ignora a publishable key resolvida)
|
|
83
|
+
2. Se não existir → usa a key resolvida por `resolveSupabaseEnv()`
|
|
84
|
+
3. Se a key ativa for uma JWT legada → exibe banner vermelho no preview (DEV, apenas `backend="supabase"`) + erro no console
|
|
43
85
|
|
|
44
|
-
O Lovable **nunca toca** em `VITE_SUPABASE_PK_OVERRIDE` porque só auto-popula
|
|
45
|
-
- `VITE_SUPABASE_URL`
|
|
46
|
-
- `VITE_SUPABASE_PUBLISHABLE_KEY`
|
|
47
|
-
- `VITE_SUPABASE_PROJECT_ID`
|
|
48
|
-
|
|
49
|
-
### Configuração obrigatória
|
|
50
|
-
|
|
51
|
-
**Todo projeto consumidor** que aponta para o Supabase `ccjfvpnndclajkleyqkc` deve adicionar no `.env`:
|
|
52
|
-
|
|
53
|
-
```env
|
|
54
|
-
VITE_SUPABASE_PK_OVERRIDE="sb_publishable_w-TKU0hE4bjM_uOgt3fK1g_ewrXKJ8J"
|
|
55
|
-
```
|
|
86
|
+
O Lovable **nunca toca** em `VITE_SUPABASE_PK_OVERRIDE` porque só auto-popula as envs Supabase padrão.
|
|
56
87
|
|
|
57
88
|
### Como funciona internamente
|
|
58
89
|
|
|
59
90
|
```text
|
|
60
91
|
VITE_SUPABASE_PK_OVERRIDE existe?
|
|
61
|
-
├─ SIM → usar ela
|
|
92
|
+
├─ SIM → usar ela
|
|
62
93
|
│ console.info: "✅ Usando VITE_SUPABASE_PK_OVERRIDE..."
|
|
63
|
-
└─ NÃO → usar
|
|
94
|
+
└─ NÃO → usar a key resolvida por resolveSupabaseEnv()
|
|
64
95
|
├─ Formato sb_publishable_* → OK
|
|
65
96
|
└─ Formato eyJ* (JWT legada) → ⛔ Erro
|
|
66
97
|
├─ console.error com diagnóstico completo
|
|
67
|
-
└─ Banner vermelho fixo no topo (apenas DEV)
|
|
98
|
+
└─ Banner vermelho fixo no topo (apenas DEV, modo supabase)
|
|
68
99
|
```
|
|
69
100
|
|
|
70
101
|
### Arquivos relevantes na lib
|
|
71
102
|
|
|
72
103
|
| Arquivo | Responsabilidade |
|
|
73
104
|
|---------|-----------------|
|
|
105
|
+
| `lib/vite/resolve-supabase-env.ts` | `resolveSupabaseEnv()` — consolida envs Supabase no `define` do Vite |
|
|
74
106
|
| `lib/supabase/legacyKeyGuard.ts` | `resolvePublishableKey()`, `isLegacyAnonKey()`, `warnIfLegacyKey()` |
|
|
75
107
|
| `lib/supabase/SupabaseSingleton.ts` | Usa `resolvePublishableKey()` para a key do client |
|
|
76
108
|
| `lib/supabase/publicClient.ts` | Idem para o client público |
|
|
77
|
-
| `lib/providers/CoreProviders.tsx` | Renderiza `LegacyKeyBanner` em DEV |
|
|
109
|
+
| `lib/providers/CoreProviders.tsx` | Renderiza `LegacyKeyBanner` em DEV (apenas `backend="supabase"`) |
|
|
78
110
|
|
|
79
111
|
### ⚠️ Nunca remova esta variável do `.env`
|
|
80
112
|
|