dragonflight/services/premiere-plugin/build/releases/v1.0.1/README.md
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

3.4 KiB

Dragonflight Premiere Panel — v1.0.1

Built 2026-05-23 from feat/premiere-installer. First release that actually loads under Premiere Pro 2025 (CEP 12) and connects to an auth-enabled mam-api.

What changed since v1.0.0

Problem Fix
manifest.xml had -- inside an XML comment → CEP 12 refused to parse it Comment rewritten without double hyphens
manifest.xml lacked a Version="X.Y" attribute on the root and used a non-standard AbstractionLayers/ExtensionList structure → CEP rejected with Unsupported Manifest version '' Rewritten to the standard CSXS 7.0 schema (ExtensionList + DispatchInfoList), matching the working AMPP panel template
main.js re-declared const csInterface at top-level — CSInterface.js already declared the same binding. CEP 12 shares script-realm lexical scope across <script> tags, so main.js threw Identifier 'csInterface' has already been declared and never ran. The click handler for Connect was never attached → "nothing happens." Removed the duplicate declaration; main.js now uses the binding set up by CSInterface.js
No way to authenticate against mam-api when AUTH_ENABLED=true (panel only sent credentials: 'include', but it has no session cookie) Added an "API Token" password field next to Server URL; persists to localStorage; window.fetch is monkey-patched to inject Authorization: Bearer <token> on every request to the configured server
Server URL field had a change-event listener that only fired on blur — quick "type URL → click Connect" cycles never saved the URL Switched to input event so every keystroke commits. Also normalizes any trailing slash on restore so old saved http://host/ values stop producing //api/v1 404s
New token input was type="password", but the CSS selector was input[type="text"].server-url → unstyled, invisible against the dark theme. The 3-column grid layout also crammed the new row into a button-width slot Connection bar restructured into a .connection-controls--stacked flex column of two .server-input-row flex rows; CSS input selector generalized to input.server-url
Build scripts' version-extraction regex only matched the old <ExtensionBundleVersion>X</...> element form Now matches both element and attribute forms

Artifacts

File Size Install
dragonflight-premiere-panel-1.0.1-windows-setup.exe 2.0 MB Windows — double-click
dragonflight-premiere-panel-1.0.1.zxp 35 KB macOS + Windows — Anastasiy's ZXP Installer

Configuring after install

  1. Open Premiere → Window → Extensions → Wild Dragon MAM
  2. Server URL: e.g. http://10.0.0.25:47434
  3. API token: generate one via
    curl -c cookies.txt -X POST $API/api/v1/auth/login \
         -H 'Content-Type: application/json' \
         -d '{"username":"USER","password":"PASS"}'
    
    curl -b cookies.txt -X POST $API/api/v1/tokens \
         -H 'Content-Type: application/json' \
         -d '{"name":"premiere-panel"}'
    
    Paste the returned token value (starts with wd_) into the panel.
  4. Click Connect — status dot turns green and projects populate the dropdown.

If your mam-api runs with AUTH_ENABLED unset/false, the token field can be left empty.