# Opportunities Extension 1.0.1 Browser extension that adds the "Opportunities Extension" shortcut to the permitted Oracle Fusion pages, retrieves opportunities, and displays them in a filterable table. ## Development Structure - `src/content/`: page integration, modal shell, theme and content composition. - `src/background/`: synchronous message registration and background composition. - `src/features/`: opportunities, products, consumption, AI summaries, preferences and debug. - `src/auth/`: credential-specific selection, reuse and session recovery. - `src/services/`: Fusion/SPA operations and background HTTP/JSON transport. - `src/platform/`: narrow browser messaging, cookies, tabs and storage adapters. - `src/shared/messages.js`: names of the existing cross-context messages. - `scripts/build.mjs`: generates browser-specific packages. - `tests/`: isolated synthetic regression tests and a visual fixture. - `docs/`: architecture/contracts and incremental refactoring record. - `dist/chromium/`: output for Google Chrome and Microsoft Edge. - `dist/firefox/`: output for Firefox. ## Build Use Node.js: ```bash npm run build ``` The build recreates `dist/chromium` and `dist/firefox` from the same source. Do not edit files under `dist` directly. Both targets use Manifest V3, with a Chromium service worker and Firefox background scripts. The build composes classic factory modules from `scripts/sources.cjs` into one isolated IIFE per execution context. It serializes `src/content/styles/redwood.css` at build time. There is no runtime module loader, browser-side eval, ES-module requirement or new dependency. ## Tests and Maintenance ```bash npm test npm run check ``` Tests use built-in Node.js modules and synthetic credentials, without real Fusion requests. The characterization suite verifies manifests, source/output equality, fiscal dates, payloads, preferences, pagination, cache/progress and both browser API styles. Architecture tests enforce source inclusion, explicit factory dependencies, isolated state and unchanged CSS. These complement consumption, session recovery and AI suites. `check` also fails if generated packages are stale. There is no separate lint configuration or runtime dependency installation. See [architecture and contracts](docs/architecture.md) and the [incremental refactoring record](docs/refactoring.md) for execution boundaries, authentication, storage, known risks and verification limits. Mock-based tests do not replace testing the installed extension in each browser. Without npm, run `node scripts/build.mjs`, `node scripts/test.cjs` and `node scripts/build.mjs --check`. Development checks were run with Node 24.19.0. For a local UI smoke test, run `node scripts/preview.mjs` and open the loopback URL printed by the command. The fixture uses synthetic opportunities, tokens, products, AI text and consumption; unexpected requests fail closed. It does not authenticate against Fusion or read real extension storage. `/consumption-trend.html` provides a focused chart fixture. Stop the server with Ctrl+C when finished. ## Release 1.0.0 - Paginated opportunity retrieval with filters for reference, customer, owner, status, stage, and text search. - Column sorting, links to opportunities and accounts, opportunity number copying, and stage indicators. - Opportunity type view preferences persisted in the browser. - Background product retrieval with configurable caching, progress tracking, and expandable product details. - Cloud consumption account-plan lookup from each opportunity, displayed in a tabbed detail modal. - Light and dark themes based on Oracle Redwood. - Separate outputs for Chromium/Edge and Firefox. ## Release 1.0.1 - Retries the consumer token service when it returns HTTP 200 with an HTML fallback. - Opens the SPA session page in an inactive temporary tab and closes it as soon as valid JSON is received. - Limits the recovery flow to five attempts and records the session bootstrap details in debug mode. ## Loading in Development Mode ### Chrome or Microsoft Edge 1. Open `chrome://extensions` or `edge://extensions`. 2. Enable Developer mode. 3. Click **Load unpacked**. 4. Select the `dist/chromium` folder. ### Firefox 1. Open `about:debugging#/runtime/this-firefox`. 2. Click **Load Temporary Add-on**. 3. Select the `dist/firefox/manifest.json` file. ## Supported Pages - `https://eeho.fa.us2.oraclecloud.com/hcmUI/faces/FuseWelcome` - `https://eeho.fa.us2.oraclecloud.com/fscmUI/faces/FuseWelcome` When it finds the `#yourapps_groupNode_sales` group, the extension adds the tile before the `.flat-grid-cell.flat-grid-cell-addicon` item. Clicking the tile opens the opportunities interface.