Opportunities Extension 1.0.7

Browser extension that adds the "Opportunities Extension" shortcut to the permitted Oracle Fusion pages, retrieves opportunities, and displays them in a filterable table or calendar.

Opportunity Views

Overview is the default table view. Calendar displays opportunities by Close Date (EffectiveDate) with month and week views only. Both views share Reference, search and all existing filters; switching views does not send requests. Events use date-only values without time-zone shifts, stage colors, and a read-only detail with an opportunity link and copy button. Invalid or missing dates appear in a separate list. Calendar navigation does not change the selected Reference.

Table sorting remembers the last column and direction independently for Overview, Installed Base, Service Requests, Rate Card, Consumption projection and Manage Time. Preferences are restored when reopening each view and survive page reloads in the same browser profile. Opportunity product tables retain their original order. Each day shows a filtered opportunity count, at most two events and an overflow link to the remaining events. The grid fits the available height and reduces visible events to one or zero when needed to keep every week visible. Missing close dates are available in a collapsible list below the calendar. Fiscal labels use FY27-Q2-W19: June-May fiscal years, Sunday-Saturday weeks, and W1 for the week containing June 1. A quarter is assigned by the week's Sunday, except the first fiscal week which belongs to Q1.

FullCalendar Standard 6.1.19 is bundled locally under src/vendor/fullcalendar/ with its MIT license. It is initialized only on first use, without a runtime CDN.

Customer Organization Charts

The organization-chart icon beside View customer service requests opens a builder shared by opportunities for the same customer. Add people and direct reports, change their manager using Reports to, or click a person to edit name and notes, and view contact details. Name uses the shared searchable select, populated by requestQueryAccountContact after a 350 ms pause in typing, using the Token Relay Bearer token and filtering by the customer's PartyId. Each POST returns up to 15 relevance-ranked results; empty queries and chart opening do not send searches. Superseded responses are ignored. Contact names are keyed by PartyId; options display only the person's name and job title. Job Title and Email address are read-only and fetched afresh using the person's name as keywords whenever Person details opens. The stored contact PartyId identifies the correct result. Job Title is saved with the chart and shown immediately on the node. A fresh response updates the matching person's name and Job Title automatically, preserving notes and reporting relationships; Save chart persists those changes. Email remains in memory only; existing persisted emails are removed by migration. Existing saved people remain available even if absent from the contact list. Notes appear on hover or keyboard focus. Branches can be expanded/collapsed; zoom, fit and canvas panning help navigate larger trees. Deleting a person promotes their direct reports to that person's manager without deleting those reports.

Apply changes updates the working tree; Save chart persists it. Unsaved changes require confirmation before closing. The extension background stores JSON-compatible records in IndexedDB, scoped by current user and customer ID in the current browser profile. Records include schema version, revision, update timestamp and a flat node array (id, parentId, name, jobTitle, notes, collapsed, and optional contactPartyId). Concurrent stale saves are rejected. Charts are local and do not sync between devices or write to Oracle services. They support up to 500 people and 60 reporting levels, with required name and optional notes.

The interaction is inspired by OrgChart. Layout uses bundled D3 Hierarchy 3.1.2, with the extension's existing modal, theme and autocomplete patterns. D3 and icon licenses are in src/vendor/d3-hierarchy/ and src/vendor/lucide/. There is no runtime CDN dependency or new browser permission.

For synthetic browser checks, install Playwright separately (or provide it through NODE_PATH) and run node scripts/verify-org-chart.cjs. TEST_BROWSER_CHANNEL can select an installed msedge or chrome. This exercises real IndexedDB in a local fixture and writes light/dark/mobile screenshots to a temporary folder; native extension storage and Oracle integration still require the browser smoke check below.

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.

CRM Service Request Badges

The header's Refresh all button (between theme and Preferences) invalidates persisted Products and activity caches and clears in-memory data views. It reloads the selected Reference, fetching fresh products and then the permitted SR/Actions queries. Customer details, rate cards, consumption charts and AI summaries are requested again when opened. Preferences, cookies and authentication are preserved. The button is disabled during invalidation and list reload; product/activity badges continue to show subsequent background progress. Cache-clear failures are surfaced instead of silently reusing cached data, and stale product responses cannot restore an invalidated cache.

On the first Opportunities modal opening in a page session, requestCurrentUser fetches SPA identity before tokenrelay or opportunity requests. Concurrent calls, Reference changes and modal reopenings reuse that result. Users with SALES_REP do not trigger CRM Service Request or Workload Actions queries or see their badges. Identity must contain a valid user (id, name, roles) and token before dependent requests start. Failed identity validation keeps those requests waiting and retries with backoff. Reload the page to refresh identity/roles. The identity token is retained in debug responses and hidden by default; the explicit sensitive-values toggle reveals the original value.

After an initial identity failure, recovery opens https://spa.oracle.com/ in one inactive auxiliary tab. The top-frame-only spa-page.js content script inspects the page without sending HTTP requests. It rejects error pages, SAML/login forms, OAuth callbacks and incomplete documents; cookies, HTTP 200 and elapsed time alone do not establish readiness. After a stable loaded document is verified, identity is fetched in that tab's same-origin context, at most once per document. A failed read requires a fresh verified navigation before retrying. Rejected callbacks restart at the SPA home URL, never at the one-use callback URL. A two-minute readiness timeout ends the cycle without an additional API probe. The owned tab and observers are cleaned up on success or failure. Debug metadata records the page state, wait reason and spa-tab execution context; sensitive values remain hidden by default. Reload the extension after changes to the manifest or script.

Consumer token recovery also handles HTTP 401/403, in addition to HTTP 200 with invalid JSON. It opens the existing SPA session URL in an inactive temporary tab, preserves the originating window and Firefox cookie store, and retries within the same five-attempt limit. Debug entries retain the HTTP status and recovery reason. The auxiliary tab is closed after valid JSON or exhausted retries.

After a completed product-loading cycle with fresh API results, resquestCrmServiceRequest fetches all pages of CRMServiceRequest records with SVC_PENDING_DELIVERY and ORA_SVC_MY_SR_TEAM_SRS, using the existing general tokenrelay Bearer. It uses the Fusion searchResources/latest query endpoint, independently of the opportunity query version. Calls appear in the Service Requests debug category with masked credentials. After a complete successful SR query (HTTP 200 with valid responses on all pages), its result is reused for subsequent Reference/product cycles in the current page session. Refresh all explicitly clears it. Failed pages are retried up to five total attempts each; completed pages are not requested again. Resetting the query stops further retries from the previous run.

Records are linked by OpportunityName_Id_c.OptyNumber. A green SR badge indicates one or more matches; its tooltip lists each SR number, title, reported hours, owner, email and contact flags. A red badge indicates no match within that query's scope. A failed lookup shows SR ?, not a false no-match result, and opportunities still load. Badges follow Ramp Months. Successful SR and Actions responses are persisted in extension local storage, isolated by tokenrelay principal. The cache uses the same Preferences lifetime as Products (24 hours by default), anchored to the product timestamp rather than the activity response time. Actions entries match each product's update; the SR snapshot matches the latest product update in the cycle. SR snapshots are stored separately by update timestamp so changing Reference does not overwrite a previous period's snapshot. Expired snapshots are removed on subsequent SR cache writes; Refresh all invalidates every snapshot. No credentials, request headers or debug envelopes are stored in this cache. Products loaded from cache restore matching activity entries without network calls. Missing, expired or mismatched entries are not treated as confirmed empty results; they wait for a real product refresh before a new activity query is allowed. Empty and entirely failed product cycles do not query activities. In mixed cycles, only fresh products permit activity API calls on cache misses; an already-loaded SR result is reused and associated with the new product update. Activity lookups do not advance the existing Last update timestamp. Closing and reopening the modal preserves results and does not reload products or trigger these lookups. Already-running product requests may finish in the background and update their related activities.

Workload Actions

The missing Act badge includes a separate plus control that opens an Action form with Owner, Role, Action, Team, Start date, End Date, Status, Complexity and Notes. Opening the form loads team members and action lookups using the WWB-TS token. Team members use the product RevnId; when multiple workloads are available, the user selects one before its members are requested. Owner options use email for both label and value; lookup options display name and submit code. All Action selects support local autocomplete by label or code, arrow-key navigation and Enter selection. Escape or leaving the field restores the last selected option; typed search text is never submitted as an option value. Fields are enabled only after both metadata requests return HTTP 200. Loading, errors and manual retry are supported, and debug logs mask the credential. Save validates all required fields and the date range before posting to the WWB actions endpoint. Dates are sent at midnight UTC in ISO format; notes are an array of strings (empty when omitted). The current user.id supplies createdBy and updatedBy. While saving, editing and dismissal are locked to prevent duplicate submissions. Success closes the form and displays a toast; failure preserves the form and displays an error toast without automatically retrying the POST. Cancel or Escape dismisses an idle form. The form is unavailable to SALES_REP users, like the other Action features.

SR and Action filter badges appear before Status for users allowed to view these activities. They filter the loaded data without issuing requests and combine with the existing opportunity filters. The SR below 4h option replaces the other SR selections and matches at least one linked SR with a numeric ReportedHours_c < 4 (including zero, excluding missing values). Action matches use the same ownership rule as the row badge. Loading/failed lookups are not treated as missing records; with both positive and negative options selected, all activity states remain visible. These selections are kept in memory, not persisted.

Workload Actions are queried in the background after the product cycle completes, and only after SR has completed successfully (or was restored/reused). If SR is unavailable, Actions are not requested and remain unknown rather than absent. Each failed workload lookup gets up to five total attempts, stopping on success or when its session is superseded. Cached products still do not trigger network lookups. Each distinct RevnId uses requestWlActions with the WWB-TS credential in Wwb-Provider-Authorization. The Act badge beside SR aggregates all products: green means an action's owner matches the general tokenrelay response's principal; red means no matching owner was found. Act ? means ownership could not be confirmed (including a missing principal). Tooltips retain all returned actions, regardless of owner. Credentials stay in memory only; the principal is used to scope persisted activity entries. Queries are shared per product cycle (up to four concurrently). Reference changes that load products from cache do not refresh activities. Only the first page is requested for now; hasNext is indicated in the tooltip. The debug panel groups these requests under Actions, with credentials masked.

Build

Use Node.js:

npm run build

The build updates dist/chromium and dist/firefox from the same source. It preserves the output directories and unchanged files, replacing changed files only after their complete contents have been written to a temporary file. Scripts are published before the manifest, avoiding missing or partially written scripts while an unpacked extension is loaded. Reload the extension and the Oracle page after updating; clear historical extension errors to check for new failures.

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 followed by the scoped src/features/debug/styles.css, src/features/opportunities/styles.css, src/features/install-base/styles.css, src/features/service-requests/styles.css src/features/consumption/plan-detail.css and src/features/ratecard/styles.css at build time. There is no runtime module loader, browser-side eval, ES-module requirement or new dependency.

Tests and Maintenance

Installed Base and Service Requests include a search input above their tables. Search filters loaded records across every displayed column, including raw and formatted numbers/dates, without additional API calls. Matching ignores case and accents; all whitespace-separated terms must match somewhere in the row. The result count updates as users type. Clearing the input restores all records; reopening a dialog starts with an empty search. Search remains available during loading and retains the entered terms when results arrive. Both themes are supported.

Each Cloud Consumption plan includes a Rate card button beside Contract ID. It opens an animated right-side drawer with skeleton rows, an all-column search and sortable headers. The drawer reuses the Cloud Consumption header component with the title Rate Card, customer subtitle, and the active plan's Booking Customer, Sold To Party Name, Contract ID, Header Status, Start Date and End Date. There is no separate plan-number subtitle or nested Rate Card action; its Close button dismisses only the drawer. requestRatecardByPlan sends the active plan's subPlanNum as the payload's planNumber, with recordsSize: 10000, to the fixed SPA endpoint. It uses the existing OCICONS-TS uiaasHeader.value in G2m-Authorization and is logged in the Consumption debug category with the existing credential masking. The eleven requested fields are displayed, including percentage discounts and USD prices with at least four decimal places. Search includes raw and formatted values; prices, quantities, percentages and dates sort by value. Only the drawer table scrolls, horizontally when its available width is below 1100px. Closing the drawer, changing plans or closing Cloud Consumption discards late UI updates. Concurrent requests for the same plan are shared; reopening after completion fetches again. Errors remain local. No new persisted cache, permissions, token refresh or retries are added. The provided contract requests up to 10000 records; the response's searchAfter is not used without a defined pagination contract. tests/ratecard.test.cjs covers transport, formatting, filtering, sorting and drawer lifecycle with synthetic responses and DOM, without launching browsers.

Cloud Consumption loads requestConsumptionPlanDetail for the active plan after account plans arrive, independently of the chart. Selecting another plan loads its subPlanNum on demand. The GET uses active=true and the raw OCICONS-TS uiaasHeader.value in G2m-Authorization, through the existing consumer session. Projection badges align with the chart container's left edge, while the Quarterly/Monthly/Weekly/Daily controls stay on the right of the same header row: red Forfeit, blue Overage. Hover or keyboard focus reveals an interactive tooltip; clicking pins it for access to the Order number links. Escape, Close, outside clicks, tab changes and modal closure dismiss it. Each root line retains its nested clines details. Only HTTPS order links on accountdashboard.oracle.com become clickable. Amounts use the requested non-LC fields, formatted without inferring a local currency. Details are kept only in the current modal, with in-flight deduplication and local loading/empty/error states. Failed details do not block the chart. The existing Consumption debug category includes this request.

The Service Requests action sits immediately after Installed Base below Customer. Its dialog opens with skeleton rows and lists open SRs for the selected customer. The background first calls requestAccountSummary with ACCP-TS, then uses its id (not registryId) in the GET requestCustomerServiceRequest URL. The SR credential is uiaasHeader.value from SPA-ORANGE, sent verbatim in custsr-auth, without a Bearer prefix, regardless of uiaasHeader.label. Pages of 40 are consolidated using totalResults, count and offset. Concurrent clicks for the same customer share the in-flight query; results are not cached, and closed/replaced dialogs ignore late responses. The table maps Name/Registry ID from customer, Product Name from component, and formats status as a badge and dates using the existing date formatter. Debug contains a Service Requests category; credential headers are masked before delivery to content. This feature adds no permissions or authentication retries.

The Installed Base action sits beside customer consumption below Customer. It opens a skeleton dialog, then calls requestAccountSummary with ACCP-TS and uses the returned registryId in requestInstallBase. The latter uses the SAIB-TS uiaasHeader.label and uiaasHeader.value, and loads pages of 25 until hasMore is false. Missing credentials, invalid collections and stalled pagination show an error rather than partial results. These requests appear in debug; credential headers in this flow are masked before delivery to the content script. No new cache, permissions or session recovery logic is introduced. Amounts use two decimal places without inferring a currency from the separate LC fields.

The opportunities table places product counts below Name and the customer consumption action below Customer, without a separate Actions column. Compact columns retain their values; Name and Customer share the remaining width while Owner is fixed at 132px. Both text cells reserve at least two text lines, and their controls stay anchored 10px above the row bottom, including while products load. Longer text can grow the row without overlapping controls. Horizontal scrolling is reserved for table containers below 1120px. The scoped table stylesheet does not change product-table column widths or the existing light/dark colors.

Product HTTP requests appear in Debug Requests (Ctrl+D) as soon as they start. Each entry identifies the opportunity and page offset, stays running while waiting for headers or the response body, and updates with HTTP status, response, duration or error. Cache hits do not create HTTP entries. Product diagnostics mask authorization and sensitive response headers before messaging the source tab/frame; this change adds no timeout, retry or authentication behavior.

Debug Requests opens as a full-page view inside the extension using Ctrl+D, without opening a browser tab or entering native browser fullscreen. Close, Escape or Ctrl+D returns to the underlying view. Header/category navigation remains above the scrollable timeline; expanded details use two columns on wide screens and one on narrow screens. Theme-specific colors distinguish success, failure, running, HTTP methods/statuses, request/response sections and JSON tokens. Highlighting uses safe text nodes only after the existing sensitive-value masking. Compact JSON, supported protection prefixes and JSON documents wrapped in strings are normalized and indented, including while sensitive values are visible. Large JSON responses are captured in full, preserving indentation, highlighting and sensitive-field masking. Original sensitive values are retained for explicit reveal, including identity, tokenrelay and catalog tokens. Already incomplete or invalid JSON remains plain text. The visibility toggle retains its existing behavior. Focus, expansion and timeline scroll position survive log updates.

Debug tabs group Authentication, Opportunities, Products, AI, Consumption, Installed Base and Service Requests requests; unknown request types appear under Other. Only categories with entries are shown. All preserves the complete timeline. Every tab sorts by request start time, retaining original request IDs and showing start times in collapsed rows. Counts and running states update without changing the selected category or collapsing expanded details. Use arrow keys, Home and End to navigate the tabs.

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 and the incremental refactoring record 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.

Release 1.0.2

  • Modularized the extension with regression tests and documented execution boundaries.
  • Added AI opportunity summaries with a dedicated, reusable Sales Common access token.
  • Added Installed Base and customer Service Requests tables with search and dark-mode support.
  • Expanded Cloud Consumption with plan projections, interactive details and a searchable, sortable Rate Card drawer.
  • Added Ramp Months, CRM Service Request and Workload Actions badges; SR details include direct links and copy controls.
  • Added a one-time current-user lookup before the initial request flow. Users with SALES_REP do not query or display CRM SR/Actions.
  • Improved debug request grouping, full-page viewing, response formatting and theme contrast.
  • Improved compact layouts, customer actions, session recovery and completion-badge fade-out behavior.
  • Regenerated Chromium/Edge and Firefox distributions. Validation uses automated, browser-independent tests; installed-browser smoke tests were not performed for this release.

Release 1.0.3 - 2026-10-13

  • Added monthly and weekly calendar views with stage colors, fiscal week labels, daily counts and overflow details.
  • Added searchable Action forms, required-field validation, saving and local badge updates.
  • Added Service Request creation with dynamic lookups, payload/header confirmation and session recovery.
  • Added Internal Service Request details and creation. Save reads parent data from requestSRInfo, resolves the current resource user, and links the new record using the parent SrId.
  • Internal SR creation uses Session authentication, JSON, Origin and the observed App Builder client ID. Customer deadlines remain date-only; internal deadlines use midnight UTC ISO timestamps.
  • Improved activity filters, cache reuse, Refresh all, progress indicators and compact layouts.
  • Debug retains complete response bodies and reveals original sensitive values through the visibility toggle; values are hidden by default.
  • Regenerated Chromium/Edge and Firefox distributions. Automated tests use synthetic data; real Oracle creation and installed-browser smoke tests are not part of release validation.

Release 1.0.4 - 2026-10-19

  • Added Manage Time with weekly navigation, a persisted reference date, daily hour totals and loading skeletons.
  • Added searchable Service Request, Activity and Task Type fields, expanded SR tooltips and separate Service/Non Service task types.
  • Existing time entries populate weekly hours and Notes. Local drafts are preserved while navigating between weeks.
  • Save creates entries with POST, updates changed entries with PUT and applies queued deletions with DELETE. Writes use Session, Origin and the observed App Builder client ID.
  • Added required-field validation, the 0-24 hour range, duplicate SR selection prevention, temporary row highlighting and success/error toasts.
  • Reused Cache duration across form queries and invalidated cached responses after successful writes. Resource user data is reused after SR session initialization.
  • Regenerated Chromium/Edge and Firefox distributions. Release validation uses synthetic automated tests; live Oracle writes and installed-browser smoke tests are not part of this validation.

Release 1.0.5 - 2026-10-20

  • Corrected Reference date ranges for Oracle fiscal quarters and years, updated the opportunity query structure and removed the Renewals reference.
  • Added paginated workload retrieval by unique customer account and joined workloads to products by RevnId.
  • Added consumption projection comparisons using adjustedACR, RampMonths_c and the reference workbook formula, including first-month proration.
  • Product and opportunity alerts identify monthly forecast differences. Single-product alerts open the comparison directly; multiple-product alerts expand the product list.
  • Added Update estimates with explicit confirmation before PATCH, dynamic calculated amounts and current-user attribution, duplicate-submit protection and success/error feedback.
  • Successful forecast updates refresh local comparisons and invalidate workload caches. Workloads reuse Cache duration across modal openings and token renewals.
  • Regenerated Chromium/Edge and Firefox distributions. Release validation uses synthetic automated tests; live Oracle writes and installed-browser smoke tests are not part of this validation.

Release 1.0.6 - 2026-10-21

  • Validate the current-user JSON structure before starting dependent requests, sharing concurrent authentication work and retrying failed identity acquisition.
  • Recover SPA sessions through one inactive auxiliary tab at https://spa.oracle.com/, preserving the originating window and Firefox cookie store.
  • Inspect the SPA document before retrying identity: reject error pages, SAML/login forms, OAuth callbacks and incomplete documents. HTTP 200, cookies and elapsed time alone no longer release identity probes.
  • Read identity in the verified SPA tab, at most once per document; restart rejected authentication at the home URL rather than replaying OAuth callbacks. Readiness timeouts do not trigger fallback API probes.
  • Correct native timer invocation and retain protected debug diagnostics and auxiliary-tab cleanup.
  • Regenerated Chromium/Edge and Firefox distributions. Validation uses synthetic automated tests; live Oracle authentication and installed-browser smoke tests were not performed for this release.

Release 1.0.7 - 2026-10-26

  • Remember table sorting preferences and restore the selected column and direction when reopening supported tables.
  • Retrieve the user's Opportunity saved searches before loading opportunities and use the default savedSearchNumber for copiedFrom across all result pages.
  • Show requestOpportunitiesSavedSearch in the Opportunities debug category and stop dependent queries when the default search is missing or invalid.
  • Regenerated Chromium/Edge and Firefox distributions. Release validation uses synthetic automated tests; live Oracle calls and installed-browser smoke tests were not performed for this release.

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.

Description
A browser extension for Chrome, Edge, and Firefox that provides a smoother browsing experience for opportunities retrieved from HCM Opportunities.
Readme 11 MiB
2026-10-30 17:53:03 +00:00
Languages
JavaScript 87.2%
CSS 12.8%