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.
Files changed (35) hide show
  1. package/.note/memory/patterns/dynamic-supabase-config.md +2 -2
  2. package/.note/memory/patterns/environment-detection-logic.md +21 -15
  3. package/README.md +1 -1
  4. package/dist/action-plans/config/environments.d.ts +18 -3
  5. package/dist/action-plans/config/index.d.ts +3 -3
  6. package/dist/action-plans/index.d.ts +1 -1
  7. package/dist/audit-trail/config/environments.d.ts +18 -3
  8. package/dist/audit-trail/config/index.d.ts +3 -3
  9. package/dist/audit-trail/index.d.ts +1 -1
  10. package/dist/config/environments.d.ts +18 -3
  11. package/dist/config/index.d.ts +3 -3
  12. package/dist/index.d.ts +1 -1
  13. package/dist/index.esm.js +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/leadership/config/environments.d.ts +18 -3
  16. package/dist/leadership/config/index.d.ts +3 -3
  17. package/dist/leadership/index.d.ts +1 -1
  18. package/dist/leadership/index.esm.js +1 -1
  19. package/dist/leadership/index.js +1 -1
  20. package/dist/places/config/environments.d.ts +18 -3
  21. package/dist/places/config/index.d.ts +3 -3
  22. package/dist/places/index.d.ts +1 -1
  23. package/dist/places/index.esm.js +1 -1
  24. package/dist/places/index.js +1 -1
  25. package/dist/sign/config/environments.d.ts +18 -3
  26. package/dist/sign/config/index.d.ts +3 -3
  27. package/dist/sign/index.d.ts +1 -1
  28. package/dist/sign/index.esm.js +1 -1
  29. package/dist/sign/index.js +1 -1
  30. package/dist/vite/index.esm.js +24 -1
  31. package/dist/vite/index.js +24 -0
  32. package/docs/WORKSPACE_KNOWLEDGE.md +1 -1
  33. package/docs/design-system/patterns/core-providers.md +11 -2
  34. package/docs/design-system/patterns/feature-flags.md +53 -21
  35. 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** `VITE_SUPABASE_PUBLISHABLE_KEY` no `.env` com a legacy anon key a cada prompt, causando `401 Unauthorized` em todas as requests.
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 `VITE_SUPABASE_PUBLISHABLE_KEY`)
41
- 2. Se não existir → usa `VITE_SUPABASE_PUBLISHABLE_KEY` normalmente
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 estas 3 variáveis:
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 (ignora VITE_SUPABASE_PUBLISHABLE_KEY)
92
+ ├─ SIM → usar ela
62
93
  │ console.info: "✅ Usando VITE_SUPABASE_PK_OVERRIDE..."
63
- └─ NÃO → usar VITE_SUPABASE_PUBLISHABLE_KEY
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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forlogic-core",
3
- "version": "2.3.0",
3
+ "version": "2.3.1",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.esm.js",