Automation Kit

The Eagle 3D Streaming Automation Kit is a Node.js package that uploads a packaged Unreal build, registers it, and waits for the stream test — so a deployment can be a step in a script rather than a person at a browser.

Two ways to automate an upload

The Automation Tools plugin works from inside Unreal, which suits a developer packaging by hand. The Automation Kit works from a script, which is what you want in a CI/CD pipeline where nobody is watching.

Install

npm install e3ds-automation-kit

The package is on npm.

The script

const { uploadStreamingApp } = require("e3ds-automation-kit");

(async () => {
  try {
    await uploadStreamingApp(
      "../../Downloads/tinyApp.zip",  // path to the .zip
      process.env.E3DS_API_KEY,       // your API key
      "MyStreamingApp"                // app name
    );
    console.log("Upload completed successfully!");
  } catch (err) {
    console.error("Upload failed:", err.message);
  }
})();
node index.js

Which then validates the path, requests a signed upload URL, uploads with progress, and polls until the stream test finishes.

The path argument

Most failures here are the path, so it is worth getting right first time. It must point at the .zip file itself, not the folder holding it and not the project directory.

FormExampleWorks
Relative to where you run node"../../Downloads/tinyApp.zip"Yes
Windows, forward slashes"C:/Users/USER/Downloads/tinyApp.zip"Yes — the easiest on Windows
Windows, escaped backslashes"C:\\Users\\USER\\Downloads\\tinyApp.zip"Yes
macOS or Linux"/Users/USER/Downloads/tinyApp.zip"Yes
Windows, single backslashes"C:\Users\USER\Downloads\tinyApp.zip"No — JavaScript reads \ as an escape character
A folder"C:/Users/USER/Downloads/"No — must end in .zip

The app name argument

Letters, numbers and underscores only. No spaces, no hyphens, no dots, no other punctuation.

"MyStreamingApp"    // fine
"My_App_01"         // fine
"app123"            // fine

"My Streaming App"  // space
"My-App"            // hyphen
"My@App"            // symbol
"My.App"            // dot

This is the name that appears in your Control Panel once the upload lands.

When it fails

SymptomCauseFix
Cannot find module 'e3ds-automation-kit'Not installed in this projectnpm install e3ds-automation-kit
Cannot find module '...index.js'Wrong filename or wrong directoryRun the file that exists, from where it exists.
No output at allNode did not runCheck node -v works.
Fails at once with Invalid appNameSpaces or symbols in the app nameThe name is checked before anything is sent, so nothing was uploaded. Use letters, numbers, underscores.
It retries repeatedlyUnstable connectionIt retries each step several times on its own, with growing waits — up to 10 times for the upload itself. If every retry fails, the network is the problem.
Log says Stream test did not complete within 10 minutesLarge build, slow linkThe kit stops waiting after 10 minutes but does not throw — the promise still resolves, so the script above prints Upload completed successfully! anyway. Look for that log line, then check the Control Panel, where the stream test may still be progressing.

Last updated