Skip to content

power-eagle/eagle-connect

Repository files navigation

Eagle Connect

Eagle Connect is an Eagle plugin for exposing an Eagle library through SMB, WebDAV, and FTP from a single in-app control panel.

The plugin supports two main workflows:

  • browsing Eagle items from external clients through protocol listing routes
  • receiving uploaded files through protocol uploader endpoints and importing them back into Eagle

docs/bg.png

Overview

The UI provides three protocol tabs:

  • smb
  • webdav
  • ftp

Each protocol has its own persisted:

  • server toggle
  • port
  • page size
  • route set

When started inside Eagle, the plugin reads the active library path, loads persisted config through eagle-cooltils, and starts a real npm-backed protocol server for the selected protocol.

Route Types

Each protocol uses the same three route kinds.

all

The builtin route for browsing the whole library.

  • only one all route is allowed per protocol
  • the path is generated by the protocol adapter
  • listings are paged using the protocol page size

filtered

A custom browse route backed by saved Eagle-style grouped filters.

  • filtered routes use unique custom paths per protocol
  • filter definitions support top-level AND or OR
  • each group can contain multiple rules
  • listing results are resolved to concrete Eagle items before files are served

uploader

A custom upload endpoint for importing incoming files into Eagle.

  • uploader routes use unique custom paths per protocol
  • uploads can go to unsorted
  • uploads can be imported into a selected Eagle folder

Protocol Backends

SMB

  • backed by node-smb-server
  • exposes route-aware listing shares and uploader endpoints
  • intended for Windows-style file sharing clients

WebDAV

  • backed by webdav-server
  • supports mounted listing paths and uploader directories
  • serves concrete Eagle files through dynamic mounted resources

FTP

  • backed by ftp-srv
  • exposes route-aware virtual filesystem listings
  • supports uploader staging folders that import files into Eagle

Persistence

Protocol config is stored per Eagle library through eagle-cooltils.

Persisted values include:

  • protocol ports
  • protocol page sizes
  • protocol route definitions

Config rehydrates after the Eagle runtime becomes available, which avoids losing settings when the React app mounts before Eagle finishes initializing its plugin APIs.

Development Stack

  • React 19
  • TypeScript 6
  • Vite 8
  • Tailwind CSS 4
  • daisyUI 5
  • Vitest
  • Testing Library

Runtime packages:

  • eagle-cooltils
  • ftp-srv
  • webdav-server
  • node-smb-server

Local Development

Install dependencies:

pnpm install

Build once:

pnpm build

Watch builds:

pnpm dev

Run tests:

pnpm test

Run tests in watch mode:

pnpm test:watch

Run lint:

pnpm lint

Running In Eagle

This project targets the Eagle plugin runtime.

  • the frontend can build outside Eagle
  • protocol runtime startup depends on Eagle runtime APIs and the current library path
  • outside Eagle, server startup is expected to be unavailable

Plugin metadata is defined in manifest.json, and the built UI loads from dist/index.html.

Packaging

Packaging is controlled by .eagleplus/config/pkg-rules.json.

The package currently includes:

  • dist/assets/**
  • dist/index.html
  • manifest.json
  • logo.png
  • _locales

Useful packaging commands:

node .eagleplus/scripts/doctor.cjs
node .eagleplus/scripts/package-plugin.cjs --check
node .eagleplus/scripts/package-plugin.cjs release
node .eagleplus/scripts/package-plugin.cjs debug
node .eagleplus/scripts/package-local.cjs

doctor.cjs is the fastest way to inspect the exact packaging inputs.

Project Structure

Notes

  • This repository is pnpm-first.
  • dist/ is intentionally preserved in the normal workflow for this repo.
  • The README documents the plugin itself rather than the original template scaffold.

About

eagle plugin for smb, ftp and webdav servers

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors