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
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
# Memory: patterns/dynamic-supabase-config
|
|
2
|
-
Updated: 2026-
|
|
2
|
+
Updated: 2026-05-25
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
O `vite.config.ts` chama `resolveSupabaseEnv(mode)` (de `forlogic-core/vite`), que lê tanto `VITE_SUPABASE_*` quanto `SUPABASE_*` (formato novo Lovable Cloud), prioriza `VITE_*` e injeta valores consolidados via `define`: `import.meta.env.VITE_SUPABASE_URL`, `VITE_SUPABASE_PUBLISHABLE_KEY`, `VITE_SUPABASE_PROJECT_ID`, `VITE_SUPABASE_PK_OVERRIDE`. O `.env` precisa apenas de UMA versão (`SUPABASE_URL` + `SUPABASE_PUBLISHABLE_KEY`). `VITE_SUPABASE_PK_OVERRIDE` continua obrigatório por causa do bug do Lovable sobrescrever a publishable key com a legacy JWT. `projectId` é derivado da URL quando ausente.
|
|
@@ -1,35 +1,41 @@
|
|
|
1
1
|
# Memory: patterns/environment-detection-logic
|
|
2
|
-
Updated: 2026-
|
|
2
|
+
Updated: 2026-05-25
|
|
3
3
|
|
|
4
4
|
O sistema separa duas preocupações independentes de ambiente:
|
|
5
5
|
|
|
6
6
|
## 1. Método de autenticação (`shouldUseDevTokens()` / `isLovablePreview()`)
|
|
7
7
|
Detecta se o app roda em contexto de desenvolvimento (preview Lovable via iframe, `*.lovable.dev`, localhost ou `import.meta.env.DEV`). Quando true, usa a edge function `dev-tokens` do Supabase conectado para autenticar. Quando false (app publicado), usa OAuth padrão do Qualiex.
|
|
8
8
|
|
|
9
|
-
## 2. Qual API usar (`getEnvironmentConfig()` / `
|
|
10
|
-
|
|
9
|
+
## 2. Qual API usar (`getEnvironmentConfig()` / `isDevEnv()`)
|
|
10
|
+
Fonte de verdade **única e explícita**: env var `VITE_APP_ENV`.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
| `VITE_APP_ENV` | Resultado |
|
|
13
|
+
|---------------------------------|-----------------------|
|
|
14
|
+
| `"PROD"` | PROD (API/OAuth prod) |
|
|
15
|
+
| `"DEV"` | DEV (API/OAuth dev) |
|
|
16
|
+
| ausente / qualquer outro valor | **PROD (failsafe)** |
|
|
17
|
+
|
|
18
|
+
Não há fallback derivado do Supabase. Apps que querem apontar para dev precisam declarar `VITE_APP_ENV="DEV"` no `.env`. Apps prod simplesmente omitem (ou setam `"PROD"`).
|
|
14
19
|
|
|
15
20
|
## Tabela de regras
|
|
16
21
|
|
|
17
|
-
| Cenário
|
|
18
|
-
|
|
19
|
-
| Preview +
|
|
20
|
-
| Preview +
|
|
21
|
-
| Publicado +
|
|
22
|
-
| Publicado +
|
|
22
|
+
| Cenário | API | Auth |
|
|
23
|
+
|---------------------------------|------|------------|
|
|
24
|
+
| Preview + `VITE_APP_ENV=PROD` | Prod | dev-tokens |
|
|
25
|
+
| Preview + `VITE_APP_ENV=DEV` | Dev | dev-tokens |
|
|
26
|
+
| Publicado + `VITE_APP_ENV=PROD` | Prod | OAuth |
|
|
27
|
+
| Publicado + `VITE_APP_ENV=DEV` | Dev | OAuth |
|
|
23
28
|
|
|
24
29
|
## Guard de troca de projeto (`TokenManager.checkProjectMismatch()`)
|
|
25
|
-
Ao inicializar (`AuthService.initialize()`),
|
|
30
|
+
Independente de `VITE_APP_ENV`. Ao inicializar (`AuthService.initialize()`), compara `import.meta.env.VITE_SUPABASE_PROJECT_ID` (consolidado por `resolveSupabaseEnv()` no `vite.config.ts`) com o valor armazenado em `localStorage('supabase_project_id')`. Se diferente, limpa tokens stale antes de qualquer chamada a `validate-token`. Sem efeito em apps `backend="dotnet"`.
|
|
26
31
|
|
|
27
32
|
## Funções (lib/config/index.ts)
|
|
28
33
|
- `isLovablePreview()` — detecta contexto de preview/localhost
|
|
29
|
-
- `shouldUseDevTokens()` — wrapper semântico sobre `isLovablePreview()`
|
|
34
|
+
- `shouldUseDevTokens()` — wrapper semântico sobre `isLovablePreview()` (apenas modo Supabase)
|
|
30
35
|
- `isDevEnvironment` — alias deprecated, mantido para compatibilidade
|
|
31
|
-
- `
|
|
32
|
-
- `
|
|
36
|
+
- `getAppEnv()` — retorna `'PROD' | 'DEV'` lendo `VITE_APP_ENV` (default `'PROD'`)
|
|
37
|
+
- `getEnvironmentConfig()` — retorna config PROD ou DEV baseado em `getAppEnv()`
|
|
38
|
+
- `isDevEnv()` — true se `getAppEnv() === 'DEV'`
|
|
33
39
|
|
|
34
40
|
## Funções (lib/auth/services/TokenManager.ts)
|
|
35
41
|
- `checkProjectMismatch()` — detecta troca de projeto Supabase e limpa tokens stale
|
package/README.md
CHANGED
|
@@ -49,7 +49,7 @@ function App() {
|
|
|
49
49
|
|
|
50
50
|
A partir da versão com `CoreProviders backend="..."`, o Supabase deixou de ser obrigatório:
|
|
51
51
|
|
|
52
|
-
- `backend="supabase"` (default, retrocompat) — exige `
|
|
52
|
+
- `backend="supabase"` (default, retrocompat) — exige `SUPABASE_URL` + `SUPABASE_PUBLISHABLE_KEY` (ou `VITE_SUPABASE_*` legadas; o `vite.config.ts` consolida ambos).
|
|
53
53
|
- `backend="dotnet"` — autentica apenas com tokens OAuth do Qualiex; **não** lê envs do Supabase.
|
|
54
54
|
|
|
55
55
|
**Breaking change:** os módulos `sign`, `audit-trail`, `action-plans`, `leadership` e `places` foram **removidos do barrel principal** e só podem ser importados via subpath (ex.: `import { DocumentSigner } from 'forlogic-core/sign'`). Eles continuam exigindo Supabase em runtime mesmo quando o app usa `backend="dotnet"`.
|
|
@@ -1,12 +1,27 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Detecção de ambiente prod/dev.
|
|
3
|
+
*
|
|
4
|
+
* Fonte de verdade ÚNICA: `VITE_APP_ENV` (`"PROD"` | `"DEV"`).
|
|
5
|
+
* - `"DEV"` → API/OAuth/Supabase de dev.
|
|
6
|
+
* - `"PROD"` ou ausente / qualquer outro valor → PROD (failsafe).
|
|
7
|
+
*
|
|
8
|
+
* Não há fallback baseado em env vars Supabase: apps sem Supabase precisam
|
|
9
|
+
* configurar `VITE_APP_ENV="DEV"` explicitamente quando quiserem apontar para dev.
|
|
10
|
+
*
|
|
11
|
+
* **Storage de assets (logos/favicon) é sempre prod** — bucket público fixo.
|
|
12
|
+
*/
|
|
13
|
+
export type AppEnv = 'PROD' | 'DEV';
|
|
2
14
|
export interface EnvironmentConfig {
|
|
3
15
|
storageProjectId: string;
|
|
16
|
+
supabaseProjectId: string;
|
|
17
|
+
supabaseUrl: string;
|
|
18
|
+
supabasePublishableKey: string;
|
|
4
19
|
oauth: {
|
|
5
20
|
authUrl: string;
|
|
6
21
|
clientId: string;
|
|
7
22
|
};
|
|
8
23
|
qualiexApiUrl: string;
|
|
9
24
|
}
|
|
25
|
+
export declare function getAppEnv(): AppEnv;
|
|
10
26
|
export declare function getEnvironmentConfig(): EnvironmentConfig;
|
|
11
|
-
export declare function
|
|
12
|
-
export { PROD_PROJECT_ID };
|
|
27
|
+
export declare function isDevEnv(): boolean;
|
|
@@ -22,13 +22,13 @@ export declare const SEARCH_CONFIG: {
|
|
|
22
22
|
export declare const isLovablePreview: () => boolean;
|
|
23
23
|
/**
|
|
24
24
|
* Determines auth method: true → use dev-tokens edge function, false → use OAuth.
|
|
25
|
-
*
|
|
26
|
-
*
|
|
25
|
+
* Requer modo Supabase: em modo dotnet, dev-tokens não existe e devemos sempre
|
|
26
|
+
* cair no OAuth real (loginProd), mesmo em localhost/preview.
|
|
27
27
|
*/
|
|
28
28
|
export declare const shouldUseDevTokens: () => boolean;
|
|
29
29
|
/** @deprecated Use `isLovablePreview()` or `shouldUseDevTokens()` instead */
|
|
30
30
|
export declare const isDevEnvironment: () => boolean;
|
|
31
|
-
export {
|
|
31
|
+
export { isDevEnv, getAppEnv, type AppEnv } from './environments';
|
|
32
32
|
export declare const getQualiexApiUrl: () => string;
|
|
33
33
|
export declare const QUERY_KEYS: {
|
|
34
34
|
readonly crud: (entity: string) => readonly [string];
|
|
@@ -90,7 +90,7 @@ export { loadForlogicFonts } from './utils/load-fonts';
|
|
|
90
90
|
export * from './types';
|
|
91
91
|
export * from './types/sidebar';
|
|
92
92
|
export * from './config';
|
|
93
|
-
export { getEnvironmentConfig,
|
|
93
|
+
export { getEnvironmentConfig, isDevEnv, getAppEnv, type AppEnv } from './config/environments';
|
|
94
94
|
export type { EnvironmentConfig } from './config/environments';
|
|
95
95
|
export { setBackendMode, getBackendMode, isSupabaseBackend } from './config/backend';
|
|
96
96
|
export type { BackendMode } from './config/backend';
|
|
@@ -1,12 +1,27 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Detecção de ambiente prod/dev.
|
|
3
|
+
*
|
|
4
|
+
* Fonte de verdade ÚNICA: `VITE_APP_ENV` (`"PROD"` | `"DEV"`).
|
|
5
|
+
* - `"DEV"` → API/OAuth/Supabase de dev.
|
|
6
|
+
* - `"PROD"` ou ausente / qualquer outro valor → PROD (failsafe).
|
|
7
|
+
*
|
|
8
|
+
* Não há fallback baseado em env vars Supabase: apps sem Supabase precisam
|
|
9
|
+
* configurar `VITE_APP_ENV="DEV"` explicitamente quando quiserem apontar para dev.
|
|
10
|
+
*
|
|
11
|
+
* **Storage de assets (logos/favicon) é sempre prod** — bucket público fixo.
|
|
12
|
+
*/
|
|
13
|
+
export type AppEnv = 'PROD' | 'DEV';
|
|
2
14
|
export interface EnvironmentConfig {
|
|
3
15
|
storageProjectId: string;
|
|
16
|
+
supabaseProjectId: string;
|
|
17
|
+
supabaseUrl: string;
|
|
18
|
+
supabasePublishableKey: string;
|
|
4
19
|
oauth: {
|
|
5
20
|
authUrl: string;
|
|
6
21
|
clientId: string;
|
|
7
22
|
};
|
|
8
23
|
qualiexApiUrl: string;
|
|
9
24
|
}
|
|
25
|
+
export declare function getAppEnv(): AppEnv;
|
|
10
26
|
export declare function getEnvironmentConfig(): EnvironmentConfig;
|
|
11
|
-
export declare function
|
|
12
|
-
export { PROD_PROJECT_ID };
|
|
27
|
+
export declare function isDevEnv(): boolean;
|
|
@@ -22,13 +22,13 @@ export declare const SEARCH_CONFIG: {
|
|
|
22
22
|
export declare const isLovablePreview: () => boolean;
|
|
23
23
|
/**
|
|
24
24
|
* Determines auth method: true → use dev-tokens edge function, false → use OAuth.
|
|
25
|
-
*
|
|
26
|
-
*
|
|
25
|
+
* Requer modo Supabase: em modo dotnet, dev-tokens não existe e devemos sempre
|
|
26
|
+
* cair no OAuth real (loginProd), mesmo em localhost/preview.
|
|
27
27
|
*/
|
|
28
28
|
export declare const shouldUseDevTokens: () => boolean;
|
|
29
29
|
/** @deprecated Use `isLovablePreview()` or `shouldUseDevTokens()` instead */
|
|
30
30
|
export declare const isDevEnvironment: () => boolean;
|
|
31
|
-
export {
|
|
31
|
+
export { isDevEnv, getAppEnv, type AppEnv } from './environments';
|
|
32
32
|
export declare const getQualiexApiUrl: () => string;
|
|
33
33
|
export declare const QUERY_KEYS: {
|
|
34
34
|
readonly crud: (entity: string) => readonly [string];
|
|
@@ -90,7 +90,7 @@ export { loadForlogicFonts } from './utils/load-fonts';
|
|
|
90
90
|
export * from './types';
|
|
91
91
|
export * from './types/sidebar';
|
|
92
92
|
export * from './config';
|
|
93
|
-
export { getEnvironmentConfig,
|
|
93
|
+
export { getEnvironmentConfig, isDevEnv, getAppEnv, type AppEnv } from './config/environments';
|
|
94
94
|
export type { EnvironmentConfig } from './config/environments';
|
|
95
95
|
export { setBackendMode, getBackendMode, isSupabaseBackend } from './config/backend';
|
|
96
96
|
export type { BackendMode } from './config/backend';
|
|
@@ -1,12 +1,27 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Detecção de ambiente prod/dev.
|
|
3
|
+
*
|
|
4
|
+
* Fonte de verdade ÚNICA: `VITE_APP_ENV` (`"PROD"` | `"DEV"`).
|
|
5
|
+
* - `"DEV"` → API/OAuth/Supabase de dev.
|
|
6
|
+
* - `"PROD"` ou ausente / qualquer outro valor → PROD (failsafe).
|
|
7
|
+
*
|
|
8
|
+
* Não há fallback baseado em env vars Supabase: apps sem Supabase precisam
|
|
9
|
+
* configurar `VITE_APP_ENV="DEV"` explicitamente quando quiserem apontar para dev.
|
|
10
|
+
*
|
|
11
|
+
* **Storage de assets (logos/favicon) é sempre prod** — bucket público fixo.
|
|
12
|
+
*/
|
|
13
|
+
export type AppEnv = 'PROD' | 'DEV';
|
|
2
14
|
export interface EnvironmentConfig {
|
|
3
15
|
storageProjectId: string;
|
|
16
|
+
supabaseProjectId: string;
|
|
17
|
+
supabaseUrl: string;
|
|
18
|
+
supabasePublishableKey: string;
|
|
4
19
|
oauth: {
|
|
5
20
|
authUrl: string;
|
|
6
21
|
clientId: string;
|
|
7
22
|
};
|
|
8
23
|
qualiexApiUrl: string;
|
|
9
24
|
}
|
|
25
|
+
export declare function getAppEnv(): AppEnv;
|
|
10
26
|
export declare function getEnvironmentConfig(): EnvironmentConfig;
|
|
11
|
-
export declare function
|
|
12
|
-
export { PROD_PROJECT_ID };
|
|
27
|
+
export declare function isDevEnv(): boolean;
|
package/dist/config/index.d.ts
CHANGED
|
@@ -22,13 +22,13 @@ export declare const SEARCH_CONFIG: {
|
|
|
22
22
|
export declare const isLovablePreview: () => boolean;
|
|
23
23
|
/**
|
|
24
24
|
* Determines auth method: true → use dev-tokens edge function, false → use OAuth.
|
|
25
|
-
*
|
|
26
|
-
*
|
|
25
|
+
* Requer modo Supabase: em modo dotnet, dev-tokens não existe e devemos sempre
|
|
26
|
+
* cair no OAuth real (loginProd), mesmo em localhost/preview.
|
|
27
27
|
*/
|
|
28
28
|
export declare const shouldUseDevTokens: () => boolean;
|
|
29
29
|
/** @deprecated Use `isLovablePreview()` or `shouldUseDevTokens()` instead */
|
|
30
30
|
export declare const isDevEnvironment: () => boolean;
|
|
31
|
-
export {
|
|
31
|
+
export { isDevEnv, getAppEnv, type AppEnv } from './environments';
|
|
32
32
|
export declare const getQualiexApiUrl: () => string;
|
|
33
33
|
export declare const QUERY_KEYS: {
|
|
34
34
|
readonly crud: (entity: string) => readonly [string];
|
package/dist/index.d.ts
CHANGED
|
@@ -90,7 +90,7 @@ export { loadForlogicFonts } from './utils/load-fonts';
|
|
|
90
90
|
export * from './types';
|
|
91
91
|
export * from './types/sidebar';
|
|
92
92
|
export * from './config';
|
|
93
|
-
export { getEnvironmentConfig,
|
|
93
|
+
export { getEnvironmentConfig, isDevEnv, getAppEnv, type AppEnv } from './config/environments';
|
|
94
94
|
export type { EnvironmentConfig } from './config/environments';
|
|
95
95
|
export { setBackendMode, getBackendMode, isSupabaseBackend } from './config/backend';
|
|
96
96
|
export type { BackendMode } from './config/backend';
|