@trismegisto/spine 3.0.3 → 3.0.5
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/fesm2022/{trismegisto-spine-auto-service-apps.usage-DeLfYMeO.mjs → trismegisto-spine-auto-service-apps.usage-po9Ds_SU.mjs} +21 -22
- package/fesm2022/trismegisto-spine-auto-service-apps.usage-po9Ds_SU.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-audit.component-BNtNWfiu.mjs → trismegisto-spine-auto-service-auto-service-audit.component-tfGcVR3i.mjs} +2 -2
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-audit.component-BNtNWfiu.mjs.map → trismegisto-spine-auto-service-auto-service-audit.component-tfGcVR3i.mjs.map} +1 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-Cl7ahisu.mjs +65 -0
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-Cl7ahisu.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-client.component-DXl1y6Sx.mjs → trismegisto-spine-auto-service-auto-service-client.component-DzmlpLPu.mjs} +152 -94
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-DzmlpLPu.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-delete-B1tXgMvi.mjs → trismegisto-spine-auto-service-auto-service-delete-CV_t9vxm.mjs} +3 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-delete-CV_t9vxm.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-groups.component-C4iQ2GPX.mjs → trismegisto-spine-auto-service-auto-service-groups.component-2xCG_wS9.mjs} +11 -6
- package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-2xCG_wS9.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-login-attempts.component-B87vibNB.mjs → trismegisto-spine-auto-service-auto-service-login-attempts.component-CRvxfSWD.mjs} +2 -2
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-login-attempts.component-B87vibNB.mjs.map → trismegisto-spine-auto-service-auto-service-login-attempts.component-CRvxfSWD.mjs.map} +1 -1
- package/fesm2022/{trismegisto-spine-auto-service-auto-service.component-DAXv__zg.mjs → trismegisto-spine-auto-service-auto-service.component-C4FBAefe.mjs} +90 -56
- package/fesm2022/trismegisto-spine-auto-service-auto-service.component-C4FBAefe.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-client.usage-CcJANb20.mjs → trismegisto-spine-auto-service-client.usage-B16r3IHk.mjs} +16 -12
- package/fesm2022/trismegisto-spine-auto-service-client.usage-B16r3IHk.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service-optional-id.validator-0JPeqhjm.mjs +20 -0
- package/fesm2022/trismegisto-spine-auto-service-optional-id.validator-0JPeqhjm.mjs.map +1 -0
- package/fesm2022/trismegisto-spine-auto-service.mjs +7 -7
- package/fesm2022/trismegisto-spine-auto-service.mjs.map +1 -1
- package/fesm2022/trismegisto-spine.mjs +54 -3
- package/fesm2022/trismegisto-spine.mjs.map +1 -1
- package/package.json +6 -6
- package/types/trismegisto-spine-auto-service.d.ts +1 -0
- package/types/trismegisto-spine-auto-service.d.ts.map +1 -1
- package/types/trismegisto-spine.d.ts +29 -0
- package/types/trismegisto-spine.d.ts.map +1 -1
- package/fesm2022/trismegisto-spine-auto-service-apps.usage-DeLfYMeO.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-DdtDk_xl.mjs +0 -51
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client-picker.component-DdtDk_xl.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-DXl1y6Sx.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-delete-B1tXgMvi.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service-groups.component-C4iQ2GPX.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service.component-DAXv__zg.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-client.usage-CcJANb20.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trismegisto-spine-auto-service.mjs","sources":["../../../projects/ui/auto-service/src/auto-service.tokens.ts","../../../projects/ui/auto-service/src/provide-auto-service.ts","../../../projects/ui/auto-service/src/auto-service.service.ts","../../../projects/ui/auto-service/src/public-api.ts","../../../projects/ui/auto-service/src/trismegisto-spine-auto-service.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface AutoServiceConfig {\n // Base URL do argos-admin-server (o mesmo backend central que atende\n // /admin/*) -- /auto-service/* já existe lá, escopado por client_id, servindo\n // qualquer aplicação que instale este pacote, não só o argos-admin.\n adminApi: string;\n}\n\nexport const AUTO_SERVICE_CONFIG = new InjectionToken<AutoServiceConfig>('AUTO_SERVICE_CONFIG');\n\n// router_id dos roteadores (páginas) do template \"auto-service\" (web.template_router,\n// ver apps/argos/database/seed/04-web.template_router.sql) -- valores literais e\n// estáveis (mesma convenção do resto do seed: UUID fixo, nunca gerado em runtime). É\n// contra ISSO que o ComponentDistributorService casa via source_template_router_id\n// (não o router_id materializado de cada client, que varia): qualquer client\n// vinculado ao template \"auto-service\" resolve todos automaticamente, sem precisar\n// declarar nada no próprio features.routes.ts. As páginas vivem dentro da navegação\n// \"Administração\" do template (Ações e Tentativas de login num menu \"Auditoria\" dentro\n// dela) -- navegação e menu nunca precisam de componente (nunca são page_id de router).\nexport const AUTO_SERVICE_GROUPS_TEMPLATE_ROUTER_ID = 'ad100001-0000-4000-8000-000000000001';\nexport const AUTO_SERVICE_APPS_TEMPLATE_ROUTER_ID = 'ad100002-0000-4000-8000-000000000001';\nexport const AUTO_SERVICE_CLIENT_TEMPLATE_ROUTER_ID = 'ad100003-0000-4000-8000-000000000001';\n// Menu \"Auditoria\" (rota AD000006, dentro de \"Administração\", migration 0012 do argos): duas páginas.\n// Ações (a leitura da auditoria, `audit.events`) -- o nome da constante ficou do tempo em que era a página \"Auditoria\".\nexport const AUTO_SERVICE_AUDIT_TEMPLATE_ROUTER_ID = 'ad100004-0000-4000-8000-000000000001';\n// Tentativas de login (`auth.auth_attempts` com o client do app).\nexport const AUTO_SERVICE_LOGIN_ATTEMPTS_TEMPLATE_ROUTER_ID = 'ad100005-0000-4000-8000-000000000001';\n// Início (\"home\", página de topo e pública do mesmo template). Todo client clonado do\n// template ganha a própria linha em web.router com source_template_router_id apontando pra cá.\nexport const AUTO_SERVICE_HOME_TEMPLATE_ROUTER_ID = '6a9a13db-f31b-494e-b51c-79af0ac28b60';\n","import { EnvironmentProviders, Type, makeEnvironmentProviders } from '@angular/core';\nimport { COMPONENT_ROUTES, ComponentRoute, RouteDocument } from '@trismegisto/spine/routing';\nimport { SPINE_ADMIN_API } from '@trismegisto/spine';\nimport {\n AUTO_SERVICE_CONFIG, AutoServiceConfig,\n AUTO_SERVICE_GROUPS_TEMPLATE_ROUTER_ID, AUTO_SERVICE_APPS_TEMPLATE_ROUTER_ID, AUTO_SERVICE_CLIENT_TEMPLATE_ROUTER_ID,\n AUTO_SERVICE_HOME_TEMPLATE_ROUTER_ID, AUTO_SERVICE_AUDIT_TEMPLATE_ROUTER_ID, AUTO_SERVICE_LOGIN_ATTEMPTS_TEMPLATE_ROUTER_ID,\n} from './auto-service.tokens';\n\n/**\n * As 6 telas do auto-serviço, carregadas sob demanda. Cada `import()` relativo vira um chunk próprio no\n * FESM publicado (`trismegisto-spine-auto-service-<tela>-<hash>.mjs`), que o bundler do app mantém fora\n * do carregamento inicial. Não exporte as telas no `public-api.ts` (ver o comentário lá).\n */\nexport const AUTO_SERVICE_SCREENS: Readonly<Record<'home' | 'groups' | 'apps' | 'client' | 'audit' | 'loginAttempts', () => Promise<Type<unknown>>>> = {\n home: () => import('./home/home.component').then(m => m.HomeComponent),\n groups: () => import('./groups/auto-service-groups.component').then(m => m.AutoServiceGroupsComponent),\n apps: () => import('./auto-service.component').then(m => m.AutoServiceComponent),\n client: () => import('./auto-service-client.component').then(m => m.AutoServiceClientComponent),\n audit: () => import('./audit/auto-service-audit.component').then(m => m.AutoServiceAuditComponent),\n loginAttempts: () => import('./audit/auto-service-login-attempts.component').then(m => m.AutoServiceLoginAttemptsComponent),\n};\n\n/**\n * Documentação das 6 telas (botão de documentação da barra da página e índice \"Documentação do sistema\"): o manual\n * de uso (`load`) e a especificação técnica (`loadTechnical`, só com `SpineConfig.technicalDocs`). O Markdown fica em\n * módulos `.ts` próprios em `./docs/` (o ng-packagr não carrega `.md` como texto), cada um atrás de um `import()`\n * relativo: vira um chunk à parte no FESM e só é baixado quando alguém abre o documento. Sem `title`/`group`: o\n * índice usa o nome da rota e o módulo da árvore do client. O `SpineDocsService` casa estas entradas pelo\n * `source_template_router_id`, como o `ComponentDistributorService` faz com as telas.\n */\nexport const AUTO_SERVICE_DOCUMENTS: Readonly<Record<keyof typeof AUTO_SERVICE_SCREENS, RouteDocument>> = {\n home: {\n load: () => import('./docs/home.usage').then(m => m.default),\n loadTechnical: () => import('./docs/home.technical').then(m => m.default),\n },\n groups: {\n load: () => import('./docs/groups.usage').then(m => m.default),\n loadTechnical: () => import('./docs/groups.technical').then(m => m.default),\n },\n apps: {\n load: () => import('./docs/apps.usage').then(m => m.default),\n loadTechnical: () => import('./docs/apps.technical').then(m => m.default),\n },\n client: {\n load: () => import('./docs/client.usage').then(m => m.default),\n loadTechnical: () => import('./docs/client.technical').then(m => m.default),\n },\n audit: {\n load: () => import('./docs/audit.usage').then(m => m.default),\n loadTechnical: () => import('./docs/audit.technical').then(m => m.default),\n },\n loginAttempts: {\n load: () => import('./docs/login-attempts.usage').then(m => m.default),\n loadTechnical: () => import('./docs/login-attempts.technical').then(m => m.default),\n },\n};\n\n// Cada app consumidora chama isso uma vez no bootstrap (mesmo padrão do\n// provideAuth do @orfeu/angular) informando só a URL do argos-admin-server --\n// o resto vem pronto: rotas/serviço (@trismegisto/spine/auto-service) E a própria\n// ligação com os itens de menu, registrada aqui via source_template_router_id (não\n// route_id -- esse varia por client, ver ComponentDistributorService). O app não\n// precisa (e não deve) declarar nada em features.routes.ts pra isso funcionar; basta\n// o client dele estar vinculado ao template \"auto-service\" (auth.clients.template_id).\n// 6 páginas (Início + Grupos/Aplicações/Cliente + Ações/Tentativas de login no menu Auditoria) -- o ComponentDistributorService\n// já suporta N entradas, cada uma casando pelo seu próprio source_template_router_id.\nexport function provideAutoService(config: AutoServiceConfig): EnvironmentProviders {\n const componentRoutes: ComponentRoute[] = [\n { source_template_router_id: AUTO_SERVICE_HOME_TEMPLATE_ROUTER_ID, load: AUTO_SERVICE_SCREENS.home, document: AUTO_SERVICE_DOCUMENTS.home },\n { source_template_router_id: AUTO_SERVICE_GROUPS_TEMPLATE_ROUTER_ID, load: AUTO_SERVICE_SCREENS.groups, document: AUTO_SERVICE_DOCUMENTS.groups },\n { source_template_router_id: AUTO_SERVICE_APPS_TEMPLATE_ROUTER_ID, load: AUTO_SERVICE_SCREENS.apps, document: AUTO_SERVICE_DOCUMENTS.apps },\n { source_template_router_id: AUTO_SERVICE_CLIENT_TEMPLATE_ROUTER_ID, load: AUTO_SERVICE_SCREENS.client, document: AUTO_SERVICE_DOCUMENTS.client },\n { source_template_router_id: AUTO_SERVICE_AUDIT_TEMPLATE_ROUTER_ID, load: AUTO_SERVICE_SCREENS.audit, document: AUTO_SERVICE_DOCUMENTS.audit },\n { source_template_router_id: AUTO_SERVICE_LOGIN_ATTEMPTS_TEMPLATE_ROUTER_ID, load: AUTO_SERVICE_SCREENS.loginAttempts, document: AUTO_SERVICE_DOCUMENTS.loginAttempts },\n ];\n\n return makeEnvironmentProviders([\n { provide: AUTO_SERVICE_CONFIG, useValue: config },\n // Mesma URL, exposta também para o painel de configurações (tokens de aplicação em /me).\n { provide: SPINE_ADMIN_API, useValue: config.adminApi },\n { provide: COMPONENT_ROUTES, useValue: componentRoutes, multi: true },\n ]);\n}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { AuthorizationService } from '@orfeu/angular/core';\nimport { urlPath } from '@trismegisto/primitives';\nimport { AUTO_SERVICE_CONFIG, AutoServiceConfig } from './auto-service.tokens';\n\n/** Nível de um nó na árvore do menu (`GET /routers/tree`). */\nexport type RouterOrderType = 'header' | 'navigation' | 'menu' | 'item' | 'submenu' | 'page';\n\n/** Nó da árvore do menu: uma rota num nível, com todos os routers que passam por ela. */\nexport interface RouterOrderNode {\n route_type: RouterOrderType;\n routed_id: string;\n route_name: string;\n route_display_name: string | null;\n route_icon: string | null;\n order: number;\n router_ids: string[];\n children: RouterOrderNode[];\n}\n\n/** Um item da ordem nova de um nível (`PATCH /routers/reorder`). */\nexport interface RouterOrderGroup { type: RouterOrderType; router_ids: string[] }\n\n/**\n * Grupo do projeto do client (`GET /groups`). O grupo de administração do projeto (`is_admin`) é gerido só no painel\n * central e o servidor não o devolve aqui; servidor antigo ainda devolve com `is_admin: true` e as telas descartam.\n */\nexport interface AutoServiceGroup {\n id: string;\n name: string;\n description: string | null;\n enabled: boolean;\n is_admin?: boolean;\n type: { id: string; name: string; level: number } | null;\n}\n\n/** Tipo de grupo (crachá) do realm (`GET /group-types`). */\nexport interface AutoServiceGroupType { id: string; name: string; level: number; assignable: boolean }\n\n/** Corpo de `POST /groups` (o projeto é sempre o do client). */\nexport interface AutoServiceGroupCreate { name: string; type_id: string; description?: string }\n\n/** Corpo de `PUT /groups/:groupId`; do grupo de administração só `description`. `null` apaga a descrição. */\nexport interface AutoServiceGroupUpdate { name?: string; type_id?: string; description?: string | null; enabled?: boolean }\n\n/** Aplicação (client_credentials) do projeto do client (`GET /apps`). */\nexport interface AutoServiceApp {\n id: string;\n name: string;\n enabled: boolean;\n allowed_grants?: string[] | null;\n [key: string]: unknown;\n}\n\n/**\n * Token de API (`x-api-token`) de uma aplicação (`GET /apps/:appId/tokens`). O valor só vem na criação; aqui fica o\n * começo dele (`token_prefix`) para reconhecer. Cada token é também um consumer (`consumer_id`) com as permissões dele.\n */\nexport interface AutoServiceAppToken {\n id: string;\n consumer_id: string;\n name: string;\n description: string | null;\n token_prefix: string;\n expires_at: string;\n revoked_at: string | null;\n created_at: string;\n last_used_at: string | null;\n}\n\n/** Corpo de `POST /apps/:appId/tokens`: validade ISO (até 365 dias) e as operações protected liberadas ao token. */\nexport interface AutoServiceAppTokenCreate { name: string; description?: string; expires_at: string; operation_ids?: string[] }\n\n/** Resposta de `POST /apps/:appId/tokens`: `token` é o valor cru, devolvido uma única vez. */\nexport interface AutoServiceAppTokenCreated { id: string; consumer_id: string; name: string; token: string }\n\n@Injectable({ providedIn: 'root' })\nexport class AutoServiceService {\n\n private get baseUrl() {\n return `${this.config.adminApi}/auto-service`;\n }\n\n /** `baseUrl` + caminho com cada id interpolado codificado (`urlPath`): um id com `/`, `?`, `#` ou `..` não muda o recurso. */\n private url(strings: TemplateStringsArray, ...ids: readonly string[]): string {\n return this.baseUrl + urlPath(strings, ...ids);\n }\n\n private get headers(): HttpHeaders {\n const token = this.auth.getToken();\n return new HttpHeaders({ 'x-access-token': token ?? '' });\n }\n\n constructor(\n private http: HttpClient,\n private auth: AuthorizationService,\n @Inject(AUTO_SERVICE_CONFIG) private config: AutoServiceConfig,\n ) {}\n\n // Descoberta\n getMyClients() { return firstValueFrom(this.http.get<{ clients: any[] }>(this.baseUrl, { headers: this.headers })); }\n\n // Routes\n getWebRoutes(clientId: string) { return firstValueFrom(this.http.get<{ routes: any[] }>(this.url`/${clientId}/routes`, { headers: this.headers })); }\n createWebRoute(clientId: string, body: any) { return firstValueFrom(this.http.post<any>(this.url`/${clientId}/routes`, body, { headers: this.headers })); }\n updateWebRoute(clientId: string, id: string, body: any) { return firstValueFrom(this.http.put<any>(this.url`/${clientId}/routes/${id}`, body, { headers: this.headers })); }\n deleteWebRoute(clientId: string, id: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/routes/${id}`, { headers: this.headers })); }\n\n // Routers\n getRouters(clientId: string) { return firstValueFrom(this.http.get<{ routers: any[] }>(this.url`/${clientId}/routers`, { headers: this.headers })); }\n createRouter(clientId: string, body: any) { return firstValueFrom(this.http.post<any>(this.url`/${clientId}/routers`, body, { headers: this.headers })); }\n updateRouter(clientId: string, id: string, body: any) { return firstValueFrom(this.http.put<any>(this.url`/${clientId}/routers/${id}`, body, { headers: this.headers })); }\n deleteRouter(clientId: string, id: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/routers/${id}`, { headers: this.headers })); }\n /** Árvore do menu (header → … → página) com os router_ids de cada nó, já na ordem gravada. */\n getRouterTree(clientId: string) { return firstValueFrom(this.http.get<{ tree: RouterOrderNode[] }>(this.url`/${clientId}/routers/tree`, { headers: this.headers })); }\n /**\n * Grava a ordem de UM nível (irmãos): o índice do grupo é a ordem; cada grupo escreve `${type}_order`\n * em todos os seus routers. Vale também para routers de template (ordem é do client).\n */\n reorderRouters(clientId: string, groups: RouterOrderGroup[]) { return firstValueFrom(this.http.patch<any>(this.url`/${clientId}/routers/reorder`, { groups }, { headers: this.headers })); }\n\n // Groups (do projeto do client, sem o grupo de administração: editar/excluir/membros dele respondem 404)\n getGroups(clientId: string) { return firstValueFrom(this.http.get<{ groups: AutoServiceGroup[] }>(this.url`/${clientId}/groups`, { headers: this.headers })); }\n /** Tipos (crachás) do realm; `assignable: false` no Administrador, que é só do grupo de administração (painel central). */\n getGroupTypes(clientId: string) { return firstValueFrom(this.http.get<{ group_types: AutoServiceGroupType[] }>(this.url`/${clientId}/group-types`, { headers: this.headers })); }\n createGroup(clientId: string, body: AutoServiceGroupCreate) { return firstValueFrom(this.http.post<AutoServiceGroup>(this.url`/${clientId}/groups`, body, { headers: this.headers })); }\n updateGroup(clientId: string, groupId: string, body: AutoServiceGroupUpdate) { return firstValueFrom(this.http.put<AutoServiceGroup>(this.url`/${clientId}/groups/${groupId}`, body, { headers: this.headers })); }\n deleteGroup(clientId: string, groupId: string) { return firstValueFrom(this.http.delete<void>(this.url`/${clientId}/groups/${groupId}`, { headers: this.headers })); }\n getGroupMembers(clientId: string, groupId: string) { return firstValueFrom(this.http.get<{ members: any[] }>(this.url`/${clientId}/groups/${groupId}/members`, { headers: this.headers })); }\n addGroupMember(clientId: string, groupId: string, userId: string, role: string | null) { return firstValueFrom(this.http.post<any>(this.url`/${clientId}/groups/${groupId}/members`, { user_id: userId, role }, { headers: this.headers })); }\n updateGroupMemberRole(clientId: string, groupId: string, userId: string, role: string | null) { return firstValueFrom(this.http.put<any>(this.url`/${clientId}/groups/${groupId}/members/${userId}`, { role }, { headers: this.headers })); }\n removeGroupMember(clientId: string, groupId: string, userId: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/groups/${groupId}/members/${userId}`, { headers: this.headers })); }\n\n // Users (só leitura -- popular a busca de \"adicionar membro\" na aba Grupos, escopada pelo realm do próprio client)\n searchUsers(clientId: string, opts: { search?: string; limit?: number } = {}) {\n let params = new HttpParams();\n if (opts.search) params = params.set('search', opts.search);\n if (opts.limit) params = params.set('limit', String(opts.limit));\n return firstValueFrom(this.http.get<{ users: any[] }>(this.url`/${clientId}/users`, { headers: this.headers, params }));\n }\n\n // Access\n getAccess(clientId: string) { return firstValueFrom(this.http.get<{ access: any[] }>(this.url`/${clientId}/access`, { headers: this.headers })); }\n createAccess(clientId: string, groupId: string) { return firstValueFrom(this.http.post<any>(this.url`/${clientId}/access`, { group_id: groupId }, { headers: this.headers })); }\n deleteAccess(clientId: string, accessId: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/access/${accessId}`, { headers: this.headers })); }\n getGuards(clientId: string, accessId: string) { return firstValueFrom(this.http.get<{ guards: any[] }>(this.url`/${clientId}/access/${accessId}/guards`, { headers: this.headers })); }\n addGuard(clientId: string, accessId: string, routerId: string) { return firstValueFrom(this.http.post<any>(this.url`/${clientId}/access/${accessId}/guards`, { router_id: routerId }, { headers: this.headers })); }\n removeGuard(clientId: string, accessId: string, guardId: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/access/${accessId}/guards/${guardId}`, { headers: this.headers })); }\n\n // Apps (aplicações client_credentials no Project deste client)\n getApps(clientId: string) { return firstValueFrom(this.http.get<{ apps: AutoServiceApp[] }>(this.url`/${clientId}/apps`, { headers: this.headers })); }\n createApp(clientId: string, body: { name: string; allowed_grants?: string[] }) { return firstValueFrom(this.http.post<{ id: string; name: string; secret: string }>(this.url`/${clientId}/apps`, body, { headers: this.headers })); }\n updateApp(clientId: string, appId: string, body: any) { return firstValueFrom(this.http.put<any>(this.url`/${clientId}/apps/${appId}`, body, { headers: this.headers })); }\n /** Gera um segredo novo para a aplicação (o anterior para de valer na hora). A resposta traz o segredo uma única vez. */\n rotateAppSecret(clientId: string, appId: string) { return firstValueFrom(this.http.post<{ id: string; secret: string }>(this.url`/${clientId}/apps/${appId}/secret`, {}, { headers: this.headers })); }\n deleteApp(clientId: string, appId: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/apps/${appId}`, { headers: this.headers })); }\n getAppOperations(clientId: string, appId: string) { return firstValueFrom(this.http.get<{ operations: any[] }>(this.url`/${clientId}/apps/${appId}/operations`, { headers: this.headers })); }\n\n // Tokens de API da aplicação (x-api-token)\n getAppTokens(clientId: string, appId: string) { return firstValueFrom(this.http.get<{ tokens: AutoServiceAppToken[] }>(this.url`/${clientId}/apps/${appId}/tokens`, { headers: this.headers })); }\n /** Cria o token (e o consumer dele, com as permissões escolhidas). A resposta traz o valor uma única vez. */\n createAppToken(clientId: string, appId: string, body: AutoServiceAppTokenCreate) { return firstValueFrom(this.http.post<AutoServiceAppTokenCreated>(this.url`/${clientId}/apps/${appId}/tokens`, body, { headers: this.headers })); }\n /** Revoga: o token para de valer na hora e continua na lista como revogado. */\n revokeAppToken(clientId: string, appId: string, tokenId: string) { return firstValueFrom(this.http.delete<void>(this.url`/${clientId}/apps/${appId}/tokens/${tokenId}`, { headers: this.headers })); }\n\n // Consumers (grupo ↔ aplicação), sem o do grupo de administração: o servidor não o lista e o :consumerId dele é 404\n // (servidor antigo ainda devolve com `group_is_admin: true` e a aba Acessos descarta)\n getAppConsumers(clientId: string, appId: string) { return firstValueFrom(this.http.get<{ consumers: any[] }>(this.url`/${clientId}/apps/${appId}/consumers`, { headers: this.headers })); }\n createAppConsumer(clientId: string, appId: string, groupId: string) { return firstValueFrom(this.http.post<any>(this.url`/${clientId}/apps/${appId}/consumers`, { group_id: groupId }, { headers: this.headers })); }\n deleteAppConsumer(clientId: string, consumerId: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/apps/consumers/${consumerId}`, { headers: this.headers })); }\n\n // Permissions (consumer ↔ operação)\n getAppPermissions(clientId: string, consumerId: string) { return firstValueFrom(this.http.get<{ permissions: any[] }>(this.url`/${clientId}/apps/consumers/${consumerId}/permissions`, { headers: this.headers })); }\n addAppPermission(clientId: string, consumerId: string, operationId: string) { return firstValueFrom(this.http.post<any>(this.url`/${clientId}/apps/consumers/${consumerId}/permissions`, { operation_id: operationId }, { headers: this.headers })); }\n removeAppPermission(clientId: string, consumerId: string, permissionId: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/apps/consumers/${consumerId}/permissions/${permissionId}`, { headers: this.headers })); }\n // Auditoria: ver `SpineAuditService` (`@trismegisto/spine/audit`), o mesmo nos escopos admin e client.\n}\n","export * from './auto-service.tokens';\nexport * from './provide-auto-service';\nexport * from './auto-service.service';\nexport type { AutoServiceClient } from './client-picker/auto-service-client-picker.component';\n// A auditoria (tipos, serviço e a tela) mora em `@trismegisto/spine/audit` — NÃO reexporte daqui: um\n// `export` estático puxaria a tela para o arquivo deste ponto de entrada (ver abaixo e check-lazy).\n// As telas (Início, Grupos, Aplicações, Cliente) e as peças delas NÃO são exportadas daqui de propósito:\n// ficam só atrás dos `import()` de `AUTO_SERVICE_SCREENS`. Qualquer `export` estático de um componente\n// delas faz o rollup do ng-packagr juntar a tela no FESM do ponto de entrada e trocar o `import()` por\n// `Promise.resolve()` — e a tela (data-grid, combobox, drawer...) vai para o bundle inicial de todo app\n// (bug da 0.9.9). `scripts/check-lazy.mjs` (no `npm run build`) falha se isso voltar.\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"trismegisto-spine-auto-service.mjs","sources":["../../../projects/ui/auto-service/src/auto-service.tokens.ts","../../../projects/ui/auto-service/src/provide-auto-service.ts","../../../projects/ui/auto-service/src/auto-service.service.ts","../../../projects/ui/auto-service/src/public-api.ts","../../../projects/ui/auto-service/src/trismegisto-spine-auto-service.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface AutoServiceConfig {\n // Base URL do argos-admin-server (o mesmo backend central que atende\n // /admin/*) -- /auto-service/* já existe lá, escopado por client_id, servindo\n // qualquer aplicação que instale este pacote, não só o argos-admin.\n adminApi: string;\n}\n\nexport const AUTO_SERVICE_CONFIG = new InjectionToken<AutoServiceConfig>('AUTO_SERVICE_CONFIG');\n\n// router_id dos roteadores (páginas) do template \"auto-service\" (web.template_router,\n// ver apps/argos/database/seed/04-web.template_router.sql) -- valores literais e\n// estáveis (mesma convenção do resto do seed: UUID fixo, nunca gerado em runtime). É\n// contra ISSO que o ComponentDistributorService casa via source_template_router_id\n// (não o router_id materializado de cada client, que varia): qualquer client\n// vinculado ao template \"auto-service\" resolve todos automaticamente, sem precisar\n// declarar nada no próprio features.routes.ts. As páginas vivem dentro da navegação\n// \"Administração\" do template (Ações e Tentativas de login num menu \"Auditoria\" dentro\n// dela) -- navegação e menu nunca precisam de componente (nunca são page_id de router).\nexport const AUTO_SERVICE_GROUPS_TEMPLATE_ROUTER_ID = 'ad100001-0000-4000-8000-000000000001';\nexport const AUTO_SERVICE_APPS_TEMPLATE_ROUTER_ID = 'ad100002-0000-4000-8000-000000000001';\nexport const AUTO_SERVICE_CLIENT_TEMPLATE_ROUTER_ID = 'ad100003-0000-4000-8000-000000000001';\n// Menu \"Auditoria\" (rota AD000006, dentro de \"Administração\", migration 0012 do argos): duas páginas.\n// Ações (a leitura da auditoria, `audit.events`) -- o nome da constante ficou do tempo em que era a página \"Auditoria\".\nexport const AUTO_SERVICE_AUDIT_TEMPLATE_ROUTER_ID = 'ad100004-0000-4000-8000-000000000001';\n// Tentativas de login (`auth.auth_attempts` com o client do app).\nexport const AUTO_SERVICE_LOGIN_ATTEMPTS_TEMPLATE_ROUTER_ID = 'ad100005-0000-4000-8000-000000000001';\n// Início (\"home\", página de topo e pública do mesmo template). Todo client clonado do\n// template ganha a própria linha em web.router com source_template_router_id apontando pra cá.\nexport const AUTO_SERVICE_HOME_TEMPLATE_ROUTER_ID = '6a9a13db-f31b-494e-b51c-79af0ac28b60';\n","import { EnvironmentProviders, Type, makeEnvironmentProviders } from '@angular/core';\nimport { COMPONENT_ROUTES, ComponentRoute, RouteDocument } from '@trismegisto/spine/routing';\nimport { SPINE_ADMIN_API } from '@trismegisto/spine';\nimport {\n AUTO_SERVICE_CONFIG, AutoServiceConfig,\n AUTO_SERVICE_GROUPS_TEMPLATE_ROUTER_ID, AUTO_SERVICE_APPS_TEMPLATE_ROUTER_ID, AUTO_SERVICE_CLIENT_TEMPLATE_ROUTER_ID,\n AUTO_SERVICE_HOME_TEMPLATE_ROUTER_ID, AUTO_SERVICE_AUDIT_TEMPLATE_ROUTER_ID, AUTO_SERVICE_LOGIN_ATTEMPTS_TEMPLATE_ROUTER_ID,\n} from './auto-service.tokens';\n\n/**\n * As 6 telas do auto-serviço, carregadas sob demanda. Cada `import()` relativo vira um chunk próprio no\n * FESM publicado (`trismegisto-spine-auto-service-<tela>-<hash>.mjs`), que o bundler do app mantém fora\n * do carregamento inicial. Não exporte as telas no `public-api.ts` (ver o comentário lá).\n */\nexport const AUTO_SERVICE_SCREENS: Readonly<Record<'home' | 'groups' | 'apps' | 'client' | 'audit' | 'loginAttempts', () => Promise<Type<unknown>>>> = {\n home: () => import('./home/home.component').then(m => m.HomeComponent),\n groups: () => import('./groups/auto-service-groups.component').then(m => m.AutoServiceGroupsComponent),\n apps: () => import('./auto-service.component').then(m => m.AutoServiceComponent),\n client: () => import('./auto-service-client.component').then(m => m.AutoServiceClientComponent),\n audit: () => import('./audit/auto-service-audit.component').then(m => m.AutoServiceAuditComponent),\n loginAttempts: () => import('./audit/auto-service-login-attempts.component').then(m => m.AutoServiceLoginAttemptsComponent),\n};\n\n/**\n * Documentação das 6 telas (botão de documentação da barra da página e índice \"Documentação do sistema\"): o manual\n * de uso (`load`) e a especificação técnica (`loadTechnical`, só com `SpineConfig.technicalDocs`). O Markdown fica em\n * módulos `.ts` próprios em `./docs/` (o ng-packagr não carrega `.md` como texto), cada um atrás de um `import()`\n * relativo: vira um chunk à parte no FESM e só é baixado quando alguém abre o documento. Sem `title`/`group`: o\n * índice usa o nome da rota e o módulo da árvore do client. O `SpineDocsService` casa estas entradas pelo\n * `source_template_router_id`, como o `ComponentDistributorService` faz com as telas.\n */\nexport const AUTO_SERVICE_DOCUMENTS: Readonly<Record<keyof typeof AUTO_SERVICE_SCREENS, RouteDocument>> = {\n home: {\n load: () => import('./docs/home.usage').then(m => m.default),\n loadTechnical: () => import('./docs/home.technical').then(m => m.default),\n },\n groups: {\n load: () => import('./docs/groups.usage').then(m => m.default),\n loadTechnical: () => import('./docs/groups.technical').then(m => m.default),\n },\n apps: {\n load: () => import('./docs/apps.usage').then(m => m.default),\n loadTechnical: () => import('./docs/apps.technical').then(m => m.default),\n },\n client: {\n load: () => import('./docs/client.usage').then(m => m.default),\n loadTechnical: () => import('./docs/client.technical').then(m => m.default),\n },\n audit: {\n load: () => import('./docs/audit.usage').then(m => m.default),\n loadTechnical: () => import('./docs/audit.technical').then(m => m.default),\n },\n loginAttempts: {\n load: () => import('./docs/login-attempts.usage').then(m => m.default),\n loadTechnical: () => import('./docs/login-attempts.technical').then(m => m.default),\n },\n};\n\n// Cada app consumidora chama isso uma vez no bootstrap (mesmo padrão do\n// provideAuth do @orfeu/angular) informando só a URL do argos-admin-server --\n// o resto vem pronto: rotas/serviço (@trismegisto/spine/auto-service) E a própria\n// ligação com os itens de menu, registrada aqui via source_template_router_id (não\n// route_id -- esse varia por client, ver ComponentDistributorService). O app não\n// precisa (e não deve) declarar nada em features.routes.ts pra isso funcionar; basta\n// o client dele estar vinculado ao template \"auto-service\" (auth.clients.template_id).\n// 6 páginas (Início + Grupos/Aplicações/Cliente + Ações/Tentativas de login no menu Auditoria) -- o ComponentDistributorService\n// já suporta N entradas, cada uma casando pelo seu próprio source_template_router_id.\nexport function provideAutoService(config: AutoServiceConfig): EnvironmentProviders {\n const componentRoutes: ComponentRoute[] = [\n { source_template_router_id: AUTO_SERVICE_HOME_TEMPLATE_ROUTER_ID, load: AUTO_SERVICE_SCREENS.home, document: AUTO_SERVICE_DOCUMENTS.home },\n { source_template_router_id: AUTO_SERVICE_GROUPS_TEMPLATE_ROUTER_ID, load: AUTO_SERVICE_SCREENS.groups, document: AUTO_SERVICE_DOCUMENTS.groups },\n { source_template_router_id: AUTO_SERVICE_APPS_TEMPLATE_ROUTER_ID, load: AUTO_SERVICE_SCREENS.apps, document: AUTO_SERVICE_DOCUMENTS.apps },\n { source_template_router_id: AUTO_SERVICE_CLIENT_TEMPLATE_ROUTER_ID, load: AUTO_SERVICE_SCREENS.client, document: AUTO_SERVICE_DOCUMENTS.client },\n { source_template_router_id: AUTO_SERVICE_AUDIT_TEMPLATE_ROUTER_ID, load: AUTO_SERVICE_SCREENS.audit, document: AUTO_SERVICE_DOCUMENTS.audit },\n { source_template_router_id: AUTO_SERVICE_LOGIN_ATTEMPTS_TEMPLATE_ROUTER_ID, load: AUTO_SERVICE_SCREENS.loginAttempts, document: AUTO_SERVICE_DOCUMENTS.loginAttempts },\n ];\n\n return makeEnvironmentProviders([\n { provide: AUTO_SERVICE_CONFIG, useValue: config },\n // Mesma URL, exposta também para o painel de configurações (tokens de aplicação em /me).\n { provide: SPINE_ADMIN_API, useValue: config.adminApi },\n { provide: COMPONENT_ROUTES, useValue: componentRoutes, multi: true },\n ]);\n}\n","import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { AuthorizationService } from '@orfeu/angular/core';\nimport { urlPath } from '@trismegisto/primitives';\nimport { AUTO_SERVICE_CONFIG, AutoServiceConfig } from './auto-service.tokens';\n\n/** Nível de um nó na árvore do menu (`GET /routers/tree`). */\nexport type RouterOrderType = 'header' | 'navigation' | 'menu' | 'item' | 'submenu' | 'page';\n\n/** Nó da árvore do menu: uma rota num nível, com todos os routers que passam por ela. */\nexport interface RouterOrderNode {\n route_type: RouterOrderType;\n routed_id: string;\n route_name: string;\n route_display_name: string | null;\n route_icon: string | null;\n order: number;\n router_ids: string[];\n children: RouterOrderNode[];\n}\n\n/** Um item da ordem nova de um nível (`PATCH /routers/reorder`). */\nexport interface RouterOrderGroup { type: RouterOrderType; router_ids: string[] }\n\n/**\n * Grupo do projeto do client (`GET /groups`). O grupo de administração do projeto (`is_admin`) é gerido só no painel\n * central e o servidor não o devolve aqui; servidor antigo ainda devolve com `is_admin: true` e as telas descartam.\n */\nexport interface AutoServiceGroup {\n id: string;\n name: string;\n description: string | null;\n enabled: boolean;\n is_admin?: boolean;\n type: { id: string; name: string; level: number } | null;\n}\n\n/** Tipo de grupo (crachá) do realm (`GET /group-types`). */\nexport interface AutoServiceGroupType { id: string; name: string; level: number; assignable: boolean }\n\n/** Corpo de `POST /groups` (o projeto é sempre o do client). */\nexport interface AutoServiceGroupCreate { group_id?: string; name: string; type_id: string; description?: string }\n\n/** Corpo de `PUT /groups/:groupId`; do grupo de administração só `description`. `null` apaga a descrição. */\nexport interface AutoServiceGroupUpdate { name?: string; type_id?: string; description?: string | null; enabled?: boolean }\n\n/** Aplicação (client_credentials) do projeto do client (`GET /apps`). */\nexport interface AutoServiceApp {\n id: string;\n name: string;\n enabled: boolean;\n allowed_grants?: string[] | null;\n [key: string]: unknown;\n}\n\n/**\n * Token de API (`x-api-token`) de uma aplicação (`GET /apps/:appId/tokens`). O valor só vem na criação; aqui fica o\n * começo dele (`token_prefix`) para reconhecer. Cada token é também um consumer (`consumer_id`) com as permissões dele.\n */\nexport interface AutoServiceAppToken {\n id: string;\n consumer_id: string;\n name: string;\n description: string | null;\n token_prefix: string;\n expires_at: string;\n revoked_at: string | null;\n created_at: string;\n last_used_at: string | null;\n}\n\n/** Corpo de `POST /apps/:appId/tokens`: validade ISO (até 365 dias) e as operações protected liberadas ao token. */\nexport interface AutoServiceAppTokenCreate { name: string; description?: string; expires_at: string; operation_ids?: string[] }\n\n/** Resposta de `POST /apps/:appId/tokens`: `token` é o valor cru, devolvido uma única vez. */\nexport interface AutoServiceAppTokenCreated { id: string; consumer_id: string; name: string; token: string }\n\n@Injectable({ providedIn: 'root' })\nexport class AutoServiceService {\n\n private get baseUrl() {\n return `${this.config.adminApi}/auto-service`;\n }\n\n /** `baseUrl` + caminho com cada id interpolado codificado (`urlPath`): um id com `/`, `?`, `#` ou `..` não muda o recurso. */\n private url(strings: TemplateStringsArray, ...ids: readonly string[]): string {\n return this.baseUrl + urlPath(strings, ...ids);\n }\n\n private get headers(): HttpHeaders {\n const token = this.auth.getToken();\n return new HttpHeaders({ 'x-access-token': token ?? '' });\n }\n\n constructor(\n private http: HttpClient,\n private auth: AuthorizationService,\n @Inject(AUTO_SERVICE_CONFIG) private config: AutoServiceConfig,\n ) {}\n\n // Descoberta\n getMyClients() { return firstValueFrom(this.http.get<{ clients: any[] }>(this.baseUrl, { headers: this.headers })); }\n\n // Routes\n getWebRoutes(clientId: string) { return firstValueFrom(this.http.get<{ routes: any[] }>(this.url`/${clientId}/routes`, { headers: this.headers })); }\n createWebRoute(clientId: string, body: any) { return firstValueFrom(this.http.post<any>(this.url`/${clientId}/routes`, body, { headers: this.headers })); }\n updateWebRoute(clientId: string, id: string, body: any) { return firstValueFrom(this.http.put<any>(this.url`/${clientId}/routes/${id}`, body, { headers: this.headers })); }\n deleteWebRoute(clientId: string, id: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/routes/${id}`, { headers: this.headers })); }\n\n // Routers\n getRouters(clientId: string) { return firstValueFrom(this.http.get<{ routers: any[] }>(this.url`/${clientId}/routers`, { headers: this.headers })); }\n createRouter(clientId: string, body: any) { return firstValueFrom(this.http.post<any>(this.url`/${clientId}/routers`, body, { headers: this.headers })); }\n updateRouter(clientId: string, id: string, body: any) { return firstValueFrom(this.http.put<any>(this.url`/${clientId}/routers/${id}`, body, { headers: this.headers })); }\n deleteRouter(clientId: string, id: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/routers/${id}`, { headers: this.headers })); }\n /** Árvore do menu (header → … → página) com os router_ids de cada nó, já na ordem gravada. */\n getRouterTree(clientId: string) { return firstValueFrom(this.http.get<{ tree: RouterOrderNode[] }>(this.url`/${clientId}/routers/tree`, { headers: this.headers })); }\n /**\n * Grava a ordem de UM nível (irmãos): o índice do grupo é a ordem; cada grupo escreve `${type}_order`\n * em todos os seus routers. Vale também para routers de template (ordem é do client).\n */\n reorderRouters(clientId: string, groups: RouterOrderGroup[]) { return firstValueFrom(this.http.patch<any>(this.url`/${clientId}/routers/reorder`, { groups }, { headers: this.headers })); }\n\n // Groups (do projeto do client, sem o grupo de administração: editar/excluir/membros dele respondem 404)\n getGroups(clientId: string) { return firstValueFrom(this.http.get<{ groups: AutoServiceGroup[] }>(this.url`/${clientId}/groups`, { headers: this.headers })); }\n /** Tipos (crachás) do realm; `assignable: false` no Administrador, que é só do grupo de administração (painel central). */\n getGroupTypes(clientId: string) { return firstValueFrom(this.http.get<{ group_types: AutoServiceGroupType[] }>(this.url`/${clientId}/group-types`, { headers: this.headers })); }\n createGroup(clientId: string, body: AutoServiceGroupCreate) { return firstValueFrom(this.http.post<AutoServiceGroup>(this.url`/${clientId}/groups`, body, { headers: this.headers })); }\n updateGroup(clientId: string, groupId: string, body: AutoServiceGroupUpdate) { return firstValueFrom(this.http.put<AutoServiceGroup>(this.url`/${clientId}/groups/${groupId}`, body, { headers: this.headers })); }\n deleteGroup(clientId: string, groupId: string) { return firstValueFrom(this.http.delete<void>(this.url`/${clientId}/groups/${groupId}`, { headers: this.headers })); }\n getGroupMembers(clientId: string, groupId: string) { return firstValueFrom(this.http.get<{ members: any[] }>(this.url`/${clientId}/groups/${groupId}/members`, { headers: this.headers })); }\n addGroupMember(clientId: string, groupId: string, userId: string, role: string | null) { return firstValueFrom(this.http.post<any>(this.url`/${clientId}/groups/${groupId}/members`, { user_id: userId, role }, { headers: this.headers })); }\n updateGroupMemberRole(clientId: string, groupId: string, userId: string, role: string | null) { return firstValueFrom(this.http.put<any>(this.url`/${clientId}/groups/${groupId}/members/${userId}`, { role }, { headers: this.headers })); }\n removeGroupMember(clientId: string, groupId: string, userId: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/groups/${groupId}/members/${userId}`, { headers: this.headers })); }\n\n // Users (só leitura -- popular a busca de \"adicionar membro\" na aba Grupos, escopada pelo realm do próprio client)\n searchUsers(clientId: string, opts: { search?: string; limit?: number } = {}) {\n let params = new HttpParams();\n if (opts.search) params = params.set('search', opts.search);\n if (opts.limit) params = params.set('limit', String(opts.limit));\n return firstValueFrom(this.http.get<{ users: any[] }>(this.url`/${clientId}/users`, { headers: this.headers, params }));\n }\n\n // Access\n getAccess(clientId: string) { return firstValueFrom(this.http.get<{ access: any[] }>(this.url`/${clientId}/access`, { headers: this.headers })); }\n createAccess(clientId: string, groupId: string) { return firstValueFrom(this.http.post<any>(this.url`/${clientId}/access`, { group_id: groupId }, { headers: this.headers })); }\n deleteAccess(clientId: string, accessId: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/access/${accessId}`, { headers: this.headers })); }\n getGuards(clientId: string, accessId: string) { return firstValueFrom(this.http.get<{ guards: any[] }>(this.url`/${clientId}/access/${accessId}/guards`, { headers: this.headers })); }\n addGuard(clientId: string, accessId: string, routerId: string) { return firstValueFrom(this.http.post<any>(this.url`/${clientId}/access/${accessId}/guards`, { router_id: routerId }, { headers: this.headers })); }\n removeGuard(clientId: string, accessId: string, guardId: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/access/${accessId}/guards/${guardId}`, { headers: this.headers })); }\n\n // Apps (aplicações client_credentials no Project deste client)\n getApps(clientId: string) { return firstValueFrom(this.http.get<{ apps: AutoServiceApp[] }>(this.url`/${clientId}/apps`, { headers: this.headers })); }\n createApp(clientId: string, body: { name: string; allowed_grants?: string[] }) { return firstValueFrom(this.http.post<{ id: string; name: string; secret: string }>(this.url`/${clientId}/apps`, body, { headers: this.headers })); }\n updateApp(clientId: string, appId: string, body: any) { return firstValueFrom(this.http.put<any>(this.url`/${clientId}/apps/${appId}`, body, { headers: this.headers })); }\n /** Gera um segredo novo para a aplicação (o anterior para de valer na hora). A resposta traz o segredo uma única vez. */\n rotateAppSecret(clientId: string, appId: string) { return firstValueFrom(this.http.post<{ id: string; secret: string }>(this.url`/${clientId}/apps/${appId}/secret`, {}, { headers: this.headers })); }\n deleteApp(clientId: string, appId: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/apps/${appId}`, { headers: this.headers })); }\n getAppOperations(clientId: string, appId: string) { return firstValueFrom(this.http.get<{ operations: any[] }>(this.url`/${clientId}/apps/${appId}/operations`, { headers: this.headers })); }\n\n // Tokens de API da aplicação (x-api-token)\n getAppTokens(clientId: string, appId: string) { return firstValueFrom(this.http.get<{ tokens: AutoServiceAppToken[] }>(this.url`/${clientId}/apps/${appId}/tokens`, { headers: this.headers })); }\n /** Cria o token (e o consumer dele, com as permissões escolhidas). A resposta traz o valor uma única vez. */\n createAppToken(clientId: string, appId: string, body: AutoServiceAppTokenCreate) { return firstValueFrom(this.http.post<AutoServiceAppTokenCreated>(this.url`/${clientId}/apps/${appId}/tokens`, body, { headers: this.headers })); }\n /** Revoga: o token para de valer na hora e continua na lista como revogado. */\n revokeAppToken(clientId: string, appId: string, tokenId: string) { return firstValueFrom(this.http.delete<void>(this.url`/${clientId}/apps/${appId}/tokens/${tokenId}`, { headers: this.headers })); }\n\n // Consumers (grupo ↔ aplicação), sem o do grupo de administração: o servidor não o lista e o :consumerId dele é 404\n // (servidor antigo ainda devolve com `group_is_admin: true` e a aba Acessos descarta)\n getAppConsumers(clientId: string, appId: string) { return firstValueFrom(this.http.get<{ consumers: any[] }>(this.url`/${clientId}/apps/${appId}/consumers`, { headers: this.headers })); }\n createAppConsumer(clientId: string, appId: string, groupId: string) { return firstValueFrom(this.http.post<any>(this.url`/${clientId}/apps/${appId}/consumers`, { group_id: groupId }, { headers: this.headers })); }\n deleteAppConsumer(clientId: string, consumerId: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/apps/consumers/${consumerId}`, { headers: this.headers })); }\n\n // Permissions (consumer ↔ operação)\n getAppPermissions(clientId: string, consumerId: string) { return firstValueFrom(this.http.get<{ permissions: any[] }>(this.url`/${clientId}/apps/consumers/${consumerId}/permissions`, { headers: this.headers })); }\n addAppPermission(clientId: string, consumerId: string, operationId: string) { return firstValueFrom(this.http.post<any>(this.url`/${clientId}/apps/consumers/${consumerId}/permissions`, { operation_id: operationId }, { headers: this.headers })); }\n removeAppPermission(clientId: string, consumerId: string, permissionId: string) { return firstValueFrom(this.http.delete<any>(this.url`/${clientId}/apps/consumers/${consumerId}/permissions/${permissionId}`, { headers: this.headers })); }\n // Auditoria: ver `SpineAuditService` (`@trismegisto/spine/audit`), o mesmo nos escopos admin e client.\n}\n","export * from './auto-service.tokens';\nexport * from './provide-auto-service';\nexport * from './auto-service.service';\nexport type { AutoServiceClient } from './client-picker/auto-service-client-picker.component';\n// A auditoria (tipos, serviço e a tela) mora em `@trismegisto/spine/audit` — NÃO reexporte daqui: um\n// `export` estático puxaria a tela para o arquivo deste ponto de entrada (ver abaixo e check-lazy).\n// As telas (Início, Grupos, Aplicações, Cliente) e as peças delas NÃO são exportadas daqui de propósito:\n// ficam só atrás dos `import()` de `AUTO_SERVICE_SCREENS`. Qualquer `export` estático de um componente\n// delas faz o rollup do ng-packagr juntar a tela no FESM do ponto de entrada e trocar o `import()` por\n// `Promise.resolve()` — e a tela (data-grid, combobox, drawer...) vai para o bundle inicial de todo app\n// (bug da 0.9.9). `scripts/check-lazy.mjs` (no `npm run build`) falha se isso voltar.\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1540,6 +1540,8 @@ const SPINE_MESSAGES_PT_BR = {
|
|
|
1540
1540
|
tabRouters: 'Roteadores',
|
|
1541
1541
|
tabAccess: 'Acesso',
|
|
1542
1542
|
noClients: 'Você não administra este app. É preciso (a) estar no grupo de administração do projeto dele e (b) estar logado com o crachá <strong>Administrador</strong> ativo. Troque de crachá no menu do seu perfil, se disponível, ou peça acesso a quem administra o projeto.',
|
|
1543
|
+
clientsLoadError: 'Não foi possível carregar os clients que você administra (HTTP {status}). Isso não é falta de permissão: o Argos não respondeu. Tente de novo em instantes.',
|
|
1544
|
+
retryLoad: 'Tentar de novo',
|
|
1543
1545
|
pickClient: 'Selecione o client que deseja administrar',
|
|
1544
1546
|
groupsTitle: 'Grupos',
|
|
1545
1547
|
groupsIntro: 'Crie, edite e exclua os grupos deste client e gerencie os membros — sem depender do painel central.',
|
|
@@ -1599,6 +1601,12 @@ const SPINE_MESSAGES_PT_BR = {
|
|
|
1599
1601
|
noAppAccess: 'Nenhum grupo com acesso a esta aplicação ainda.',
|
|
1600
1602
|
colType: 'Tipo',
|
|
1601
1603
|
manageOperations: 'Gerenciar operações',
|
|
1604
|
+
colOperations: 'Operações',
|
|
1605
|
+
colGuards: 'Guards',
|
|
1606
|
+
filterOperations: 'Filtrar operações',
|
|
1607
|
+
filterRoutes: 'Filtrar rotas',
|
|
1608
|
+
noFilterMatch: 'Nada encontrado para “{term}”.',
|
|
1609
|
+
routesTreeLabel: 'Rotas privadas',
|
|
1602
1610
|
operationsOf: 'Operações de {group}',
|
|
1603
1611
|
noOperations: 'Nenhuma operação registrada para esta aplicação ainda.',
|
|
1604
1612
|
operationsCaption: 'Operações registradas',
|
|
@@ -1626,7 +1634,7 @@ const SPINE_MESSAGES_PT_BR = {
|
|
|
1626
1634
|
routerDescription: 'Descrição',
|
|
1627
1635
|
routerDescriptionHint: 'O que a tela faz, em uma frase. Aparece abaixo do título, na barra da página. Em roteador herdado de template, o texto do template prevalece no próximo sync.',
|
|
1628
1636
|
colPage: 'Página',
|
|
1629
|
-
colBuiltPath: 'Caminho
|
|
1637
|
+
colBuiltPath: 'Caminho',
|
|
1630
1638
|
colVisibility: 'Visibilidade',
|
|
1631
1639
|
colAllowedBadges: 'Crachás permitidos',
|
|
1632
1640
|
anyBadge: 'Qualquer crachá',
|
|
@@ -1649,6 +1657,11 @@ const SPINE_MESSAGES_PT_BR = {
|
|
|
1649
1657
|
pathPlaceholder: 'ex.: dashboard',
|
|
1650
1658
|
pathHint: 'Um trecho só do endereço: letras minúsculas e hífen. O "/" entre níveis é o roteador que monta.',
|
|
1651
1659
|
pathInvalid: 'Use só letras minúsculas (a–z) e hífen, sem "/", espaço, número ou acento, e sem hífen no início ou no fim.',
|
|
1660
|
+
optionalId: 'ID (opcional)',
|
|
1661
|
+
optionalIdPlaceholder: 'gerado automaticamente',
|
|
1662
|
+
optionalIdHint: 'Para manter homologação e produção com o mesmo id, cole o id do outro ambiente; vazio = gerado.',
|
|
1663
|
+
optionalIdInvalid: 'Informe um UUID (ex.: 7c92cf1e-ee8d-49cc-85f8-355a3d6e4b86) ou deixe vazio.',
|
|
1664
|
+
idTaken: 'Já existe um cadastro com este id. Use outro ou deixe o campo vazio.',
|
|
1652
1665
|
rotateSecret: 'Gerar novo segredo',
|
|
1653
1666
|
confirmRotateSecretHeading: 'Gerar um novo segredo?',
|
|
1654
1667
|
confirmRotateSecret: 'O segredo atual deixa de funcionar na hora; atualize o APP_SECRET do serviço que usa esta aplicação. Tokens já emitidos valem até expirar (até 1 hora).',
|
|
@@ -1678,9 +1691,13 @@ const SPINE_MESSAGES_PT_BR = {
|
|
|
1678
1691
|
excludableYes: 'Sim',
|
|
1679
1692
|
excludableNo: 'Não',
|
|
1680
1693
|
colName: 'Nome',
|
|
1681
|
-
colDisplay: '
|
|
1694
|
+
colDisplay: 'Display',
|
|
1682
1695
|
colIcon: 'Ícone',
|
|
1683
1696
|
colPath: 'Path',
|
|
1697
|
+
colId: 'ID',
|
|
1698
|
+
copyRouteId: 'Copiar o ID da rota {name}',
|
|
1699
|
+
copyRouterId: 'Copiar o ID do roteador {name}',
|
|
1700
|
+
idCopied: 'ID copiado',
|
|
1684
1701
|
reorder: 'Reordenar',
|
|
1685
1702
|
reorderTitle: 'Reordenar menu',
|
|
1686
1703
|
reorderHint: 'Mude a ordem em que os itens aparecem no menu do app: arraste pela alça (ou, no teclado, Espaço na alça e as setas) ou use os botões de subir e descer. Para ordenar o que fica dentro de um item, entre nele.',
|
|
@@ -1704,7 +1721,7 @@ const SPINE_MESSAGES_PT_BR = {
|
|
|
1704
1721
|
pickAccessLevel: 'Selecione o nível',
|
|
1705
1722
|
noLevel: 'Sem nível',
|
|
1706
1723
|
noGroupsOfLevel: 'Nenhum grupo neste nível.',
|
|
1707
|
-
colStatus: '
|
|
1724
|
+
colStatus: 'Status',
|
|
1708
1725
|
groupName: 'Nome',
|
|
1709
1726
|
groupType: 'Tipo',
|
|
1710
1727
|
groupTypePlaceholder: 'Selecione o tipo',
|
|
@@ -2603,6 +2620,8 @@ const SPINE_MESSAGES_EN = {
|
|
|
2603
2620
|
tabRouters: 'Routers',
|
|
2604
2621
|
tabAccess: 'Access',
|
|
2605
2622
|
noClients: "You don't manage this app. You need to (a) be in its project's administration group and (b) be signed in with the <strong>Administrator</strong> badge active. Switch badges in your profile menu, if available, or ask whoever manages the project for access.",
|
|
2623
|
+
clientsLoadError: 'Could not load the clients you administer (HTTP {status}). This is not a permission issue: Argos did not respond. Try again in a moment.',
|
|
2624
|
+
retryLoad: 'Try again',
|
|
2606
2625
|
pickClient: 'Select the client you want to manage',
|
|
2607
2626
|
groupsTitle: 'Groups',
|
|
2608
2627
|
groupsIntro: "Create, edit and delete this client's groups and manage their members — without relying on the central panel.",
|
|
@@ -2662,6 +2681,12 @@ const SPINE_MESSAGES_EN = {
|
|
|
2662
2681
|
noAppAccess: 'No group has access to this application yet.',
|
|
2663
2682
|
colType: 'Type',
|
|
2664
2683
|
manageOperations: 'Manage operations',
|
|
2684
|
+
colOperations: 'Operations',
|
|
2685
|
+
colGuards: 'Guards',
|
|
2686
|
+
filterOperations: 'Filter operations',
|
|
2687
|
+
filterRoutes: 'Filter routes',
|
|
2688
|
+
noFilterMatch: 'Nothing matches “{term}”.',
|
|
2689
|
+
routesTreeLabel: 'Private routes',
|
|
2665
2690
|
operationsOf: 'Operations for {group}',
|
|
2666
2691
|
noOperations: 'No operation registered for this application yet.',
|
|
2667
2692
|
operationsCaption: 'Registered operations',
|
|
@@ -2712,6 +2737,11 @@ const SPINE_MESSAGES_EN = {
|
|
|
2712
2737
|
pathPlaceholder: 'e.g.: dashboard',
|
|
2713
2738
|
pathHint: 'A single piece of the address: lowercase letters and hyphens. The router adds the "/" between levels.',
|
|
2714
2739
|
pathInvalid: 'Use only lowercase letters (a–z) and hyphens — no "/", spaces, digits or accents, and no hyphen at the start or end.',
|
|
2740
|
+
optionalId: 'ID (optional)',
|
|
2741
|
+
optionalIdPlaceholder: 'generated automatically',
|
|
2742
|
+
optionalIdHint: 'To keep staging and production with the same id, paste the id from the other environment; empty = generated.',
|
|
2743
|
+
optionalIdInvalid: 'Enter a UUID (e.g. 7c92cf1e-ee8d-49cc-85f8-355a3d6e4b86) or leave it empty.',
|
|
2744
|
+
idTaken: 'This id is already in use. Choose another or leave the field empty.',
|
|
2715
2745
|
rotateSecret: 'Generate new secret',
|
|
2716
2746
|
confirmRotateSecretHeading: 'Generate a new secret?',
|
|
2717
2747
|
confirmRotateSecret: 'The current secret stops working right away; update the APP_SECRET of the service that uses this application. Tokens already issued stay valid until they expire (up to 1 hour).',
|
|
@@ -2744,6 +2774,10 @@ const SPINE_MESSAGES_EN = {
|
|
|
2744
2774
|
colDisplay: 'Display',
|
|
2745
2775
|
colIcon: 'Icon',
|
|
2746
2776
|
colPath: 'Path',
|
|
2777
|
+
colId: 'ID',
|
|
2778
|
+
copyRouteId: 'Copy the ID of route {name}',
|
|
2779
|
+
copyRouterId: 'Copy the ID of router {name}',
|
|
2780
|
+
idCopied: 'ID copied',
|
|
2747
2781
|
reorder: 'Reorder',
|
|
2748
2782
|
reorderTitle: 'Reorder menu',
|
|
2749
2783
|
reorderHint: 'Change the order in which items appear in the app menu: drag by the handle (or, on the keyboard, Space on the handle and the arrow keys) or use the up and down buttons. To order what sits inside an item, open it.',
|
|
@@ -3666,6 +3700,8 @@ const SPINE_MESSAGES_ES = {
|
|
|
3666
3700
|
tabRouters: 'Enrutadores',
|
|
3667
3701
|
tabAccess: 'Acceso',
|
|
3668
3702
|
noClients: 'No administras esta app. Necesitas (a) estar en el grupo de administración de su proyecto y (b) haber iniciado sesión con la credencial <strong>Administrador</strong> activa. Cambia de credencial en el menú de tu perfil, si está disponible, o pide acceso a quien administra el proyecto.',
|
|
3703
|
+
clientsLoadError: 'No fue posible cargar los clients que administra (HTTP {status}). No es falta de permiso: Argos no respondió. Inténtelo de nuevo en un momento.',
|
|
3704
|
+
retryLoad: 'Intentar de nuevo',
|
|
3669
3705
|
pickClient: 'Selecciona el client que quieres administrar',
|
|
3670
3706
|
groupsTitle: 'Grupos',
|
|
3671
3707
|
groupsIntro: 'Crea, edita y elimina los grupos de este client y gestiona sus miembros — sin depender del panel central.',
|
|
@@ -3725,6 +3761,12 @@ const SPINE_MESSAGES_ES = {
|
|
|
3725
3761
|
noAppAccess: 'Ningún grupo tiene acceso a esta aplicación todavía.',
|
|
3726
3762
|
colType: 'Tipo',
|
|
3727
3763
|
manageOperations: 'Gestionar operaciones',
|
|
3764
|
+
colOperations: 'Operaciones',
|
|
3765
|
+
colGuards: 'Guards',
|
|
3766
|
+
filterOperations: 'Filtrar operaciones',
|
|
3767
|
+
filterRoutes: 'Filtrar rutas',
|
|
3768
|
+
noFilterMatch: 'Nada coincide con “{term}”.',
|
|
3769
|
+
routesTreeLabel: 'Rutas privadas',
|
|
3728
3770
|
operationsOf: 'Operaciones de {group}',
|
|
3729
3771
|
noOperations: 'Ninguna operación registrada para esta aplicación todavía.',
|
|
3730
3772
|
operationsCaption: 'Operaciones registradas',
|
|
@@ -3775,6 +3817,11 @@ const SPINE_MESSAGES_ES = {
|
|
|
3775
3817
|
pathPlaceholder: 'ej.: dashboard',
|
|
3776
3818
|
pathHint: 'Un solo tramo de la dirección: letras minúsculas y guion. El "/" entre niveles lo arma el enrutador.',
|
|
3777
3819
|
pathInvalid: 'Usa solo letras minúsculas (a–z) y guion — sin "/", espacios, números ni acentos, y sin guion al inicio o al final.',
|
|
3820
|
+
optionalId: 'ID (opcional)',
|
|
3821
|
+
optionalIdPlaceholder: 'generado automáticamente',
|
|
3822
|
+
optionalIdHint: 'Para mantener homologación y producción con el mismo id, pega el id del otro entorno; vacío = generado.',
|
|
3823
|
+
optionalIdInvalid: 'Indica un UUID (p. ej. 7c92cf1e-ee8d-49cc-85f8-355a3d6e4b86) o déjalo vacío.',
|
|
3824
|
+
idTaken: 'Ya existe un registro con este id. Usa otro o deja el campo vacío.',
|
|
3778
3825
|
rotateSecret: 'Generar nuevo secreto',
|
|
3779
3826
|
confirmRotateSecretHeading: '¿Generar un nuevo secreto?',
|
|
3780
3827
|
confirmRotateSecret: 'El secreto actual deja de funcionar de inmediato; actualice el APP_SECRET del servicio que usa esta aplicación. Los tokens ya emitidos valen hasta que expiren (hasta 1 hora).',
|
|
@@ -3807,6 +3854,10 @@ const SPINE_MESSAGES_ES = {
|
|
|
3807
3854
|
colDisplay: 'Visible',
|
|
3808
3855
|
colIcon: 'Ícono',
|
|
3809
3856
|
colPath: 'Path',
|
|
3857
|
+
colId: 'ID',
|
|
3858
|
+
copyRouteId: 'Copiar el ID de la ruta {name}',
|
|
3859
|
+
copyRouterId: 'Copiar el ID del enrutador {name}',
|
|
3860
|
+
idCopied: 'ID copiado',
|
|
3810
3861
|
reorder: 'Reordenar',
|
|
3811
3862
|
reorderTitle: 'Reordenar menú',
|
|
3812
3863
|
reorderHint: 'Cambie el orden en que los elementos aparecen en el menú de la app: arrastre por el asa (o, con el teclado, Espacio en el asa y las flechas) o use los botones de subir y bajar. Para ordenar lo que hay dentro de un elemento, entre en él.',
|