@oondemand/oon-core-back 0.5.0 → 0.5.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/README.md CHANGED
@@ -21,6 +21,10 @@ O Core suporta `ecosystem.role` em `central.config.js`: `root` para a Central de
21
21
 
22
22
  Compatibilidade temporária: `CENTRAL_ATIVACAO_BACKEND_URL` e `MEUS_APPS_BACKEND_URL` continuam aceitas como aliases da URL da API. Nunca aponte a URL da API para o próprio Core.
23
23
 
24
+ ## Catálogo público de perfis
25
+
26
+ `GET /core/role-catalog` expõe o contrato mínimo e versionado dos perfis RBAC declarados pelo App. A resposta contém `appCode`, `enabled` e código, nome, descrição e indicador administrativo de cada papel; permissões internas não são publicadas. O endpoint é somente leitura, usa cache público de cinco minutos e não concede autorização.
27
+
24
28
  ## Saúde operacional
25
29
 
26
30
  - `GET /health/ready`: retorna HTTP 200 somente quando o MongoDB está conectado; retorna 503 enquanto o runtime não estiver pronto.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oondemand/oon-core-back",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/oondemand/oon-platform.git",
@@ -8,6 +8,7 @@ const { asyncHandler } = require("../core/utils/helpers");
8
8
  const {
9
9
  policy,
10
10
  publicPolicy,
11
+ publicRoleCatalog,
11
12
  roleByCode,
12
13
  canAssignRole,
13
14
  } = require("../core/rbac/policy");
@@ -90,6 +91,11 @@ function assertAssignable(actor, roleCode) {
90
91
  return role;
91
92
  }
92
93
 
94
+ router.get("/role-catalog", (_req, res) => {
95
+ res.set("Cache-Control", "public, max-age=300");
96
+ res.json(publicRoleCatalog());
97
+ });
98
+
93
99
  router.get("/rbac", (_req, res) => {
94
100
  res.json(publicPolicy());
95
101
  });
@@ -127,6 +127,21 @@ function canAssignRole(actorPermissions, targetRole) {
127
127
  return target.every((permission) => actor.includes(permission));
128
128
  }
129
129
 
130
+ function publicRoleCatalog(config = ctx.config) {
131
+ const currentPolicy = policy(config);
132
+ return {
133
+ schemaVersion: 1,
134
+ appCode: String(config.appCode || config.slug || "central"),
135
+ enabled: currentPolicy.enabled,
136
+ roles: currentPolicy.roles.map((role) => ({
137
+ code: role.code,
138
+ name: role.name,
139
+ description: String(role.description || ""),
140
+ admin: role.admin === true || role.permissions?.includes("*") === true,
141
+ })),
142
+ };
143
+ }
144
+
130
145
  function publicPolicy(config = ctx.config) {
131
146
  const currentPolicy = policy(config);
132
147
  return {
@@ -164,5 +179,6 @@ module.exports = {
164
179
  legacyRoleCandidates,
165
180
  matchingRoleForLegacyUser,
166
181
  canAssignRole,
182
+ publicRoleCatalog,
167
183
  publicPolicy,
168
184
  };