198 lines
10 KiB
Markdown
198 lines
10 KiB
Markdown
# Arch Panel
|
|
|
|
Extensao Chrome Manifest V3 que injeta o Arch Panel em paginas Oracle usadas pelo time de arquitetura, incluindo Workload Workbench e HCM FuseWelcome.
|
|
|
|
## Entry points
|
|
|
|
- `manifest.json`: fonte oficial da versao, permissoes e content scripts.
|
|
- `src/shared/config.js`: configuracao centralizada, constantes, IDs, endpoints e chaves de cache.
|
|
- `src/shared/utils.js`: helpers compartilhados de strings, numeros, datas, DOM, escaping e extração de payloads.
|
|
- `src/background/config.js`: configuracao especifica do service worker e URLs usadas pelos proxies de background.
|
|
- `src/content/styles.css`: estilos da UI injetados pelo Manifest V3.
|
|
- `src/content/shell-view.js`: shell visual injetado na pagina, incluindo tema, cores, alvo de insercao e scroll lock.
|
|
- `src/content/templates.js`: templates estaticos de DOM usados pelo content script.
|
|
- `src/content/hcm-page.js`: integracao com FuseWelcome, injecao do tile HCM e captura do token Worklist via iframe.
|
|
- `src/content/modal-events.js`: controller de eventos delegados da modal, incluindo clicks, inputs e navegacao por teclado.
|
|
- `src/content/workbench-controller.js`: controller de Workbench, dataset, refresh, detalhes, actions, forecast e calendario.
|
|
- `src/content/manage-time-controller.js`: controller da modal Manage Time, incluindo carregamento, diff, foco, validacao e gravacao.
|
|
- `src/content/export-html.js`: geracao do relatorio HTML standalone baixado pelo usuario.
|
|
- `src/repositories/workbench-repository.js`: acesso e normalizacao de dados do Workload Workbench e Worklist user API.
|
|
- `src/repositories/crm-repository.js`: busca paginada de Service Requests no CRM Fusion para cobertura por oportunidade (OptyNumber).
|
|
- `src/repositories/comcip-repository.js`: acesso e normalizacao de dados COMCIP, Manage Time e Service Requests.
|
|
- `src/repositories/cache-repository.js`: persistencia dos payloads de dashboard, task types e token Worklist no IndexedDB.
|
|
- `src/domain/ramp-forecast.js`: regras puras de calculo de ramp, delta de forecast e payload de atualizacao de forecast.
|
|
- `src/domain/workload-dataset.js`: regras puras de normalizacao de workloads, snapshots, export payloads e indicadores do dashboard.
|
|
- `src/domain/workload-calendar.js`: regras puras para calendario mensal/semanal de inicio dos workloads.
|
|
- `src/domain/time-management.js`: regras puras de diff, assinatura, payload, validacao e datas do Manage time.
|
|
- `src/domain/time-management-data.js`: normalizacao de payloads, options e DTOs usados pela modal Manage time.
|
|
- `src/services/storage-service.js`: infraestrutura generica de IndexedDB.
|
|
- `src/services/chrome-service.js`: wrappers Promise-based para APIs do Chrome usadas pelo content script.
|
|
- `src/services/preferences-service.js`: persistencia local de preferencias visuais e ultima data selecionada no Manage Time.
|
|
- `src/services/transport-service.js`: camada de transporte, page bridge, iframes autenticados e requests via background.
|
|
- `src/views/render-helpers.js`: helpers reutilizaveis de apresentacao para tabelas, links e resumo do header.
|
|
- `content-script.js`: entrypoint principal da UI e orquestracao de estado, eventos e requests.
|
|
- `page-bridge.js`: bridge executada no contexto da pagina SPA para capturar e reutilizar headers autorizados.
|
|
- `background.js`: service worker responsavel por proxy de requests, descoberta de frames e execucao em frames autenticados.
|
|
- `tools/bump-extension-version.ps1`: script obrigatorio para atualizar a versao da extensao.
|
|
|
|
## Estrutura atual
|
|
|
|
```text
|
|
src/
|
|
background/
|
|
config.js
|
|
content/
|
|
export-html.js
|
|
hcm-page.js
|
|
manage-time-controller.js
|
|
modal-events.js
|
|
shell-view.js
|
|
styles.css
|
|
templates.js
|
|
workbench-controller.js
|
|
domain/
|
|
ramp-forecast.js
|
|
workload-dataset.js
|
|
workload-calendar.js
|
|
time-management.js
|
|
time-management-data.js
|
|
repositories/
|
|
cache-repository.js
|
|
comcip-repository.js
|
|
crm-repository.js
|
|
workbench-repository.js
|
|
views/
|
|
dashboard-view.js
|
|
manage-time-view.js
|
|
render-helpers.js
|
|
workbench-modals-view.js
|
|
services/
|
|
chrome-service.js
|
|
preferences-service.js
|
|
storage-service.js
|
|
transport-service.js
|
|
shared/
|
|
config.js
|
|
utils.js
|
|
background.js
|
|
content-script.js
|
|
page-bridge.js
|
|
manifest.json
|
|
```
|
|
|
|
O `manifest.json` carrega `src/shared/config.js`, services, repositories, domain modules e views antes de `content-script.js`. Esses arquivos expõem namespaces em `globalThis` para manter compatibilidade com content scripts classicos do Manifest V3 sem exigir bundler.
|
|
|
|
O CSS principal fica em `src/content/styles.css` e e injetado diretamente pela propriedade `css` do content script no `manifest.json`.
|
|
|
|
Renderizadores maiores devem ficar em `src/views/`. O dashboard principal fica em `src/views/dashboard-view.js`, os modais de Workbench ficam em `src/views/workbench-modals-view.js` e a modal Manage Time fica em `src/views/manage-time-view.js`, mantendo `content-script.js` como orquestrador.
|
|
|
|
Responsabilidades de shell injetado na pagina, como tema derivado do header Oracle, posicionamento do botao e bloqueio de scroll durante modal aberta, ficam em `src/content/shell-view.js`. A integracao especifica do HCM FuseWelcome fica em `src/content/hcm-page.js`.
|
|
|
|
Regras de negocio puras devem ficar em `src/domain/`. Essa camada nao deve manipular DOM, IndexedDB, Chrome APIs ou executar requests; ela recebe dependencias simples por factory e retorna funcoes deterministicas.
|
|
|
|
Requests, cache especifico da extensao e normalizadores de payload de APIs externas devem ficar em `src/repositories/`. Essa camada monta URLs, centraliza contratos de endpoint e transforma payloads remotos ou persistidos em DTOs consumidos pelo orquestrador.
|
|
|
|
## Fluxos principais
|
|
|
|
- Workload dashboard: carrega usuario, customers, workloads, actions e service requests.
|
|
- Cobertura de SRs: faz POST em
|
|
`https://eeho.fa.us2.oraclecloud.com/crmRestApi/searchResources/latest/custom-actions/queries`
|
|
com `CRMServiceRequest`, `ORA_SVC_MY_SR_TEAM_SRS` e `SVC_PENDING_DELIVERY`.
|
|
Percorre todas as paginas de 15 itens enquanto `hasMore` for true; o offset
|
|
avanca pelo numero de itens retornados. O dashboard cruza
|
|
`OpportunityName_Id_c.OptyNumber` com `workload.opportunityNumber` (sem diferenciar
|
|
maiusculas/minusculas e ignorando espacos externos). Workloads da mesma
|
|
oportunidade compartilham o indicador `hasSR`; SRs sem oportunidade nao geram
|
|
correspondencias. Nao ha consulta nem fallback para SRs por workload.
|
|
- Autenticacao CRM: a page bridge roda desde `document_start` nas telas HCM/FSCM,
|
|
captura headers de fetch/XHR de `/crmRestApi/` na origem Fusion e os reaproveita
|
|
nas paginas seguintes, junto aos cookies da sessao (`credentials: include`).
|
|
Se a chamada direta retornar 401/403, a mesma pagina e repetida pelo proxy
|
|
COMCIP ja configurado para esse endpoint `queries`, com o payload inalterado.
|
|
Todas as paginas restantes da extracao usam esse proxy. O background reutiliza
|
|
a sessao COMCIP, `authorization: Session`, `x-appbuilder-client-id` obtido pelo
|
|
probe e os cookies da origem; nao precisa capturar previamente uma chamada CRM
|
|
na tela FuseWelcome. Falhas no proxy interrompem a extracao sem salvar dados
|
|
parciais. Os headers CRM ficam separados dos tokens do provider SPA. A consulta
|
|
existente de SRs/horas no COMCIP permanece independente da cobertura por oportunidade.
|
|
- HCM tile: adiciona o tile `Arch Panel` dentro de `yourapps_groupNode_my_information` em `FuseWelcome`.
|
|
- Worklist token: captura o token do iframe Worklist SaasUI e persiste em IndexedDB para resolver o usuario atual.
|
|
- SPA Workbench iframe: cria um iframe oculto do Workload Workbench para obter contexto autenticado e executar requests da origem `spa.oracle.com`.
|
|
- COMCIP Time Entry iframe: cria um iframe oculto do Manage Time para requests dependentes da sessao COMCIP.
|
|
- Manage time: permite apontar horas, detectar criacao/alteracao/remocao e gravar via APIs de time entries.
|
|
|
|
## IndexedDB
|
|
|
|
Banco: `arch-panel-extension-db`
|
|
|
|
Store: `datasets`
|
|
|
|
Chaves conhecidas:
|
|
|
|
- `workload-dashboard-opportunity-srs`: ultimo dataset com cobertura por oportunidade.
|
|
Snapshots antigos em `workload-dashboard` nao sao usados pela nova estrategia;
|
|
o usuario deve executar Refresh data para gerar o novo snapshot.
|
|
- `time-management-task-types`: cache de task types atualizado apenas em refresh data.
|
|
- `worklist-saasui-token`: token atual extraido do iframe Worklist.
|
|
|
|
## Seguranca operacional
|
|
|
|
- A extensao deve declarar apenas permissoes realmente usadas no `manifest.json`.
|
|
- A bridge de pagina deve trocar mensagens apenas com origins explicitamente permitidos.
|
|
- Tokens e headers de autorizacao nao devem ser logados.
|
|
- Exports HTML devem escapar JSON inline e valores renderizados.
|
|
|
|
## Validacao local
|
|
|
|
Regressoes de paginacao, associacao por OptyNumber, fluxo completo do dashboard,
|
|
cache e headers/cookies da page bridge (dados simulados; sem chamadas Oracle):
|
|
|
|
```powershell
|
|
node --test tests/opportunity-service-requests.test.js
|
|
```
|
|
|
|
```powershell
|
|
node --check content-script.js
|
|
node --check background.js
|
|
node --check page-bridge.js
|
|
node --check src/background/config.js
|
|
node --check src/content/export-html.js
|
|
node --check src/content/hcm-page.js
|
|
node --check src/content/manage-time-controller.js
|
|
node --check src/content/modal-events.js
|
|
node --check src/content/shell-view.js
|
|
node --check src/content/templates.js
|
|
node --check src/content/workbench-controller.js
|
|
node --check src/repositories/workbench-repository.js
|
|
node --check src/repositories/crm-repository.js
|
|
node --check src/repositories/comcip-repository.js
|
|
node --check src/repositories/cache-repository.js
|
|
node --check src/domain/ramp-forecast.js
|
|
node --check src/domain/workload-dataset.js
|
|
node --check src/domain/workload-calendar.js
|
|
node --check src/domain/time-management.js
|
|
node --check src/domain/time-management-data.js
|
|
node --check src/views/dashboard-view.js
|
|
node --check src/views/workbench-modals-view.js
|
|
node --check src/views/manage-time-view.js
|
|
node --check src/views/render-helpers.js
|
|
node --check src/shared/config.js
|
|
node --check src/shared/utils.js
|
|
node --check src/services/storage-service.js
|
|
node --check src/services/chrome-service.js
|
|
node --check src/services/preferences-service.js
|
|
node --check src/services/transport-service.js
|
|
```
|
|
|
|
## Controle de versao
|
|
|
|
A versao oficial da extensao fica em `manifest.json`.
|
|
|
|
Nao incrementar a versao nem criar commits automaticamente a cada pedido de mudanca.
|
|
O fechamento de versao deve ocorrer apenas quando solicitado explicitamente pelo usuario.
|
|
Quando uma versao especifica for solicitada, informe o valor explicitamente:
|
|
|
|
```powershell
|
|
powershell -ExecutionPolicy Bypass -File tools/bump-extension-version.ps1 -Version 1.0.11
|
|
```
|