@oondemand/create-central-oon 0.3.10 → 0.3.11

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.
@@ -0,0 +1,150 @@
1
+ # Portal/Cockpit com OonCore
2
+
3
+ Este padrão atende aplicações como **Meus Apps**, Portal do Cliente, Portal de Parceiros, Suporte, Copilotos e outros Cockpits first-party.
4
+
5
+ O objetivo é evitar que um portal precise recriar Shell, Router, AuthProvider, Menu, Guards e SDK HTTP. O portal deve usar o `central.ui.json` + `startFromManifest` e registrar apenas os componentes realmente customizados.
6
+
7
+ ## Perfis arquiteturais
8
+
9
+ O OonCore diferencia três perfis:
10
+
11
+ | Perfil | Uso |
12
+ | --- | --- |
13
+ | `root-central` | Central de Ativações, raiz de confiança. |
14
+ | `member-central` | Central cliente/licenciada, ativada por instância. |
15
+ | `portal-cockpit` | Portal/Cockpit first-party, autenticado por AppClient/BFF. |
16
+
17
+ ## Auth modes
18
+
19
+ | `auth.mode` | Uso |
20
+ | --- | --- |
21
+ | `bearer` | Token local simples, compatível com Centrais existentes. |
22
+ | `cookie` | Sessão futura via cookie HTTP-only. |
23
+ | `external-sso` | Redireciona para login externo. |
24
+ | `central-instance` | Central membro usando instância ativada. |
25
+ | `central-client` | Portal/Cockpit usando AppClient/BFF. |
26
+
27
+ ## Capabilities no manifesto
28
+
29
+ Além de `permissions`, o manifesto pode declarar `capabilities`. Elas são permissões dinâmicas vindas da Central de Ativações e evitam criar campos fixos para cada produto.
30
+
31
+ Exemplos:
32
+
33
+ ```txt
34
+ apps:read
35
+ users:manage
36
+ tickets:read
37
+ tickets:assign
38
+ copilots:read
39
+ copilots:test
40
+ billing:read
41
+ ```
42
+
43
+ O Core trata `permissions` e `capabilities` como requisitos de UI. A segurança real continua no backend.
44
+
45
+ ## Manifesto recomendado
46
+
47
+ ```json
48
+ {
49
+ "schemaVersion": 2,
50
+ "name": "Portal Cliente",
51
+ "slug": "portal-cliente",
52
+ "appKind": "portal-cockpit",
53
+ "auth": {
54
+ "mode": "central-client",
55
+ "tokenParam": "code"
56
+ },
57
+ "layout": {
58
+ "shell": "portal",
59
+ "sidebar": "core",
60
+ "topbar": "none",
61
+ "header": "none",
62
+ "footer": "core"
63
+ },
64
+ "navigation": {
65
+ "mode": "manual",
66
+ "items": [
67
+ { "label": "Meus Apps", "href": "/apps", "capabilities": ["apps:read"], "order": 10 },
68
+ { "label": "Suporte", "href": "/suporte", "capabilities": ["tickets:read"], "order": 20 },
69
+ { "label": "Copilotos", "href": "/copilotos", "capabilities": ["copilots:read"], "order": 30 },
70
+ { "label": "Usuários", "href": "/usuarios", "capabilities": ["users:manage"], "order": 40 }
71
+ ]
72
+ },
73
+ "pages": [
74
+ { "path": "/apps", "label": "Meus Apps", "component": "AppsPortalPage", "capabilities": ["apps:read"] },
75
+ { "path": "/suporte", "label": "Suporte", "component": "SupportPage", "capabilities": ["tickets:read"] },
76
+ { "path": "/copilotos", "label": "Copilotos", "component": "CopilotsPage", "capabilities": ["copilots:read"] },
77
+ { "path": "/usuarios", "label": "Usuários", "component": "UsersPermissionsPage", "capabilities": ["users:manage"] }
78
+ ],
79
+ "collections": [],
80
+ "pipelines": [],
81
+ "documents": []
82
+ }
83
+ ```
84
+
85
+ ## Bootstrap recomendado
86
+
87
+ ```ts
88
+ import { startFromManifest } from "@oondemand/oon-core-front";
89
+ import manifest from "../central.ui.json";
90
+ import { AppsPortalPage } from "./custom/AppsPortalPage";
91
+ import { SupportPage } from "./custom/SupportPage";
92
+ import { CopilotsPage } from "./custom/CopilotsPage";
93
+ import { UsersPermissionsPage } from "./custom/UsersPermissionsPage";
94
+
95
+ startFromManifest(manifest, {
96
+ apiBaseUrl: import.meta.env.VITE_API_URL,
97
+ appKind: "portal-cockpit",
98
+ auth: {
99
+ mode: "central-client"
100
+ },
101
+ customComponents: {
102
+ AppsPortalPage,
103
+ SupportPage,
104
+ CopilotsPage,
105
+ UsersPermissionsPage
106
+ }
107
+ });
108
+ ```
109
+
110
+ ## Contrato esperado do BFF
111
+
112
+ O frontend conversa apenas com o BFF do portal. O BFF fala com a Central de Ativações usando AppClient.
113
+
114
+ Rotas genéricas esperadas no BFF podem espelhar a Central de Ativações:
115
+
116
+ ```http
117
+ GET /api/portal/contexto
118
+ GET /api/portal/apps
119
+ GET /api/portal/apps/:appCode
120
+ GET /api/portal/apps/:appCode/capabilities
121
+ POST /api/portal/apps/:appCode/authorize
122
+ ```
123
+
124
+ O BFF também pode expor rotas de domínio próprias, como:
125
+
126
+ ```http
127
+ GET /api/suporte/tickets
128
+ POST /api/suporte/tickets
129
+ GET /api/copilotos/assistentes
130
+ POST /api/copilotos/assistentes/:id/testar
131
+ ```
132
+
133
+ Essas rotas de domínio validam capability na Central de Ativações antes de executar a ação.
134
+
135
+ ## Regra de segurança
136
+
137
+ O frontend nunca deve receber `clientSecret`, `x-oon-instance-token`, hash de credencial ou segredo completo. Portais devem falar com um BFF próprio, e o BFF fala com a Central de Ativações usando AppClient.
138
+
139
+ ## Quando usar página custom
140
+
141
+ Use página custom apenas quando a tela não for CRUD/esteira/documento declarativo, por exemplo:
142
+
143
+ - cards de apps licenciados;
144
+ - matriz de permissões;
145
+ - cockpit de status;
146
+ - tickets de suporte;
147
+ - gestão de copilotos;
148
+ - onboarding orientado por negócio.
149
+
150
+ Mesmo nesses casos, o Shell, Router, Auth, Menu, Guards e SDK HTTP devem continuar no Core.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oondemand/create-central-oon",
3
- "version": "0.3.10",
3
+ "version": "0.3.11",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/oondemand/oon-platform.git",
@@ -12,6 +12,6 @@
12
12
  "deploy": "oonCore-back deploy"
13
13
  },
14
14
  "dependencies": {
15
- "@oondemand/oon-core-back": "^0.3.10"
15
+ "@oondemand/oon-core-back": "^0.3.11"
16
16
  }
17
17
  }
@@ -10,7 +10,7 @@
10
10
  "sync:metadata": "oonCore-front sync:metadata"
11
11
  },
12
12
  "dependencies": {
13
- "@oondemand/oon-core-front": "^0.3.10",
13
+ "@oondemand/oon-core-front": "^0.3.11",
14
14
  "@chakra-ui/react": "^3.13.0",
15
15
  "@emotion/react": "^11.14.0",
16
16
  "@tanstack/react-query": "^5.65.0",