dragonflight/services/premiere-plugin/build
Zac Gaetano eadafffb18 fix(premiere-plugin): v1.0.1 — actually load + connect under CEP 12
End-to-end debugging against a live Premiere Pro 2025 + auth-enabled mam-api
surfaced four real bugs that made v1.0.0 install cleanly but never load,
plus the missing auth flow. All four are fixed and the panel is verified
connected (status dot green, Reconnect button shown, project list populated).

  - manifest.xml: a comment in the <Resources> block contained "--" (inside
    "--enable-nodejs"/"--mixed-context"), which is illegal per the XML spec.
    CEP 12's strict parser logged
        ERROR XPATH Double hyphen within comment
    and skipped the panel entirely. Comment rewritten without double hyphens.

  - manifest.xml: lacked the Version="X.Y" attribute on <ExtensionManifest>
    and used a non-standard AbstractionLayers/empty <ExtensionList/>
    structure. CEP rejected it with
        Unsupported Manifest version ''
    Manifest rewritten to the standard CSXS 7.0 schema (ExtensionList +
    DispatchInfoList + RequiredRuntimeList), matching the working AMPP
    panel template.

  - main.js: re-declared `const csInterface = new CSInterface()` at top
    level even though CSInterface.js already declared the same binding.
    CEP 12 shares script-realm lexical scope across <script> tags, so the
    second const threw
        Identifier 'csInterface' has already been declared
    The throw fired before setupEventListeners(), so the Connect button's
    click handler was never attached. This is the root cause of the
    original "clicking Connect does nothing" symptom; everything else was
    secondary. Removed the duplicate declaration; main.js now uses the
    binding from CSInterface.js.

  - No auth support against AUTH_ENABLED=true servers. mam-api supports
    Bearer tokens (POST /api/v1/tokens), so added:
      • API token input field (password-masked) next to Server URL
      • localStorage persistence on every keystroke
      • window.fetch monkey-patch that injects
          Authorization: Bearer <token>
        on every request whose URL starts with the configured server.
        Signed S3 download URLs are NOT touched.

Drive-by fixes that came out of the same debugging pass:
  - Server URL input listener was 'change' (fires on blur); switched to
    'input' so typing-then-clicking-Connect immediately commits.
  - restoreSettings() now strips trailing slashes from the stored URL so
    older saved values like 'http://host/' stop producing //api/v1 404s.
  - CSS selector `input[type="text"].server-url` didn't match the new
    password input → the token field was unstyled and effectively invisible.
    Generalized to `input.server-url`; restructured the connection bar into
    `.connection-controls--stacked` (flex column) of two `.server-input-row`
    rows so two input fields fit cleanly.
  - Build scripts now parse ExtensionBundleVersion from both element form
    (<ExtensionBundleVersion>X</...>) and attribute form
    (ExtensionBundleVersion="X"), since the manifest rewrite switched
    schemas.

Version bumped 1.0.0 → 1.0.1. New artifacts committed at
services/premiere-plugin/build/releases/v1.0.1/ (.exe 2 MB, .zxp 35 KB).
v1.0.0 left in place so editors who downloaded it can verify they're on
the broken version.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-23 19:24:10 -04:00
..
cert fix(premiere-plugin): correct zxp-sign-cmd version + promise API; commit generated signing cert 2026-05-23 16:17:31 -04:00
releases fix(premiere-plugin): v1.0.1 — actually load + connect under CEP 12 2026-05-23 19:24:10 -04:00
.gitignore feat(premiere-plugin): ZXP + Windows installer build pipeline 2026-05-23 16:13:20 -04:00
build-all.ps1 feat(premiere-plugin): ZXP + Windows installer build pipeline 2026-05-23 16:13:20 -04:00
build-installer.ps1 fix(premiere-plugin): v1.0.1 — actually load + connect under CEP 12 2026-05-23 19:24:10 -04:00
build-zxp.mjs fix(premiere-plugin): v1.0.1 — actually load + connect under CEP 12 2026-05-23 19:24:10 -04:00
installer.iss fix(premiere-plugin): remove broken Inno Setup [Code] heuristic 2026-05-23 16:18:19 -04:00
package-lock.json fix(premiere-plugin): correct zxp-sign-cmd version + promise API; commit generated signing cert 2026-05-23 16:17:31 -04:00
package.json fix(premiere-plugin): make build pipeline portable to Windows PowerShell 5.1 2026-05-23 16:22:46 -04:00
README.md fix(premiere-plugin): make build pipeline portable to Windows PowerShell 5.1 2026-05-23 16:22:46 -04:00

Premiere panel installer — build pipeline

Produces two artifacts from services/premiere-plugin/:

File Platform How an editor installs it
dist/dragonflight-premiere-panel-<version>.zxp macOS + Windows Drag into Anastasiy's ZXP Installer
dist/dragonflight-premiere-panel-<version>-windows-setup.exe Windows Double-click, Next → Finish

The version is read from CSXS/manifest.xml's <ExtensionBundleVersion>. To cut a new release: bump that one number, rebuild, attach the two files to a Forgejo release tag.

Prerequisites

Building Requires
.zxp only Node 18+, runs on macOS / Linux / Windows
.exe Windows + Inno Setup 6 on PATH (ISCC.exe)
Both via build-all.ps1 Windows + Node 18+ + Inno Setup 6

Install Inno Setup with winget:

winget install --id JRSoftware.InnoSetup

Build

cd services/premiere-plugin/build
npm install
powershell -File build-all.ps1

Artifacts land in services/premiere-plugin/build/dist/.

To build just one:

node build-zxp.mjs                          # cross-platform .zxp
powershell -File build-installer.ps1         # Windows .exe (needs ISCC.exe)

Signing cert (.zxp)

The first node build-zxp.mjs run generates a self-signed cert at cert/dragonflight-selfsigned.p12 + passphrase at cert/cert-passphrase.txt. Commit both files — they need to be stable across builds so Adobe accepts ZXP upgrades in place. If you regenerate the cert, every editor who already installed an older .zxp has to uninstall + reinstall.

The cert is self-signed → editors still need PlayerDebugMode=1. The Windows .exe installer sets this automatically. ZXP installs on macOS need a manual defaults write com.adobe.CSXS.11 PlayerDebugMode 1.

See cert/README.md for cert details + how to regenerate.

What the installers do

Both install the bundle as net.wilddragon.dragonflight.panel. The Windows .exe additionally:

  1. Removes any legacy com.wilddragon.mam.panel folder (with a consent checkbox, default on) — avoids editors seeing two panels in Window → Extensions.
  2. Sets HKCU\Software\Adobe\CSXS.{8..13}\PlayerDebugMode = "1" so unsigned CEP extensions load.
  3. Registers itself in Add/Remove Programs so uninstall reverses both.

Layout

build/
├── README.md                  ← this file
├── package.json               ← devDep: zxp-sign-cmd
├── .gitignore                 ← ignores dist/ + node_modules/
├── build-all.ps1              ← runs both builders
├── build-zxp.mjs              ← Node: generates cert (first run), signs, packages
├── build-installer.ps1        ← wraps ISCC.exe with version + bundle-id flags
├── installer.iss              ← Inno Setup script
└── cert/
    ├── README.md              ← how to regenerate
    ├── dragonflight-selfsigned.p12   ← generated on first build (commit it)
    └── cert-passphrase.txt           ← generated on first build (commit it)