mirror of
https://github.com/saphid/frame-control.git
synced 2026-10-06 06:00:33 +02:00
A site can link to frame-control://install?manifest=URL (or ?url=URL) to install a title with Frame Control. Manifests use FrameDrop's format, so framedrop.install/v1 is accepted as well as frame-control.install/v1. - app/install-link.js parses links; main.js registers the scheme (plus electron-builder protocols for Info.plist and the .desktop file), takes links from open-url, second-instance argv and the first argv, and holds them until the page asks for them through preload's onInstallLink. - ui/frame_webinstall.py checks the URLs (HTTPS only; localhost over http only when the link itself is local; no userinfo; every address public, rechecked on redirects and pinned for the connection), reads the manifest, downloads with a size cap and sha256 check, and dispatch() sends .apk to frame_android and .zip/.exe to frame_titles when present. - server.py adds /api/webinstall/check, start, job and cancel behind the existing Host and X-Frame-UI guards; a start needs a one-time id from check. Downloads stop on cancel and on shutdown, and leftovers from a killed server are swept by PID. - index.html asks before anything downloads (name, source host, file, type, size, whether a sha256 was given) and shows progress. - docs/web-install.md, docs/install.html (landing page, unpublished). Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
156 lines
3.9 KiB
JSON
156 lines
3.9 KiB
JSON
{
|
|
"name": "frame-control",
|
|
"productName": "Frame Control",
|
|
"version": "0.3.1",
|
|
"description": "Desktop app for managing a Valve Steam Frame over SSH",
|
|
"private": true,
|
|
"main": "main.js",
|
|
"license": "MIT",
|
|
"scripts": {
|
|
"start": "env -u ELECTRON_RUN_AS_NODE electron .",
|
|
"icon": "env -u ELECTRON_RUN_AS_NODE electron build/make-icon.js",
|
|
"dist": "node build/fetch-deps.js mac arm64 && electron-builder --mac --arm64 --publish never",
|
|
"dist:dir": "node build/fetch-deps.js mac arm64 && electron-builder --mac --arm64 --dir",
|
|
"dist:linux": "node build/fetch-deps.js linux x64 arm64 && electron-builder --linux --x64 --arm64 --publish never",
|
|
"dist:win": "node build/fetch-deps.js win x64 && electron-builder --win --x64 --publish never"
|
|
},
|
|
"devDependencies": {
|
|
"electron": "^44.4.5",
|
|
"electron-builder": "^26.15.3"
|
|
},
|
|
"build": {
|
|
"appId": "com.saphid.frame-control",
|
|
"productName": "Frame Control",
|
|
"protocols": [
|
|
{
|
|
"name": "Frame Control install link",
|
|
"schemes": [
|
|
"frame-control"
|
|
]
|
|
}
|
|
],
|
|
"directories": {
|
|
"output": "dist",
|
|
"buildResources": "build"
|
|
},
|
|
"files": [
|
|
"main.js",
|
|
"preload.js",
|
|
"install-link.js",
|
|
"package.json",
|
|
"build/icon.png"
|
|
],
|
|
"extraResources": [
|
|
{
|
|
"from": "../ui",
|
|
"to": "ui",
|
|
"filter": [
|
|
"*.py",
|
|
"*.html"
|
|
]
|
|
},
|
|
{
|
|
"from": "../scripts",
|
|
"to": "scripts",
|
|
"filter": [
|
|
"*.sh"
|
|
]
|
|
},
|
|
{
|
|
"from": "../frame/android",
|
|
"to": "frame/android",
|
|
"filter": [
|
|
"*.sh",
|
|
"*.py"
|
|
]
|
|
},
|
|
{
|
|
"from": "../apk-catalog",
|
|
"to": "apk-catalog",
|
|
"filter": [
|
|
"*.py",
|
|
"pins.json",
|
|
"site/apps.js"
|
|
]
|
|
},
|
|
{
|
|
"from": "build/deps/${os}-${arch}/python",
|
|
"to": "python",
|
|
"filter": [
|
|
"**/*"
|
|
]
|
|
},
|
|
{
|
|
"from": "build/deps/${os}-${arch}/tools",
|
|
"to": "tools",
|
|
"filter": [
|
|
"**/*"
|
|
]
|
|
}
|
|
],
|
|
"mac": {
|
|
"category": "public.app-category.utilities",
|
|
"icon": "build/icon.icns",
|
|
"identity": "-",
|
|
"hardenedRuntime": false,
|
|
"target": [
|
|
"dmg",
|
|
"zip"
|
|
],
|
|
"extendInfo": {
|
|
"NSAppleEventsUsageDescription": "Frame Control opens Terminal for SSH sessions and for power actions that need the Developer Mode password.",
|
|
"NSLocalNetworkUsageDescription": "Frame Control connects to your Steam Frame over SSH on the local network."
|
|
},
|
|
"artifactName": "Frame-Control-mac-${arch}.${ext}"
|
|
},
|
|
"dmg": {
|
|
"title": "Frame Control ${version}"
|
|
},
|
|
"electronFuses": {
|
|
"runAsNode": false,
|
|
"enableNodeOptionsEnvironmentVariable": false,
|
|
"enableNodeCliInspectArguments": false
|
|
},
|
|
"linux": {
|
|
"target": [
|
|
"AppImage",
|
|
"deb"
|
|
],
|
|
"category": "Utility",
|
|
"icon": "build/icon.png",
|
|
"executableName": "frame-control",
|
|
"synopsis": "Manage a Valve Steam Frame over SSH",
|
|
"artifactName": "Frame-Control-linux-${arch}.${ext}",
|
|
"desktop": {
|
|
"entry": {
|
|
"StartupWMClass": "frame-control"
|
|
}
|
|
}
|
|
},
|
|
"deb": {
|
|
"depends": [
|
|
"openssh-client"
|
|
]
|
|
},
|
|
"win": {
|
|
"target": [
|
|
"nsis",
|
|
"zip"
|
|
],
|
|
"icon": "build/icon.png",
|
|
"artifactName": "Frame-Control-win-${arch}.${ext}"
|
|
},
|
|
"nsis": {
|
|
"oneClick": false,
|
|
"perMachine": false,
|
|
"allowToChangeInstallationDirectory": true,
|
|
"artifactName": "Frame-Control-Setup-${arch}.${ext}"
|
|
}
|
|
},
|
|
"homepage": "https://github.com/saphid/steam-frame",
|
|
"author": {
|
|
"name": "saphid",
|
|
"email": "4596216+saphid@users.noreply.github.com"
|
|
}
|
|
}
|