@trismegisto/spine 3.0.4 → 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-wu2tFGS7.mjs → trismegisto-spine-auto-service-auto-service-client.component-DzmlpLPu.mjs} +136 -87
- package/fesm2022/trismegisto-spine-auto-service-auto-service-client.component-DzmlpLPu.mjs.map +1 -0
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-groups.component-DHhbEiL4.mjs → trismegisto-spine-auto-service-auto-service-groups.component-2xCG_wS9.mjs} +2 -2
- package/fesm2022/{trismegisto-spine-auto-service-auto-service-groups.component-DHhbEiL4.mjs.map → trismegisto-spine-auto-service-auto-service-groups.component-2xCG_wS9.mjs.map} +1 -1
- 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-D-N-xXPN.mjs → trismegisto-spine-auto-service-auto-service.component-C4FBAefe.mjs} +89 -55
- 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.mjs +7 -7
- package/fesm2022/trismegisto-spine.mjs +39 -3
- package/fesm2022/trismegisto-spine.mjs.map +1 -1
- package/package.json +6 -6
- package/types/trismegisto-spine-auto-service.d.ts.map +1 -1
- package/types/trismegisto-spine.d.ts +22 -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-wu2tFGS7.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-auto-service.component-D-N-xXPN.mjs.map +0 -1
- package/fesm2022/trismegisto-spine-auto-service-client.usage-CcJANb20.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trismegisto-spine-auto-service-auto-service.component-D-N-xXPN.mjs","sources":["../../../projects/ui/auto-service/src/tabs/auto-service-apps/modals/apps-modal/auto-service-apps-modal.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-apps/modals/apps-modal/auto-service-apps-modal.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-access/modals/consumer-create/auto-service-consumer-create.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-access/modals/consumer-create/auto-service-consumer-create.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-tokens/operation-level.ts","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-access/modals/consumer-permissions/auto-service-consumer-permissions.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-access/modals/consumer-permissions/auto-service-consumer-permissions.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-access/auto-service-app-access.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-access/auto-service-app-access.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-operations/auto-service-app-operations.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-operations/auto-service-app-operations.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-tokens/token-create/auto-service-token-create.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-tokens/token-create/auto-service-token-create.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-tokens/auto-service-app-tokens.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-apps/tabs/app-tokens/auto-service-app-tokens.component.html","../../../projects/ui/auto-service/src/tabs/auto-service-apps/auto-service-apps.component.ts","../../../projects/ui/auto-service/src/tabs/auto-service-apps/auto-service-apps.component.html","../../../projects/ui/auto-service/src/auto-service.component.ts","../../../projects/ui/auto-service/src/auto-service.component.html"],"sourcesContent":["import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormControl, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { ButtonComponent, CheckboxComponent, InputComponent, ModalComponent } from '@trismegisto/angular';\nimport { AutoServiceService } from '../../../../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\n@Component({\n selector: 'spine-auto-service-apps-modal',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule, ButtonComponent, CheckboxComponent, InputComponent, ModalComponent],\n templateUrl: './auto-service-apps-modal.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-apps-modal.component.scss'],\n})\nexport class AutoServiceAppsModalComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n @Input() app: any = null;\n @Input() clientId = '';\n @Input() open = false;\n @Output() openChange = new EventEmitter<boolean>();\n @Output() saved = new EventEmitter<string | undefined>();\n\n readonly name = new FormControl('', { nonNullable: true, validators: [Validators.required] });\n readonly grants = new FormControl('client_credentials', { nonNullable: true });\n readonly enabled = new FormControl(true, { nonNullable: true });\n\n saving = false;\n constructor(private service: AutoServiceService) {}\n get isEdit(): boolean { return !!this.app?.id; }\n\n ngOnChanges(changes: SimpleChanges) { if (changes['open'] && this.open) { this.resetForm(); } }\n\n resetForm() {\n if (this.isEdit) {\n this.name.setValue(this.app.name);\n this.grants.setValue(this.app.allowed_grants?.join(', ') ?? '');\n this.enabled.setValue(this.app.enabled);\n } else {\n this.name.setValue('');\n this.grants.setValue('client_credentials');\n this.enabled.setValue(true);\n }\n }\n\n onModalOpenChange(value: boolean) { this.open = value; this.openChange.emit(value); }\n close() { this.onModalOpenChange(false); }\n\n async save() {\n this.saving = true;\n try {\n const allowed_grants = this.grants.value.split(',').map(s => s.trim()).filter(Boolean);\n if (this.isEdit) {\n await this.service.updateApp(this.clientId, this.app.id, { name: this.name.value, allowed_grants, enabled: this.enabled.value });\n this.saved.emit();\n } else {\n const res = await this.service.createApp(this.clientId, { name: this.name.value, allowed_grants });\n this.saved.emit(res.secret);\n }\n this.close();\n } finally { this.saving = false; this.cdr.markForCheck(); }\n }\n}\n","<hm-modal [open]=\"open\" (openChange)=\"onModalOpenChange($event)\" [heading]=\"isEdit ? text.editApp : text.newApp\" (closed)=\"close()\">\n <div class=\"form-stack\">\n <hm-input [formControl]=\"name\" [label]=\"text.name\" />\n <hm-input [formControl]=\"grants\" [label]=\"text.grants\" placeholder=\"client_credentials\" />\n <hm-checkbox *ngIf=\"isEdit\" [formControl]=\"enabled\" [label]=\"text.active\" />\n </div>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"close()\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!name.value\" [loading]=\"saving\" (clicked)=\"save()\">{{ text.save }}</hm-button>\n </ng-container>\n</hm-modal>\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent, ComboboxComponent, ComboboxOption, ModalComponent } from '@trismegisto/angular';\nimport { AutoServiceService } from '../../../../../../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\n@Component({\n selector: 'spine-auto-service-consumer-create',\n standalone: true,\n imports: [CommonModule, ButtonComponent, ComboboxComponent, ModalComponent],\n templateUrl: './auto-service-consumer-create.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-consumer-create.component.scss'],\n})\nexport class AutoServiceConsumerCreateComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n @Input() clientId = '';\n @Input() appId = '';\n @Input() availableGroups: any[] = [];\n @Input() open = false;\n @Output() openChange = new EventEmitter<boolean>();\n @Output() created = new EventEmitter<void>();\n groupId = '';\n saving = false;\n constructor(private service: AutoServiceService) {}\n\n get groupOptions(): ComboboxOption[] {\n return this.availableGroups.map((g) => ({ value: g.id, label: g.type ? `${g.name} (${g.type.name})` : g.name }));\n }\n\n ngOnChanges(changes: SimpleChanges) { if (changes['open'] && this.open) { this.groupId = ''; } }\n onModalOpenChange(value: boolean) { this.open = value; this.openChange.emit(value); }\n close() { this.onModalOpenChange(false); }\n\n async save() {\n if (!this.groupId) return;\n this.saving = true;\n try { await this.service.createAppConsumer(this.clientId, this.appId, this.groupId); this.created.emit(); this.close(); }\n finally { this.saving = false; this.cdr.markForCheck(); }\n }\n}\n","<hm-modal [open]=\"open\" (openChange)=\"onModalOpenChange($event)\" [heading]=\"text.newAccessHeading\" (closed)=\"close()\">\n <hm-combobox [label]=\"text.group\" [options]=\"groupOptions\" [value]=\"groupId\" (valueChange)=\"groupId = $event\"></hm-combobox>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"close()\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!groupId\" [loading]=\"saving\" (clicked)=\"save()\">{{ text.create }}</hm-button>\n </ng-container>\n</hm-modal>\n","import type { TagColor } from '@trismegisto/angular';\nimport type { SpineMessages } from '@trismegisto/spine';\n\n/**\n * Para quem a permissão de operação é dada: um grupo (pessoas logadas) ou um token de API (sem login).\n * - `group`: só `protected` depende de permissão. `public` e `optional` rodam para qualquer um e `private` para qualquer\n * autenticado: liberar uma delas não muda nada, e o admin-server recusa (400 `operation_not_protected`).\n * - `token`: o token não tem login, então nada vale para ele sem permissão: `protected`, `private` (e `optional`) só com\n * a operação liberada explicitamente. Só `public` dispensa o token, e o admin-server recusa (400 `operation_public`).\n */\nexport type PermissionMode = 'group' | 'token';\n\n/** A operação depende de permissão para esse modo (a caixa fica escolhível). */\nexport function requiresPermission(level: string | null | undefined, mode: PermissionMode = 'group'): boolean {\n if (mode === 'token') return level !== 'public';\n return level === 'protected';\n}\n\n/** Por que a operação não precisa de permissão (no idioma ativo); vazio quando precisa. */\nexport function freeAccessText(level: string | null | undefined, text: SpineMessages['autoService'], mode: PermissionMode = 'group'): string {\n if (requiresPermission(level, mode)) return '';\n if (mode === 'token') return text.publicNoToken;\n if (level === 'private') return text.freeForAuthenticated;\n if (level === 'public' || level === 'optional') return text.freeForAll;\n return text.freeNoPermission;\n}\n\n/**\n * Estado inicial da caixa de uma operação que NÃO depende de permissão: no grupo vem marcada (já vale para ele); no token\n * vem desmarcada (pública não passa pelo token). Nos dois casos desabilitada.\n */\nexport function freeChecked(mode: PermissionMode): boolean {\n return mode === 'group';\n}\n\n/** Cor do selo de nível, a mesma da aba Operações: pública em verde, protegida em amarelo; o resto neutro. */\nexport function levelTagColor(level: string | null | undefined): TagColor {\n if (level === 'public') return 'success';\n if (level === 'protected') return 'warning';\n return 'neutral';\n}\n","import { Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, ChangeDetectorRef, computed, signal } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ButtonComponent, DrawerComponent, HermesToastService, IconComponent, TagColor, TagComponent, TreeComponent, TreeNodeTemplateDirective,\n} from '@trismegisto/angular';\nimport { AutoServiceService } from '../../../../../../auto-service.service';\nimport { autoServiceErrorText } from '../../../../../../auto-service-errors';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { TreeNode, TreeSelectionChange, formatMessage, pluralMessage } from '@trismegisto/primitives';\nimport { PermissionMode, freeAccessText, levelTagColor, requiresPermission } from '../../../app-tokens/operation-level';\n\n/**\n * Nó da árvore de operações. Identificadores como \"origins:containers:tags:list\" quebram em ':': os segmentos\n * intermediários viram pastas e a folha é a operação.\n */\nexport interface OperationNode {\n key: string;\n name: string;\n isFolder: boolean;\n children: OperationNode[];\n // Só nas folhas:\n identifier?: string;\n operation_id?: string;\n method?: string;\n level?: string;\n description?: string;\n permissionId?: string;\n /**\n * Operação que não depende de permissão neste modo e sem permissão gravada: desabilitada, marcada no grupo (já vale\n * pelo nível) e desmarcada no token (pública não passa pelo token). Com uma permissão antiga gravada fica editável,\n * para dar para retirar.\n */\n locked?: boolean;\n}\n\n/** O que o modelo do nó (`hmTreeNode`) mostra: nome, método, nível, descrição e o contador da pasta. */\nexport interface OperationNodeInfo {\n name: string;\n isFolder: boolean;\n method?: string;\n level?: string;\n levelColor?: TagColor;\n description?: string;\n /** Só pastas: \"X de Y\" das operações escolhíveis dentro dela; vazio quando não há nenhuma. */\n count?: string;\n}\n\n/**\n * \"Gerenciar operações\" de um consumer da aplicação: árvore (`hm-tree`) das operações agrupadas pelo identificador, e a\n * diferença gravada ao confirmar. `mode` diz de quem é o consumer: `group` (aba Acessos; public/private/optional já valem\n * e vêm marcadas e travadas) ou `token` (aba Tokens; nada vem marcado, private/optional/protected são escolhíveis e\n * public fica travada e desmarcada).\n */\n@Component({\n selector: 'spine-auto-service-consumer-permissions',\n standalone: true,\n imports: [CommonModule, ButtonComponent, DrawerComponent, IconComponent, TagComponent, TreeComponent, TreeNodeTemplateDirective],\n templateUrl: './auto-service-consumer-permissions.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-consumer-permissions.component.scss'],\n})\nexport class AutoServiceConsumerPermissionsComponent implements OnChanges {\n private readonly messages = inject(SPINE_MESSAGES);\n protected readonly text = this.messages.autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n protected readonly fmt = formatMessage;\n private readonly toast = inject(HermesToastService);\n @Input() clientId = '';\n @Input() appId = '';\n @Input() consumer: any = null;\n @Input() set mode(value: PermissionMode) { this.modeSig.set(value); }\n get mode(): PermissionMode { return this.modeSig(); }\n @Input() open = false;\n @Output() openChange = new EventEmitter<boolean>();\n loading = false;\n saving = false;\n private readonly modeSig = signal<PermissionMode>('group');\n\n readonly tree = signal<OperationNode[]>([]);\n /** Só operações escolhíveis (não travadas): é o que o consumer pode ganhar ou perder. */\n readonly selectedIds = signal<ReadonlySet<string>>(new Set());\n readonly expandedIds = signal<ReadonlySet<string>>(new Set());\n private originalSelectedIds: ReadonlySet<string> = new Set();\n\n /** Todos os nós (pastas e folhas) por chave. */\n private readonly nodesByKey = computed(() => {\n const map = new Map<string, OperationNode>();\n const walk = (nodes: OperationNode[]) => { for (const n of nodes) { map.set(n.key, n); walk(n.children); } };\n walk(this.tree());\n return map;\n });\n private readonly leaves = computed(() => this.tree().flatMap(n => collectLeaves(n)));\n readonly lockedIds = computed<ReadonlySet<string>>(() => new Set(this.leaves().filter(l => l.locked).map(l => l.key)));\n /** Marcação mostrada na árvore: as escolhidas e, no GRUPO, as travadas (já valem para ele). No token as travadas\n * (public) aparecem desmarcadas. */\n readonly treeSelected = computed<ReadonlySet<string>>(() =>\n this.modeSig() === 'token' ? this.selectedIds() : new Set([...this.selectedIds(), ...this.lockedIds()]),\n );\n\n /** Linha de resumo no topo: quantas escolhíveis estão liberadas e quantas não dependem de permissão. */\n readonly summary = computed(() => {\n const total = this.leaves().filter(l => !l.locked).length;\n const marked = this.selectedIds().size;\n return formatMessage(this.modeSig() === 'token' ? this.text.permissionsSummaryToken : this.text.permissionsSummaryGroup, { marked, total });\n });\n readonly freeSummary = computed(() => {\n const n = this.lockedIds().size;\n if (!n) return '';\n return pluralMessage(this.modeSig() === 'token' ? this.text.permissionsFreeToken : this.text.permissionsFreeGroup, n, this.messages.meta.locale);\n });\n\n /** hm-tree é lista achatada com estado só em `selected`/`expanded`. O label leva o texto completo (nome, método,\n * nível, descrição e por que está travada, para leitor de tela); o que aparece vem do modelo `hmTreeNode`. */\n readonly treeNodes = computed<readonly TreeNode[]>(() => this.tree().map(n => this.toTreeNode(n)));\n\n readonly nodeInfo = computed(() => {\n const selected = this.selectedIds();\n const map = new Map<string, OperationNodeInfo>();\n const walk = (nodes: OperationNode[]) => {\n for (const n of nodes) {\n if (n.isFolder) {\n const open = collectLeaves(n).filter(l => !l.locked);\n const marked = open.filter(l => selected.has(l.key)).length;\n map.set(n.key, {\n name: n.name, isFolder: true,\n count: open.length ? formatMessage(this.text.permissionsFolderCount, { marked, total: open.length }) : '',\n });\n walk(n.children);\n } else {\n map.set(n.key, {\n name: n.name, isFolder: false, method: n.method, level: n.level, levelColor: levelTagColor(n.level),\n description: n.description,\n });\n }\n }\n };\n walk(this.tree());\n return map;\n });\n\n constructor(private service: AutoServiceService) {}\n\n info(node: TreeNode): OperationNodeInfo {\n return this.nodeInfo().get(node.id) ?? { name: node.label, isFolder: !node.leaf };\n }\n\n private toTreeNode(node: OperationNode): TreeNode {\n if (node.isFolder) {\n const leaves = collectLeaves(node);\n return {\n id: node.key, label: node.name, leaf: false,\n // Pasta só com operações travadas: nada a marcar dentro dela.\n disabled: leaves.length > 0 && leaves.every(l => l.locked),\n children: node.children.map(c => this.toTreeNode(c)),\n };\n }\n const free = node.locked ? freeAccessText(node.level, this.text, this.modeSig()) : '';\n const label = `${node.name} — ${node.method} · ${node.level}${node.description ? ' · ' + node.description : ''}${free ? ' · ' + free : ''}`;\n return { id: node.key, label, leaf: true, disabled: !!node.locked };\n }\n\n ngOnChanges(changes: SimpleChanges) { if (changes['open'] && this.open) { this.reset(); } }\n close() { this.open = false; this.openChange.emit(false); }\n\n async reset() {\n this.loading = true;\n try {\n const [opsRes, permsRes] = await Promise.all([\n this.service.getAppOperations(this.clientId, this.appId),\n this.service.getAppPermissions(this.clientId, this.consumer.consumer_id),\n ]);\n const operations: any[] = opsRes.operations ?? [];\n const permissions: any[] = permsRes.permissions ?? [];\n const root: OperationNode[] = [];\n const sorted = [...operations].sort((a, b) => String(a.identifier).localeCompare(String(b.identifier)));\n for (const op of sorted) {\n const perm = permissions.find((p: any) => p.operation_id === op.operation_id);\n const segments: string[] = String(op.identifier).split(':');\n const leafName = segments.pop()!;\n let level = root;\n let path = '';\n for (const segment of segments) {\n path = path ? `${path}:${segment}` : segment;\n let folder = level.find(n => n.isFolder && n.name === segment);\n if (!folder) {\n // Chave da pasta termina em ':' para não colidir com uma operação de mesmo identifier (\"orders\" e \"orders:list\").\n folder = { key: `${path}:`, name: segment, isFolder: true, children: [] };\n level.push(folder);\n }\n level = folder.children;\n }\n level.push({\n key: op.identifier, name: leafName, isFolder: false, children: [], identifier: op.identifier,\n operation_id: op.operation_id, method: op.method, level: op.level, description: op.description,\n permissionId: perm?.permission_id,\n locked: !perm && !requiresPermission(op.level, this.mode),\n });\n }\n this.tree.set(root);\n const original = new Set(collectAll(root).filter(l => !l.locked && l.permissionId).map(l => l.key));\n this.originalSelectedIds = original;\n this.selectedIds.set(new Set(original));\n this.expandedIds.set(new Set());\n } finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n /**\n * Mudança do hm-tree: com caixas ele emite só folhas habilitadas (ou o id da pasta sem folhas). Pasta vira as folhas\n * escolhíveis dela; folha travada e chave desconhecida são ignoradas.\n */\n onTreeChanged(changes: readonly TreeSelectionChange[]) {\n this.selectedIds.update(current => {\n const next = new Set(current);\n for (const change of changes) {\n const node = this.nodesByKey().get(change.id);\n if (!node) continue;\n for (const leaf of collectLeaves(node)) {\n if (leaf.locked) continue;\n if (change.selected) next.add(leaf.key); else next.delete(leaf.key);\n }\n }\n return next;\n });\n }\n\n get hasChanges(): boolean {\n const selected = this.selectedIds();\n if (selected.size !== this.originalSelectedIds.size) return true;\n for (const id of selected) if (!this.originalSelectedIds.has(id)) return true;\n return false;\n }\n\n /** Folha escolhível pela chave; `undefined` para pasta, operação travada ou chave desconhecida. */\n private leafByKey(key: string): OperationNode | undefined {\n const node = this.nodesByKey().get(key);\n return node && !node.isFolder && !node.locked ? node : undefined;\n }\n\n async confirm() {\n const selected = this.selectedIds();\n const isLeaf = (l: OperationNode | undefined): l is OperationNode => !!l;\n const toAdd = [...selected].filter(id => !this.originalSelectedIds.has(id)).map(id => this.leafByKey(id)).filter(isLeaf);\n const toRemove = [...this.originalSelectedIds].filter(id => !selected.has(id)).map(id => this.leafByKey(id)).filter(isLeaf);\n if (toAdd.length === 0 && toRemove.length === 0) { this.close(); return; }\n this.saving = true;\n try {\n for (const l of toAdd) { await this.service.addAppPermission(this.clientId, this.consumer.consumer_id, l.operation_id!); }\n for (const l of toRemove) { await this.service.removeAppPermission(this.clientId, this.consumer.consumer_id, l.permissionId!); }\n this.close();\n } catch (err) {\n // O drawer fica aberto; reabrir relê o que de fato ficou gravado.\n this.toast.error(autoServiceErrorText(err, this.text, this.text.permissionsSaveError));\n } finally { this.saving = false; this.cdr.markForCheck(); }\n }\n}\n\nfunction collectLeaves(node: OperationNode): OperationNode[] {\n return node.isFolder ? node.children.flatMap(collectLeaves) : [node];\n}\n\nfunction collectAll(root: OperationNode[]): OperationNode[] {\n return root.flatMap(collectLeaves);\n}\n","<hm-drawer [open]=\"open\" (openChange)=\"open = $event\" [heading]=\"fmt(text.operationsOf, { group: consumer?.group_name ?? '' })\" (closed)=\"close()\">\n <div *ngIf=\"loading\" class=\"loading-row\">{{ text.loading }}</div>\n\n <ng-container *ngIf=\"!loading && treeNodes().length\">\n <!-- Grupo: só protected depende de permissão; public/private/optional já valem e aparecem marcadas e desabilitadas.\n Token: private/optional/protected só valem liberadas; public aparece desabilitada e desmarcada. -->\n <p class=\"cp-summary\">{{ summary() }} {{ freeSummary() }}</p>\n\n <hm-tree\n [nodes]=\"treeNodes()\"\n [label]=\"text.permissionsTreeLabel\"\n [selected]=\"treeSelected()\"\n [(expanded)]=\"expandedIds\"\n (changed)=\"onTreeChanged($event)\"\n >\n <ng-template hmTreeNode let-node>\n @let item = info(node);\n <span class=\"cp-node\">\n <span class=\"cp-node__name\">{{ item.name }}</span>\n @if (item.isFolder) {\n @if (item.count) {\n <span class=\"cp-node__count\">{{ item.count }}</span>\n }\n } @else {\n <hm-tag [name]=\"item.method ?? ''\" color=\"neutral\" />\n <hm-tag [name]=\"item.level ?? ''\" [color]=\"item.levelColor ?? 'neutral'\" />\n @if (item.description) {\n <span class=\"cp-node__desc\">{{ item.description }}</span>\n }\n }\n </span>\n </ng-template>\n </hm-tree>\n </ng-container>\n\n <div class=\"empty-state\" *ngIf=\"!loading && treeNodes().length === 0\">\n <hm-icon shape=\"filter-grid\" size=\"xl\"></hm-icon>\n <p>{{ text.noOperations }}</p>\n </div>\n\n <ng-container footer>\n <hm-button emphasis=\"medium\" (clicked)=\"close()\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!hasChanges\" [loading]=\"saving\" (clicked)=\"confirm()\">{{ text.confirmChanges }}</hm-button>\n </ng-container>\n</hm-drawer>\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, computed, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ButtonComponent, DataGridActionTriggered, DataGridComponent, DataGridRowAction, GridColumn, IconComponent } from '@trismegisto/angular';\nimport { formatMessage } from '@trismegisto/primitives';\nimport { AutoServiceDeleteFeedback } from '../../../../auto-service-delete';\nimport { AutoServiceService } from '../../../../auto-service.service';\nimport { AutoServiceConsumerCreateComponent } from './modals/consumer-create/auto-service-consumer-create.component';\nimport { AutoServiceConsumerPermissionsComponent } from './modals/consumer-permissions/auto-service-consumer-permissions.component';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\n\ninterface ConsumerRow {\n consumer_id: string; group_name: string; group_type_name: string;\n /** Vínculo do grupo de administração: não é do auto-serviço (servidor antigo ainda devolve; a tela descarta). */\n group_is_admin?: boolean;\n}\n\n@Component({\n selector: 'spine-auto-service-app-access',\n standalone: true,\n imports: [CommonModule, ButtonComponent, IconComponent, DataGridComponent, AutoServiceConsumerCreateComponent, AutoServiceConsumerPermissionsComponent],\n templateUrl: './auto-service-app-access.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-app-access.component.scss'],\n})\nexport class AutoServiceAppAccessComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly deletion = inject(AutoServiceDeleteFeedback);\n @Input() clientId = '';\n @Input() appId = '';\n entries: ConsumerRow[] = [];\n availableGroups: any[] = [];\n loading = false;\n showCreate = false;\n showPermissions = false;\n activeConsumer: ConsumerRow | null = null;\n constructor(private service: AutoServiceService) {}\n\n readonly rowId = (c: ConsumerRow) => c.consumer_id;\n readonly columns = computed<GridColumn<ConsumerRow>[]>(() => [\n { key: 'group_name', title: this.text.colGroup, value: (c) => c.group_name, sortable: true },\n { key: 'group_type_name', title: this.text.colType, value: (c) => c.group_type_name, sortable: true },\n ]);\n readonly rowActions = computed<DataGridRowAction<ConsumerRow>[]>(() => [\n { id: 'permissions', icon: 'shield', label: this.text.manageOperations },\n {\n id: 'delete', icon: 'trash', label: this.text.remove, danger: true, separatorAbove: true,\n confirm: (c) => ({ heading: this.text.confirmRemoveConsumerHeading, message: formatMessage(this.text.confirmRemoveConsumer, { group: c.group_name }) }),\n },\n ]);\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes['appId']) { this.load(); }\n if (changes['clientId']) { this.loadGroups(); }\n }\n\n async load() {\n if (!this.appId) { this.entries = []; return; }\n this.loading = true;\n try {\n const res = await this.service.getAppConsumers(this.clientId, this.appId);\n this.entries = (res.consumers ?? []).filter((c: ConsumerRow) => !c.group_is_admin);\n }\n finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n async loadGroups() {\n if (!this.clientId) { this.availableGroups = []; return; }\n const res = await this.service.getGroups(this.clientId);\n this.availableGroups = (res.groups ?? []).filter((g) => !g.is_admin);\n this.cdr.markForCheck();\n }\n\n openCreate() { this.showCreate = true; }\n async onCreated() { await this.load(); }\n /** Já confirmado pelo `confirm` da ação na grade. */\n async deleteConsumer(consumerId: string) {\n if (await this.deletion.run(() => this.service.deleteAppConsumer(this.clientId, consumerId))) await this.load();\n }\n openPermissions(consumer: ConsumerRow) { this.activeConsumer = consumer; this.showPermissions = true; }\n\n onAction(e: DataGridActionTriggered<ConsumerRow>): void {\n if (e.action === 'permissions') this.openPermissions(e.row);\n if (e.action === 'delete') void this.deleteConsumer(e.row.consumer_id);\n }\n}\n","<hm-data-grid\n [columns]=\"columns()\"\n [rows]=\"entries\"\n [rowId]=\"rowId\"\n [caption]=\"text.appAccessCaption\"\n [loading]=\"loading\"\n [rowActions]=\"rowActions()\"\n (actionTriggered)=\"onAction($event)\"\n [emptyMessage]=\"text.noAppAccess\"\n>\n <hm-button dataGridActions icon=\"plus\" (clicked)=\"openCreate()\">{{ text.newAccess }}</hm-button>\n</hm-data-grid>\n\n<spine-auto-service-consumer-create\n [clientId]=\"clientId\"\n [appId]=\"appId\"\n [availableGroups]=\"availableGroups\"\n [open]=\"showCreate\"\n (openChange)=\"showCreate = $event\"\n (created)=\"onCreated()\">\n</spine-auto-service-consumer-create>\n\n<spine-auto-service-consumer-permissions\n *ngIf=\"activeConsumer\"\n [clientId]=\"clientId\"\n [appId]=\"appId\"\n [consumer]=\"activeConsumer\"\n [open]=\"showPermissions\"\n (openChange)=\"showPermissions = $event\">\n</spine-auto-service-consumer-permissions>\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, computed, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DataGridCellDirective, DataGridComponent, GridColumn, TagColor, TagComponent } from '@trismegisto/angular';\nimport { AutoServiceService } from '../../../../auto-service.service';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { pluralMessage } from '@trismegisto/primitives';\n\ninterface OperationRow {\n operation_id: string; identifier: string; method: string; level: string; description?: string; allowed_groups?: any[];\n}\n\n@Component({\n selector: 'spine-auto-service-app-operations',\n standalone: true,\n imports: [CommonModule, DataGridComponent, DataGridCellDirective, TagComponent],\n templateUrl: './auto-service-app-operations.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-app-operations.component.scss'],\n})\nexport class AutoServiceAppOperationsComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly messages = inject(SPINE_MESSAGES);\n @Input() clientId = '';\n @Input() appId = '';\n operations: OperationRow[] = [];\n loading = false;\n constructor(private service: AutoServiceService) {}\n\n readonly rowId = (op: OperationRow) => op.operation_id;\n readonly columns = computed<GridColumn<OperationRow>[]>(() => [\n { key: 'identifier', title: this.text.colIdentifier, value: (op) => op.identifier, sortable: true },\n { key: 'method', title: this.text.colMethod, value: (op) => op.method, sortable: true },\n { key: 'level', title: this.text.colLevel, value: (op) => op.level, sortable: true },\n { key: 'description', title: this.text.colDescription, value: (op) => op.description || '—' },\n {\n key: 'allowed_groups', title: this.text.colAllowedGroups,\n value: (op) => op.allowed_groups?.length ? pluralMessage(this.text.groupCount, op.allowed_groups.length, this.messages.meta.locale) : '—',\n },\n ]);\n\n ngOnChanges(changes: SimpleChanges) { if (changes['appId']) { this.load(); } }\n\n async load() {\n if (!this.appId) { this.operations = []; return; }\n this.loading = true;\n try { const res = await this.service.getAppOperations(this.clientId, this.appId); this.operations = res.operations; }\n finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n /** Nível da operação no selo: pública em verde, protegida em amarelo; o resto neutro. */\n levelTagColor(level: string | null | undefined): TagColor {\n if (level === 'public') return 'success';\n if (level === 'protected') return 'warning';\n return 'neutral';\n }\n}\n","<hm-data-grid\n [columns]=\"columns()\"\n [rows]=\"operations\"\n [rowId]=\"rowId\"\n [caption]=\"text.operationsCaption\"\n [loading]=\"loading\"\n [emptyMessage]=\"text.noOperations\"\n>\n <ng-template hmCell=\"identifier\" let-op>\n <code>{{ op.identifier }}</code>\n </ng-template>\n\n <ng-template hmCell=\"method\" let-op>\n <hm-tag [name]=\"op.method\" />\n </ng-template>\n\n <ng-template hmCell=\"level\" let-op>\n <hm-tag [name]=\"op.level\" [color]=\"levelTagColor(op.level)\" />\n </ng-template>\n</hm-data-grid>\n","import {\n Component, Input, Output, EventEmitter, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, ChangeDetectorRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AbstractControl, FormControl, ReactiveFormsModule, ValidationErrors, ValidatorFn, Validators } from '@angular/forms';\nimport {\n AlertComponent, ButtonComponent, CheckboxComponent, CopyButtonComponent, DatePickerComponent, InputComponent, ModalComponent,\n TagComponent, TextareaComponent,\n} from '@trismegisto/angular';\nimport { formatMessage } from '@trismegisto/primitives';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { autoServiceErrorText } from '../../../../../auto-service-errors';\nimport { AutoServiceService } from '../../../../../auto-service.service';\nimport { freeAccessText, levelTagColor, requiresPermission } from '../operation-level';\n\n/** Teto de validade aceito pelo servidor (`APP_TOKEN_MAX_DAYS` do argos-admin). */\nexport const APP_TOKEN_MAX_DAYS = 365;\n/** Validade sugerida ao abrir o modal. */\nexport const APP_TOKEN_DEFAULT_DAYS = 90;\n/** Limite do nome no formulário. */\nexport const APP_TOKEN_NAME_MAX = 100;\n\n/** Data LOCAL em AAAA-MM-DD (`toISOString()` daria a data em UTC: em UTC-3, depois das 21h já é amanhã). */\nexport function localIsoDate(date: Date): string {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, '0');\n const d = String(date.getDate()).padStart(2, '0');\n return `${y}-${m}-${d}`;\n}\n\n/** Hoje + `days` dias, em data local (`setDate` cuida da virada de mês e ano). */\nexport function addLocalDays(base: Date, days: number): string {\n const date = new Date(base.getFullYear(), base.getMonth(), base.getDate());\n date.setDate(date.getDate() + days);\n return localIsoDate(date);\n}\n\n/**\n * Meia-noite LOCAL do dia escolhido (AAAA-MM-DD), em ISO com fuso. Mandar só a data fazia o servidor ler meia-noite\n * UTC (em UTC-3 \"amanhã\" podia já ter passado). Meia-noite local de amanhã é sempre futura e a de hoje + 365 nunca\n * passa de agora + 365 dias.\n */\nexport function localDayStartIso(value: string): string {\n const [y, m, d] = value.split('-').map(Number);\n return new Date(y, m - 1, d).toISOString();\n}\n\n/** Intervalo [min, max] comparando AAAA-MM-DD (ordem do texto = ordem das datas). */\nfunction dateRangeValidator(min: string, max: string): ValidatorFn {\n return (control: AbstractControl<string | null>): ValidationErrors | null => {\n const value = control.value;\n if (!value) return null;\n if (value < min) return { minDate: { min, actual: value } };\n if (value > max) return { maxDate: { max, actual: value } };\n return null;\n };\n}\n\ninterface OperationRow {\n operation_id: string;\n identifier: string;\n method: string;\n level: string;\n description?: string;\n /** Vazio = dá para escolher (protected/private). Senão, por que o token não precisa dela (public): caixa desmarcada e desabilitada. */\n free: string;\n control: FormControl<boolean>;\n}\n\n/**\n * \"Novo token\" de uma aplicação: nome, descrição, validade (de amanhã até 365 dias) e as operações liberadas ao token.\n * Nada vem marcado: o token não tem login, então `protected` e `private` (e `optional`) só valem se marcadas aqui; as\n * `public` aparecem desmarcadas e desabilitadas (não precisam de token) e nunca vão em `operation_ids`. Criado, o valor aparece uma única vez, com copiar; fechar o descarta.\n * Mirror de admin/ui/.../apps/tabs/app-tokens/modals/token-create (argos-admin), escopado em `/auto-service/:clientId`.\n */\n@Component({\n selector: 'spine-auto-service-token-create',\n standalone: true,\n imports: [\n CommonModule, ReactiveFormsModule, AlertComponent, ButtonComponent, CheckboxComponent, CopyButtonComponent, DatePickerComponent,\n InputComponent, ModalComponent, TagComponent, TextareaComponent,\n ],\n templateUrl: './auto-service-token-create.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-token-create.component.scss'],\n})\nexport class AutoServiceTokenCreateComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly service = inject(AutoServiceService);\n protected readonly levelTagColor = levelTagColor;\n protected readonly nameMax = APP_TOKEN_NAME_MAX;\n\n @Input() clientId = '';\n @Input() appId = '';\n @Input() open = false;\n @Output() openChange = new EventEmitter<boolean>();\n /** Token criado (a lista recarrega na hora, sem esperar o modal fechar). */\n @Output() created = new EventEmitter<void>();\n\n minDate = addLocalDays(new Date(), 1);\n maxDate = addLocalDays(new Date(), APP_TOKEN_MAX_DAYS);\n\n readonly name = new FormControl('', { nonNullable: true, validators: [Validators.required, Validators.maxLength(APP_TOKEN_NAME_MAX)] });\n readonly description = new FormControl('', { nonNullable: true });\n readonly expiresAt = new FormControl<string | null>(null, { validators: [Validators.required] });\n\n rows: OperationRow[] = [];\n loading = false;\n saving = false;\n saveError: string | null = null;\n /** Valor recém-criado: aparece uma única vez, só enquanto o modal está aberto. */\n createdToken: { name: string; token: string } | null = null;\n\n /** Mensagens de validação da data no idioma ativo (o `hm-date-picker` mostra pelo `messages`). */\n get dateMessages(): Record<string, string> {\n return { minDate: this.text.tokenExpiresInvalid, maxDate: this.text.tokenExpiresInvalid };\n }\n\n get canSave(): boolean {\n return !this.saving && !this.loading && this.name.valid && !!this.name.value.trim() && this.expiresAt.valid;\n }\n\n get hasFreeRows(): boolean { return this.rows.some((r) => !!r.free); }\n\n ngOnChanges(changes: SimpleChanges) { if (changes['open'] && this.open) void this.reset(); }\n\n /** Abre limpo: datas recalculadas (o modal pode ficar montado de um dia para o outro) e operações relidas. */\n async reset() {\n this.minDate = addLocalDays(new Date(), 1);\n this.maxDate = addLocalDays(new Date(), APP_TOKEN_MAX_DAYS);\n this.expiresAt.setValidators([Validators.required, dateRangeValidator(this.minDate, this.maxDate)]);\n this.name.reset('');\n this.description.reset('');\n this.expiresAt.reset(addLocalDays(new Date(), APP_TOKEN_DEFAULT_DAYS));\n this.createdToken = null;\n this.saveError = null;\n this.rows = [];\n this.loading = true;\n this.cdr.markForCheck();\n try {\n const res = await this.service.getAppOperations(this.clientId, this.appId);\n this.rows = (res.operations ?? []).map((op: any) => ({\n operation_id: op.operation_id,\n identifier: op.identifier,\n method: op.method,\n level: op.level,\n description: op.description,\n free: freeAccessText(op.level, this.text, 'token'),\n control: requiresPermission(op.level, 'token')\n ? new FormControl(false, { nonNullable: true })\n : new FormControl({ value: false, disabled: true }, { nonNullable: true }),\n }));\n } catch (err) {\n this.saveError = autoServiceErrorText(err, this.text, this.text.tokenSaveError);\n } finally {\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n onModalOpenChange(value: boolean) {\n this.open = value;\n if (!value) this.createdToken = null;\n this.openChange.emit(value);\n }\n\n close() { this.onModalOpenChange(false); }\n\n async save() {\n this.name.markAsTouched();\n this.expiresAt.markAsTouched();\n if (!this.canSave || !this.expiresAt.value) return;\n this.saving = true;\n this.saveError = null;\n this.cdr.markForCheck();\n try {\n const name = this.name.value.trim();\n const description = this.description.value.trim();\n const res = await this.service.createAppToken(this.clientId, this.appId, {\n name,\n ...(description ? { description } : {}),\n expires_at: localDayStartIso(this.expiresAt.value),\n // Só as escolhidas (protected/private): public não vira permissão (o servidor recusa com operation_public).\n operation_ids: this.rows.filter((r) => !r.free && r.control.value).map((r) => r.operation_id),\n });\n this.createdToken = { name: res.name ?? name, token: res.token };\n this.created.emit();\n } catch (err) {\n this.saveError = autoServiceErrorText(err, this.text, this.text.tokenSaveError);\n } finally {\n this.saving = false;\n this.cdr.markForCheck();\n }\n }\n\n createdHeading(name: string): string { return formatMessage(this.text.tokenCreatedHeading, { name }); }\n valueLabel(name: string): string { return formatMessage(this.text.tokenValueLabel, { name }); }\n}\n","<!-- Depois de criar, o modal só mostra o valor (uma vez); fechar (Concluir, Esc ou ✕) o descarta. -->\n<hm-modal [open]=\"open\" (openChange)=\"onModalOpenChange($event)\"\n [heading]=\"createdToken ? createdHeading(createdToken.name) : text.newToken\" size=\"large\" (closed)=\"close()\">\n <div class=\"form-stack\" *ngIf=\"createdToken as created; else formTpl\">\n <hm-alert variant=\"warning\" [heading]=\"text.tokenCreatedWarning\">{{ text.tokenCreatedNote }}</hm-alert>\n <div class=\"as-secret\">\n <span class=\"as-secret__label\" id=\"as-created-token-label\">{{ valueLabel(created.name) }}</span>\n <div class=\"as-secret__row\">\n <code class=\"as-secret__value\" aria-labelledby=\"as-created-token-label\">{{ created.token }}</code>\n <hm-copy-button variant=\"text\" [value]=\"created.token\" [label]=\"text.copyToken\" [copiedLabel]=\"text.tokenCopied\" />\n </div>\n </div>\n </div>\n\n <ng-template #formTpl>\n <div class=\"form-stack\">\n <hm-alert *ngIf=\"saveError\" variant=\"error\">{{ saveError }}</hm-alert>\n <hm-input [formControl]=\"name\" [label]=\"text.tokenName\" [maxLength]=\"nameMax\" />\n <hm-textarea [formControl]=\"description\" [label]=\"text.tokenDescription\" [rows]=\"2\" />\n <hm-date-picker [formControl]=\"expiresAt\" [label]=\"text.tokenExpiresAt\" [min]=\"minDate\" [max]=\"maxDate\"\n [hint]=\"text.tokenExpiresHint\" [messages]=\"dateMessages\" />\n\n <fieldset class=\"token-ops\">\n <legend class=\"token-ops__legend\">{{ text.tokenOperations }}</legend>\n <p class=\"token-ops__note muted\" *ngIf=\"hasFreeRows || rows.length\">{{ text.tokenOperationsNote }}</p>\n <p class=\"token-ops__empty muted\" *ngIf=\"loading\">{{ text.loading }}</p>\n <p class=\"token-ops__empty muted\" *ngIf=\"!loading && rows.length === 0\">{{ text.noOperations }}</p>\n <div class=\"token-ops__row\" *ngFor=\"let row of rows\">\n <hm-checkbox [formControl]=\"row.control\" [label]=\"row.identifier\" />\n <div class=\"token-ops__meta\">\n <hm-tag [name]=\"row.method\" />\n <hm-tag [name]=\"row.level\" [color]=\"levelTagColor(row.level)\" />\n <span class=\"token-ops__free\" *ngIf=\"row.free\">{{ row.free }}</span>\n <span class=\"token-ops__desc muted\" *ngIf=\"row.description\">{{ row.description }}</span>\n </div>\n </div>\n </fieldset>\n </div>\n </ng-template>\n\n <ng-container footer>\n <ng-container *ngIf=\"!createdToken\">\n <hm-button emphasis=\"medium\" (clicked)=\"close()\">{{ text.cancel }}</hm-button>\n <hm-button [disabled]=\"!canSave\" [loading]=\"saving\" (clicked)=\"save()\">{{ text.createToken }}</hm-button>\n </ng-container>\n <hm-button *ngIf=\"createdToken\" (clicked)=\"close()\">{{ text.rotatedSecretDone }}</hm-button>\n </ng-container>\n</hm-modal>\n","import {\n Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, computed, ChangeDetectorRef,\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport {\n ButtonComponent, DataGridActionTriggered, DataGridCellDirective, DataGridComponent, DataGridRowAction, GridColumn,\n HermesToastService, TagColor, TagComponent,\n} from '@trismegisto/angular';\nimport { formatMessage } from '@trismegisto/primitives';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { autoServiceErrorText } from '../../../../auto-service-errors';\nimport { AutoServiceAppToken, AutoServiceService } from '../../../../auto-service.service';\nimport { AutoServiceConsumerPermissionsComponent } from '../app-access/modals/consumer-permissions/auto-service-consumer-permissions.component';\nimport { AutoServiceTokenCreateComponent } from './token-create/auto-service-token-create.component';\n\ntype TokenStatus = 'active' | 'expired' | 'revoked';\n\n/**\n * Aba Tokens da aplicação: os tokens de API (`x-api-token`) com situação, validade e último uso; \"Novo token\" (modal com\n * as operações liberadas) e, no menu da linha, \"Gerenciar operações\" (o token também é um consumer) e \"Revogar\" (com\n * confirmação; o token para de valer na hora e fica na lista como revogado).\n * Mirror de admin/ui/.../apps/tabs/app-tokens (argos-admin), escopado em `/auto-service/:clientId`.\n */\n@Component({\n selector: 'spine-auto-service-app-tokens',\n standalone: true,\n imports: [\n CommonModule, ButtonComponent, DataGridComponent, DataGridCellDirective, TagComponent,\n AutoServiceTokenCreateComponent, AutoServiceConsumerPermissionsComponent,\n ],\n templateUrl: './auto-service-app-tokens.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-app-tokens.component.scss'],\n})\nexport class AutoServiceAppTokensComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n private readonly catalog = inject(SPINE_MESSAGES);\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly service = inject(AutoServiceService);\n private readonly toast = inject(HermesToastService);\n @Input() clientId = '';\n @Input() appId = '';\n tokens: AutoServiceAppToken[] = [];\n loading = false;\n showCreate = false;\n showPermissions = false;\n /** Token aberto em \"Gerenciar operações\", no formato que o painel de permissões espera (o nome no lugar do grupo). */\n permissionsConsumer: { consumer_id: string; group_name: string } | null = null;\n\n readonly rowId = (tk: AutoServiceAppToken) => tk.id;\n readonly columns = computed<GridColumn<AutoServiceAppToken>[]>(() => [\n { key: 'name', title: this.text.colName, value: (tk) => tk.name, sortable: true, searchable: true },\n { key: 'prefix', title: this.text.colTokenPrefix, value: (tk) => tk.token_prefix ?? '' },\n { key: 'status', title: this.text.colStatus, value: (tk) => this.statusLabel(this.status(tk)), sortable: true },\n { key: 'expires_at', title: this.text.colExpiresAt, value: (tk) => tk.expires_at ?? '', sortable: true },\n { key: 'last_used_at', title: this.text.colLastUsed, value: (tk) => tk.last_used_at ?? '', sortable: true },\n ]);\n // Revogado não tem mais o que fazer: a linha fica sem o menu.\n readonly rowActions = computed<DataGridRowAction<AutoServiceAppToken>[]>(() => [\n { id: 'operations', icon: 'shield', label: this.text.manageOperations, available: (tk) => !tk.revoked_at },\n {\n id: 'revoke', icon: 'ban', label: this.text.revokeToken, danger: true, separatorAbove: true,\n available: (tk) => !tk.revoked_at,\n confirm: (tk) => ({\n heading: this.text.confirmRevokeTokenHeading,\n message: formatMessage(this.text.confirmRevokeToken, { name: tk.name }),\n confirmLabel: this.text.revokeToken,\n }),\n },\n ]);\n\n ngOnChanges(changes: SimpleChanges) { if (changes['appId'] || changes['clientId']) void this.load(); }\n\n async load() {\n const { clientId, appId } = this;\n if (!clientId || !appId) { this.tokens = []; return; }\n this.loading = true;\n this.cdr.markForCheck();\n try {\n const res = await this.service.getAppTokens(clientId, appId);\n if (this.appId !== appId || this.clientId !== clientId) return;\n this.tokens = res.tokens ?? [];\n } catch (err) {\n this.tokens = [];\n this.toast.error(autoServiceErrorText(err, this.text, this.text.tokensLoadError));\n } finally {\n this.loading = false;\n this.cdr.markForCheck();\n }\n }\n\n status(tk: AutoServiceAppToken, now = Date.now()): TokenStatus {\n if (tk.revoked_at) return 'revoked';\n if (new Date(tk.expires_at).getTime() <= now) return 'expired';\n return 'active';\n }\n\n statusLabel(status: TokenStatus): string {\n if (status === 'revoked') return this.text.tokenRevoked;\n if (status === 'expired') return this.text.tokenExpired;\n return this.text.active;\n }\n\n /** Ativo em verde, expirado em amarelo, revogado neutro; o texto do selo diz qual (a cor só reforça). */\n statusColor(status: TokenStatus): TagColor {\n if (status === 'revoked') return 'neutral';\n if (status === 'expired') return 'warning';\n return 'success';\n }\n\n formatDate(value: string | null | undefined): string {\n if (!value) return '';\n return new Intl.DateTimeFormat(this.catalog.meta.locale, { dateStyle: 'short', timeStyle: 'short' }).format(new Date(value));\n }\n\n openCreate() { this.showCreate = true; this.cdr.markForCheck(); }\n\n openPermissions(tk: AutoServiceAppToken) {\n this.permissionsConsumer = { consumer_id: tk.consumer_id, group_name: tk.name };\n this.showPermissions = true;\n this.cdr.markForCheck();\n }\n\n /** Já confirmado pelo `confirm` da ação na grade. Sucesso e falha viram toast. */\n async revoke(tk: AutoServiceAppToken) {\n if (tk.revoked_at) return;\n try {\n await this.service.revokeAppToken(this.clientId, this.appId, tk.id);\n this.toast.success(formatMessage(this.text.tokenRevokedDone, { name: tk.name }));\n } catch (err) {\n this.toast.error(autoServiceErrorText(err, this.text, this.text.tokenRevokeError));\n return;\n }\n await this.load();\n }\n\n onAction(e: DataGridActionTriggered<AutoServiceAppToken>): void {\n if (e.action === 'operations') this.openPermissions(e.row);\n if (e.action === 'revoke') void this.revoke(e.row);\n }\n}\n","<hm-data-grid\n [columns]=\"columns()\"\n [rows]=\"tokens\"\n [rowId]=\"rowId\"\n [caption]=\"text.tokensCaption\"\n [loading]=\"loading\"\n [rowActions]=\"rowActions()\"\n [emptyMessage]=\"text.noTokens\"\n (actionTriggered)=\"onAction($event)\"\n>\n <hm-button dataGridActions icon=\"plus\" (clicked)=\"openCreate()\">{{ text.newToken }}</hm-button>\n <ng-template hmCell=\"prefix\" let-tk>\n <code *ngIf=\"tk.token_prefix; else noPrefix\">{{ tk.token_prefix }}…</code>\n <ng-template #noPrefix>—</ng-template>\n </ng-template>\n <ng-template hmCell=\"status\" let-tk>\n <hm-tag [name]=\"statusLabel(status(tk))\" [color]=\"statusColor(status(tk))\" />\n </ng-template>\n <ng-template hmCell=\"expires_at\" let-tk>{{ formatDate(tk.expires_at) || '—' }}</ng-template>\n <ng-template hmCell=\"last_used_at\" let-tk>{{ tk.last_used_at ? formatDate(tk.last_used_at) : text.neverUsed }}</ng-template>\n</hm-data-grid>\n\n<spine-auto-service-token-create [clientId]=\"clientId\" [appId]=\"appId\" [open]=\"showCreate\"\n (openChange)=\"showCreate = $event\" (created)=\"load()\">\n</spine-auto-service-token-create>\n\n<spine-auto-service-consumer-permissions *ngIf=\"permissionsConsumer as consumer\" [clientId]=\"clientId\" [appId]=\"appId\"\n [consumer]=\"consumer\" mode=\"token\" [open]=\"showPermissions\" (openChange)=\"showPermissions = $event\">\n</spine-auto-service-consumer-permissions>\n","import { Component, Input, OnChanges, SimpleChanges, ChangeDetectionStrategy, inject, ChangeDetectorRef } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpErrorResponse } from '@angular/common/http';\nimport {\n AlertComponent, ButtonComponent, CardComponent, ComboboxComponent, ComboboxOption, CopyButtonComponent, HermesDialogService,\n HermesToastService, ModalComponent, TabComponent, TabContentDirective, TabsComponent, TagComponent,\n} from '@trismegisto/angular';\nimport { formatMessage } from '@trismegisto/primitives';\nimport { SPINE_MESSAGES } from '@trismegisto/spine';\nimport { AutoServiceDeleteFeedback } from '../../auto-service-delete';\nimport { AutoServiceApp, AutoServiceService } from '../../auto-service.service';\nimport { AutoServiceAppsModalComponent } from './modals/apps-modal/auto-service-apps-modal.component';\nimport { AutoServiceAppAccessComponent } from './tabs/app-access/auto-service-app-access.component';\nimport { AutoServiceAppOperationsComponent } from './tabs/app-operations/auto-service-app-operations.component';\nimport { AutoServiceAppTokensComponent } from './tabs/app-tokens/auto-service-app-tokens.component';\n\ntype Tab = 'operations' | 'access' | 'tokens';\n\n/**\n * Aplicações (client_credentials) do projeto do client: Cadastrar e um cartão com o seletor das aplicações e Consultar.\n * A aplicação consultada abre embaixo: o resumo com Editar, Ativar/Desativar, Gerar novo segredo e Excluir, e as abas\n * Operações, Acessos e Tokens. Mesmo molde da tela Grupos.\n */\n@Component({\n selector: 'spine-auto-service-apps',\n standalone: true,\n imports: [\n CommonModule, AlertComponent, ButtonComponent, CardComponent, ComboboxComponent, CopyButtonComponent, ModalComponent, TabsComponent, TabComponent, TabContentDirective, TagComponent,\n AutoServiceAppsModalComponent, AutoServiceAppOperationsComponent, AutoServiceAppAccessComponent, AutoServiceAppTokensComponent,\n ],\n templateUrl: './auto-service-apps.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service-apps.component.scss'],\n})\nexport class AutoServiceAppsComponent implements OnChanges {\n protected readonly text = inject(SPINE_MESSAGES).autoService;\n /** Telas com estado em campo comum, preenchido depois de `await`: marca a view ao terminar (app sem zone.js). */\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly dialogs = inject(HermesDialogService);\n private readonly deletion = inject(AutoServiceDeleteFeedback);\n private readonly toast = inject(HermesToastService);\n private readonly service = inject(AutoServiceService);\n @Input() clientId = '';\n apps: AutoServiceApp[] = [];\n loading = false;\n /** Aplicação escolhida no seletor (só abre ao Consultar). */\n selectedAppId = '';\n /** Aplicação aberta (resumo + abas embaixo do seletor). */\n app: AutoServiceApp | null = null;\n modalApp: AutoServiceApp | null = null;\n showAppModal = false;\n activeTab: Tab = 'operations';\n newSecret: string | null = null;\n /** Segredo gerado por \"Gerar novo segredo\", mostrado uma vez na janela até \"Concluir\". */\n rotatedSecret: { name: string; secret: string } | null = null;\n rotatingSecret = false;\n\n /** Opções do seletor, recalculadas na carga (o `hm-combobox` recebe sempre o mesmo array). */\n appComboOptions: ComboboxOption[] = [];\n\n // Trocar de client fecha a aplicação aberta e esconde o segredo recém-criado: ele é de uma aplicação do client anterior.\n ngOnChanges(changes: SimpleChanges) {\n if (changes['clientId']) {\n this.app = null; this.selectedAppId = ''; this.apps = []; this.appComboOptions = []; this.newSecret = null; this.rotatedSecret = null;\n void this.load();\n }\n }\n\n async load() {\n const clientId = this.clientId;\n if (!clientId) { this.apps = []; this.appComboOptions = []; return; }\n this.loading = true;\n this.cdr.markForCheck();\n try {\n const res = await this.service.getApps(clientId);\n if (this.clientId !== clientId) return;\n this.apps = res.apps ?? [];\n this.appComboOptions = this.apps.map((a) => ({ value: a.id, label: a.name ?? a.id }));\n // A aplicação aberta acompanha o que o servidor devolveu (nome/situação novos) ou fecha se sumiu.\n if (this.app) this.app = this.apps.find((a) => a.id === this.app!.id) ?? null;\n if (this.selectedAppId && !this.apps.some((a) => a.id === this.selectedAppId)) this.selectedAppId = '';\n } finally { this.loading = false; this.cdr.markForCheck(); }\n }\n\n /** Consultar: abre a aplicação escolhida no seletor. */\n searchApp() {\n const a = this.apps.find((x) => x.id === this.selectedAppId);\n if (a) this.openApp(a);\n }\n\n /** Abre a aplicação embaixo do seletor; outra aplicação volta para a aba Operações. */\n openApp(a: AutoServiceApp) {\n if (this.app?.id !== a.id) this.activeTab = 'operations';\n this.app = a;\n this.selectedAppId = a.id;\n this.cdr.markForCheck();\n }\n\n setTab(tab: Tab) { this.activeTab = tab; }\n openCreate() { this.modalApp = null; this.showAppModal = true; this.cdr.markForCheck(); }\n openEdit(a: AutoServiceApp | null = this.app) { if (!a) return; this.modalApp = a; this.showAppModal = true; this.cdr.markForCheck(); }\n\n async onAppSaved(secret?: string) {\n if (secret) this.newSecret = secret;\n await this.load();\n this.cdr.markForCheck();\n }\n\n async toggleEnabled(a: AutoServiceApp | null = this.app) {\n if (!a) return;\n await this.service.updateApp(this.clientId, a.id, { enabled: !a.enabled });\n await this.load();\n }\n\n /**\n * \"Gerar novo segredo\": confirmação (o atual para de valer na hora), POST e o segredo novo numa janela,\n * mostrado uma única vez. Falha vira toast (404: aplicação de outro client; 403: client que a pessoa não\n * administra; senão o `detail` do servidor ou a mensagem genérica).\n */\n async rotateSecret(a: AutoServiceApp | null = this.app) {\n if (!a || this.rotatingSecret) return;\n const ok = await this.dialogs.confirm({\n heading: this.text.confirmRotateSecretHeading,\n message: this.text.confirmRotateSecret,\n confirmLabel: this.text.rotateSecret,\n danger: true,\n });\n if (!ok) return;\n this.rotatingSecret = true;\n this.cdr.markForCheck();\n try {\n const res = await this.service.rotateAppSecret(this.clientId, a.id);\n this.rotatedSecret = { name: a.name ?? a.id, secret: res.secret };\n } catch (err) {\n this.toast.error(this.rotateErrorText(err));\n } finally {\n this.rotatingSecret = false;\n this.cdr.markForCheck();\n }\n }\n\n /** Fecha a janela do segredo: depois dela não há como ver o segredo de novo. */\n closeRotatedSecret() { this.rotatedSecret = null; this.cdr.markForCheck(); }\n\n rotatedSecretHeading(name: string): string { return formatMessage(this.text.rotatedSecretHeading, { name }); }\n rotatedSecretLabel(name: string): string { return formatMessage(this.text.rotatedSecretLabel, { name }); }\n\n private rotateErrorText(err: unknown): string {\n if (err instanceof HttpErrorResponse) {\n if (err.status === 404) return this.text.rotateSecretNotFound;\n if (err.status === 403) return this.text.rotateSecretForbidden;\n const detail = err.error?.detail;\n if (typeof detail === 'string' && detail) return detail;\n }\n return this.text.rotateSecretError;\n }\n\n /** Botão Excluir do resumo: pede confirmação e só então exclui. */\n async deleteApp(a: AutoServiceApp | null = this.app) {\n if (!a) return;\n const ok = await this.dialogs.confirm({\n heading: this.text.confirmDeleteAppHeading,\n message: formatMessage(this.text.confirmDeleteApp, { name: a.name ?? a.id }),\n confirmLabel: this.text.delete,\n danger: true,\n });\n if (ok) await this.removeApp(a);\n }\n\n /** DELETE com toast de sucesso/erro; a aplicação aberta fecha e o segredo recém-criado some. */\n async removeApp(a: AutoServiceApp) {\n if (!(await this.deletion.run(() => this.service.deleteApp(this.clientId, a.id)))) return;\n if (this.app?.id === a.id) { this.app = null; this.selectedAppId = ''; }\n this.newSecret = null;\n await this.load();\n }\n}\n","<div class=\"as-stack\">\n <div class=\"as-actions\">\n <hm-button icon=\"plus\" (clicked)=\"openCreate()\">{{ text.register }}</hm-button>\n </div>\n\n <hm-alert *ngIf=\"newSecret\" variant=\"success\" [closable]=\"true\" (closed)=\"newSecret = null\">\n {{ text.secretCreated }} <strong>{{ newSecret }}</strong>\n </hm-alert>\n\n <!-- Escolher a aplicação no seletor e Consultar abre o resumo (com as ações) e as abas embaixo. -->\n <hm-card>\n <div class=\"as-field-row\">\n <hm-combobox [label]=\"text.pickApp\" [options]=\"appComboOptions\" [value]=\"selectedAppId\"\n (valueChange)=\"selectedAppId = $event\" [disabled]=\"loading\">\n </hm-combobox>\n <hm-button [disabled]=\"!selectedAppId\" (clicked)=\"searchApp()\" icon=\"search\">{{ text.search }}</hm-button>\n </div>\n <p class=\"as-empty muted\" *ngIf=\"!loading && apps.length === 0\">{{ text.noApps }}</p>\n </hm-card>\n\n <ng-container *ngIf=\"app as a\">\n <hm-card>\n <div class=\"as-summary\">\n <div class=\"as-summary__info\">\n <p class=\"as-summary__title app-title\">\n {{ a.name }}\n <hm-tag [name]=\"a.enabled ? text.active : text.inactive\" [color]=\"a.enabled ? 'success' : 'danger'\" />\n </p>\n <p class=\"as-summary__detail\">{{ a.allowed_grants?.join(', ') }}</p>\n </div>\n <div class=\"as-actions\">\n <hm-button emphasis=\"medium\" icon=\"pencil\" (clicked)=\"openEdit(a)\">{{ text.edit }}</hm-button>\n <hm-button emphasis=\"medium\" (clicked)=\"toggleEnabled(a)\">{{ a.enabled ? text.disable : text.enable }}</hm-button>\n <hm-button emphasis=\"medium\" icon=\"key\" [loading]=\"rotatingSecret\" (clicked)=\"rotateSecret(a)\">{{ text.rotateSecret }}</hm-button>\n <hm-button intent=\"danger\" emphasis=\"medium\" icon=\"trash\" (clicked)=\"deleteApp(a)\">{{ text.delete }}</hm-button>\n </div>\n </div>\n </hm-card>\n\n <!-- Conteúdo de cada aba é preguiçoso (*hmTabContent): só busca na API quando a aba é aberta. -->\n <hm-tabs [label]=\"text.appSections\" [active]=\"activeTab\" (activeChange)=\"setTab($any($event))\">\n <hm-tab id=\"operations\" [label]=\"text.tabOperations\">\n <spine-auto-service-app-operations *hmTabContent [clientId]=\"clientId\" [appId]=\"a.id\"></spine-auto-service-app-operations>\n </hm-tab>\n <hm-tab id=\"access\" [label]=\"text.tabAccesses\">\n <spine-auto-service-app-access *hmTabContent [clientId]=\"clientId\" [appId]=\"a.id\"></spine-auto-service-app-access>\n </hm-tab>\n <hm-tab id=\"tokens\" [label]=\"text.tabTokens\">\n <spine-auto-service-app-tokens *hmTabContent [clientId]=\"clientId\" [appId]=\"a.id\"></spine-auto-service-app-tokens>\n </hm-tab>\n </hm-tabs>\n </ng-container>\n</div>\n\n<!-- Segredo novo (\"Gerar novo segredo\"): aparece uma vez; fechar (Concluir, Esc ou ✕) o descarta. -->\n<hm-modal\n [open]=\"!!rotatedSecret\"\n (openChange)=\"$event || closeRotatedSecret()\"\n [heading]=\"rotatedSecret ? rotatedSecretHeading(rotatedSecret.name) : ''\"\n (closed)=\"closeRotatedSecret()\">\n <div class=\"as-stack\" *ngIf=\"rotatedSecret as rotated\">\n <hm-alert variant=\"warning\" [heading]=\"text.rotatedSecretWarning\">{{ text.rotatedSecretNote }}</hm-alert>\n <div class=\"as-secret\">\n <span class=\"as-secret__label\" id=\"as-rotated-secret-label\">{{ rotatedSecretLabel(rotated.name) }}</span>\n <div class=\"as-secret__row\">\n <code class=\"as-secret__value\" aria-labelledby=\"as-rotated-secret-label\">{{ rotated.secret }}</code>\n <hm-copy-button variant=\"text\" [value]=\"rotated.secret\" [label]=\"text.copySecret\" [copiedLabel]=\"text.secretCopied\" />\n </div>\n </div>\n </div>\n <ng-container footer>\n <hm-button (clicked)=\"closeRotatedSecret()\">{{ text.rotatedSecretDone }}</hm-button>\n </ng-container>\n</hm-modal>\n\n<spine-auto-service-apps-modal\n [app]=\"modalApp\"\n [clientId]=\"clientId\"\n [open]=\"showAppModal\"\n (openChange)=\"showAppModal = $event\"\n (saved)=\"onAppSaved($event)\">\n</spine-auto-service-apps-modal>\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { AutoServiceClient, AutoServiceClientPickerComponent } from './client-picker/auto-service-client-picker.component';\nimport { AutoServiceAppsComponent } from './tabs/auto-service-apps/auto-service-apps.component';\n\n/**\n * Página \"Aplicações\" do auto-serviço: o seletor de client e as aplicações dele. A auditoria tem página\n * própria no menu Administração (`AUTO_SERVICE_SCREENS.audit`) — a aba que existia aqui duplicava a tela.\n */\n@Component({\n selector: 'spine-auto-service',\n standalone: true,\n imports: [CommonModule, AutoServiceClientPickerComponent, AutoServiceAppsComponent],\n templateUrl: './auto-service.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n styleUrls: ['./auto-service.component.scss'],\n})\nexport class AutoServiceComponent {\n client: AutoServiceClient | null = null;\n\n onClientChange(c: AutoServiceClient | null) { this.client = c; }\n}\n","<!-- Título e descrição da tela vêm da barra da página (nome + description do router). -->\n<div class=\"as-stack\">\n <spine-auto-service-client-picker (clientChange)=\"onClientChange($event)\"></spine-auto-service-client-picker>\n <spine-auto-service-apps *ngIf=\"client as c\" [clientId]=\"c.id\"></spine-auto-service-apps>\n</div>\n"],"names":["i1.AutoServiceService","i2","i1"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trismegisto-spine-auto-service-client.usage-CcJANb20.mjs","sources":["../../../projects/ui/auto-service/src/docs/client.usage.ts"],"sourcesContent":["// Manual de uso da tela Cliente do auto-serviço (`RouteDocument.load`), em Markdown. Módulo próprio,\n// carregado só pelo `import()` de `AUTO_SERVICE_DOCUMENTS`: vira um chunk à parte no FESM e fica fora do\n// bundle inicial. Não importe estaticamente nem reexporte no `public-api.ts`.\nexport default `# Cliente\n\nGerencie a navegação do seu client sem depender do painel central: as rotas (os itens do menu), os roteadores\n(onde cada tela aparece e se ela é privada) e o acesso (quais grupos veem quais telas privadas).\n\n## Antes de começar\n\nComo nas outras telas do auto-serviço, o client administrado é o do app em que você está logado: não há client\npara escolher. É preciso estar no grupo de administração do projeto desse app e com o crachá **Administrador**\nativo. A tela mostra as abas **Rotas**, **Roteadores** e **Acesso**.\n\n## Como as peças se encaixam\n\n- **Rota:** um item com nome, nome de exibição, ícone e um trecho do endereço. Sozinha, ela não vira tela.\n- **Roteador:** coloca uma rota como **página** e diz em que ponto do menu ela fica (Header › Navegação › Menu ›\n Item › Submenu, todos opcionais). O endereço final da tela é a soma dos trechos das rotas dessa cadeia.\n- **Acesso:** libera o client para um grupo. Em cada acesso você escolhe quais roteadores **privados** aquele grupo\n enxerga.\n\n## Selos e travas\n\n- **Template:** o item veio do template da aplicação. Só a administração central do Argos edita ou exclui; aqui a\n linha aparece sem o menu de ações. A ordem e o acesso desses itens continuam sendo seus.\n- **Rota protegida** (**Excluível: Não**): não pode ser excluída. Ao editá-la, a caixa **Excluível** fica travada:\n só a administração central libera a exclusão.\n\n## Aba Rotas\n\nA tabela mostra **Nome**, **Exibição**, **Ícone**, **Path** e **Excluível**.\n\n- **Nova rota** abre o formulário:\n - **Nome interno** (obrigatório) e **Nome de exibição** (o texto que aparece no menu).\n - **Ícone**: escolha no catálogo; dá para digitar para filtrar, e cada opção mostra o próprio ícone.\n - **Caminho (path)**: um trecho só do endereço, com letras minúsculas e hífen (por exemplo, \\`ordens-servico\\`),\n sem \\`/\\`, espaço, número ou acento, e sem hífen no início ou no fim. O \\`/\\` entre os níveis quem monta é o\n roteador. Deixe vazio numa rota que só agrupa itens do menu.\n - **Info** e **Excluível**.\n- No menu de cada linha: **Editar** e **Excluir** (este só em rota excluível). **Excluir** pede confirmação\n (**Excluir rota?**, com o nome dela) e só apaga depois de **Excluir** no diálogo.\n- **Reordenar:** define a ordem dos itens no menu de navegação. A ordem é do seu client: vale também para itens do\n template, e a sincronização do template não a desfaz.\n\n## Aba Roteadores\n\nA tabela mostra **Página**, **Caminho montado** (o endereço final), **Descrição**, **Visibilidade** (**Privado** ou\n**Público**) e **Crachás permitidos** (os crachás que podem receber acesso à tela, ou **Qualquer crachá**).\n\n- **Novo roteador** (habilitado quando já existe alguma rota) abre o formulário:\n - **Página** (obrigatório): a rota que vira a tela.\n - **Descrição**: o que a tela faz, em uma frase. Aparece abaixo do título, na barra da página.\n - **Hierarquia (opcional)**: as rotas de **Header**, **Navegação**, **Menu**, **Item** e **Submenu** acima da página.\n A hierarquia é **de cima para baixo**: **Navegação** só abre com um **Header** escolhido, **Menu** só com uma\n **Navegação**, **Item** só com um **Menu** e **Submenu** só com um **Item**. Limpar um nível limpa os de baixo. A\n página não depende de nível nenhum. Um roteador antigo com um nível vazio no meio mostra o aviso e só salva depois\n de preencher o nível que falta (ou limpar os de baixo).\n - **Privado** (já vem marcado): a tela só fica visível para os grupos que receberem acesso a ela na aba **Acesso**.\n Desmarcado, o roteador é **Público** e não depende dessa liberação.\n - **Crachás permitidos**: escolha um ou mais crachás (tipos de grupo, inclusive **Administrador**) para limitar\n quem pode receber acesso a esta tela na aba **Acesso**. Vazio = **Qualquer crachá**.\n- No menu de cada linha: **Editar** e **Excluir**. **Excluir** pede confirmação (**Excluir roteador?**, com o caminho\n montado) e só apaga depois de **Excluir** no diálogo; a página sai do menu.\n- Se o servidor recusar a gravação, o motivo aparece no próprio formulário, que continua aberto.\n\n## Aba Acesso\n\nA tabela mostra os grupos com acesso ao client: **Grupo** e **Crachá** (o tipo do grupo).\n\n- **Novo acesso**: escolha o **Grupo** e clique em **Criar**.\n- No menu de cada linha:\n - **Gerenciar rotas** abre o painel **Rotas de nome do grupo**, com a árvore dos roteadores privados: as pastas\n são os níveis do menu e cada página tem uma caixa de seleção. Só aparecem os roteadores privados sem restrição\n de crachá ou cujo crachá permitido inclua o do grupo. Marque as telas que o grupo pode ver, desmarque as que não\n pode e clique em **Confirmar alterações** (o botão só habilita quando algo mudou).\n - **Remover** pede confirmação (**Remover acesso?**, com o nome do grupo) e só então tira o acesso do grupo ao\n client.\n- O grupo de administração do projeto não aparece aqui (nem na lista, nem em **Novo acesso**): o acesso dele é\n gerido só no painel central (Argos).\n\nDepois de cada exclusão aparece **Exclusão concluída.**; se o servidor recusar, a mensagem de erro diz o motivo e o\nitem continua na tabela.\n\n> Quem participa de cada grupo se gerencia na tela **Grupos**.\n`;\n"],"names":[],"mappings":"AAAA;AACA;AACA;AACA,mBAAe,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkFd;;"}
|