A Microsoft Edge browser extension for SpectrumVoIP support staff. When you're viewing a customer account in the Stratus portal, it automatically searches CentralDB and returns the matching ConnectWise company — bridging the gap between Stratus customer names and ConnectWise account names.
Customer names in Stratus often don't match the names in ConnectWise (our ticketing software). Finding the right ConnectWise account means manually copying the domain or company name, opening CentralDB, and searching — every single time.
Open the extension while on a Stratus portal tab. It reads the customer name and domain from the page, searches CentralDB automatically, and shows you the matching ConnectWise company — including the CW ID you need to pull up the right ticket.
- Auto-detects customer name and domain from the active Stratus portal tab
- Auto-grabs your auth token from CentralDB using MSAL cache decryption — no manual copy/paste
- Token status indicator — shows time remaining before expiry with color-coded dot (green / yellow / red)
- Manual token fallback — paste a Bearer token directly if auto-grab fails
- Result cards — shows company name, billing domain, phone, billing status, and ConnectWise ID
- Deduplication — searches by both company name and domain, merges and dedupes results by ID
CentralDB authenticates via Microsoft MSAL (Azure AD). The token is stored in the browser encrypted — the encrypted blob lives in localStorage and the decryption key lives in a cookie. Neither is useful alone.
When you open the extension on the CentralDB tab, it:
- Reads the encrypted token entry from
localStorage - Reads the encryption key from the
msal.cache.encryptioncookie - Derives a final AES key using HKDF (SHA-256)
- Decrypts the token using AES-GCM
- Saves the resulting JWT to
chrome.storage.local
The token is a standard JWT — the extension reads the exp claim to display how much time is left before it expires (typically ~84 minutes).
On portal tabs, the extension reads:
- Company name from
.domain-description - Domain from
.domain-message-text— extracted via regex targeting a valid domain pattern (e.g.example.com)
Both the company name and domain are sent as parallel requests to:
GET https://centraldb.spectrumvoip.com:8081/api/v1/master-search?search=<query>&module=connectwise
Results are merged and deduplicated by ConnectWise company ID.
This extension is not published to the Edge Add-ons store. Install it in Developer Mode.
- Download and unzip the extension folder
- Open Edge and navigate to
edge://extensions - Enable Developer mode (toggle in the bottom-left)
- Click Load unpacked
- Select the unzipped
centraldb-fixedfolder - The extension icon will appear in your toolbar
This extension is not published to the Firefox Add-ons store. Install it manually using an
.xpifile.
Standard Install (Signed XPI)
- Download the
.xpifile - Open Mozilla Firefox
- Drag and drop the
.xpifile into the Firefox window — OR:- Navigate to
about:addons - Click the ⚙️ gear icon
- Select Install Add-on From File
- Choose the
.xpifile
- Navigate to
- Click Add when prompted for permissions
Developer Install (Unsigned XPI)
If the extension is unsigned, Firefox will block installation on stable builds.
Option 1 — Temporary Load
- Open Firefox and navigate to
about:debugging - Click This Firefox
- Click Load Temporary Add-on
- Select the
.xpifile
Note: Temporary add-ons are removed when Firefox is closed. For a permanent install, the extension must be signed.
Option 2 — Disable Signature Enforcement (Firefox Developer Edition / Nightly only)
- Navigate to
about:config - Set
xpinstall.signatures.requiredtofalse - Install the
.xpinormally viaabout:addons
- Open a new tab and navigate to
centraldb.spectrumvoip.com - Let the page fully load
- Click the extension icon — it will auto-grab the token from the page
- The token bar will turn green with time remaining
Token expiring? Go back to the CentralDB tab, do anything that triggers an API call (search, navigate), or hard refresh (
Ctrl+Shift+R). The extension intercepts the token automatically.
- Navigate to a customer account in the Stratus portal
- Click the extension icon
- The detected company name and domain will appear
- Click Search CentralDB
- Matching ConnectWise companies appear as result cards
centraldb-fixed/
├── manifest.json # Extension config, permissions, content script declarations
├── popup.html # Extension popup UI
├── popup.js # Main logic — token grab, page scrape, search, render
├── background.js # Service worker — persists token messages to storage
├── bridge.js # Isolated world bridge — relays token events to chrome.storage
├── content.js # Injected on CentralDB — floating "Copy Token" button + interceptors
├── content-centraldb.js # Injected on CentralDB at document_start — fetch/XHR interceptors
├── debug.html # Debug panel UI
├── debug.js # Debug tooling
└── icons/
├── icon16.png
├── icon48.png
└── icon128.png
| Permission | Why |
|---|---|
activeTab |
Read page content from the current tab |
storage |
Save the Bearer token between popup opens |
scripting |
Execute scripts on CentralDB/Stratus tabs to grab token and scrape page |
| Host permissions | Scope access to SpectrumVoIP domains only |
- The Bearer token is stored locally in your browser only (
chrome.storage.local) — it is never sent to any external server - The token is only used to authenticate requests to
centraldb.spectrumvoip.com— the same destination you'd use manually - Tokens expire automatically (~84 minutes based on Azure AD configuration)
- Do not share the extension with a token already saved in storage, and avoid pasting tokens into chat or tickets
| Issue | Fix |
|---|---|
| HTTP 500 on search | Grab a fresh token from the CentralDB tab |
| "No token saved" | Navigate to CentralDB, open the popup, token should auto-grab |
| Token time not updating | Trigger an API call on the CentralDB tab (search something) or hard refresh (Ctrl+Shift+R) |
| Nothing detected on page | The portal page selector may not match — check that you're on an active domain/account page |
| Domain extracted incorrectly | Ensure the page text contains a valid domain in parentheses e.g. (example.com) |