mirror of
https://github.com/screentinker/screentinker.git
synced 2026-08-19 08:33:56 -06:00
TWO CHANGES, together because they touch the same packager hunks. 1. THE DRIVER. The BrightSign package used to be MANUFACTURED. scripts/build-server-zip.sh dropped better-sqlite3 from package.json and then installed db/sqlite-compat.js into node_modules under that name, so every require resolved to the façade. It worked — and it shipped a database layer that no test had ever executed. That is the same shape as the TELEMETRY_COLLECTOR TDZ crash that took production down while 1676 tests and four CI jobs were green: a build-time rewrite cannot be tested by the build that performs it. db/sqlite-driver.js now decides at runtime: the native driver when it loads, the node:sqlite façade otherwise. One artifact, one code path, and — the point — both branches reachable from a test. ST_SQLITE_DRIVER=node runs the entire suite the way a player runs it, and a new CI job does exactly that on Node 24 with --omit=optional so the fallback is reached the same way it is on hardware, not by an env var alone. better-sqlite3 becomes an optionalDependency, so a host with no compiler installs cleanly and falls back rather than failing. preflight-deps stops trying to rebuild a native module on a host that has no toolchain and a working built-in driver — on a player that was a five-minute node-gyp failure ending in a server that never started. Asking for the native driver BY NAME (ST_SQLITE_DRIVER=better-sqlite3) still fails loudly, because a production box that has lost its native module is broken and should say so rather than quietly running something else. ⚠️ NODE 24 IN PRACTICE. node:sqlite is unflagged only from 23.4; on the 22.x line it needs --experimental-sqlite and on 20.x it does not exist. So the code probes rather than comparing versions, the player package pins engines >=24, and the built-in cases skip on the Node 20 CI job rather than failing there. Verified on Node 24, both drivers, full suite: better-sqlite3 1762 pass / 0 fail node:sqlite 1762 pass / 0 fail and the built payload resolves node:sqlite with no better-sqlite3 present at all. 2. THE LICENCE. The ffprobe/ffmpeg binaries added in the previous commit are LGPL 2.1 and statically linked, so the licence text has to travel WITH them — a link on a website is not the copy the licence asks to accompany the work. The packager now copies COPYING.LGPLv2.1 and a build README into bin/, and refuses to build if the licence is missing. legal/third-party.html gains an LGPL section with the written offer required by section 6 for static linking, and the exact configure line. It also drops Sharp, which that page still listed although #263 removed it, and names what actually does the image work now (jimp, @jsquash/webp, @jsquash/avif). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014kfhrUPit5MCqxeTQyqr56
132 lines
7.7 KiB
HTML
132 lines
7.7 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Third-Party Licenses - ScreenTinker</title>
|
|
<style>
|
|
* { margin:0; padding:0; box-sizing:border-box; }
|
|
body { font-family:-apple-system,sans-serif; background:#111827; color:#e2e8f0; line-height:1.8; }
|
|
.container { max-width:800px; margin:0 auto; padding:40px 24px 80px; }
|
|
h1 { color:#3b82f6; font-size:32px; margin-bottom:8px; }
|
|
.updated { color:#64748b; font-size:14px; margin-bottom:40px; }
|
|
h2 { color:#f1f5f9; font-size:18px; margin:32px 0 8px; }
|
|
p, li { color:#94a3b8; font-size:14px; margin-bottom:8px; }
|
|
a { color:#3b82f6; }
|
|
.back { display:inline-flex; align-items:center; gap:6px; color:#64748b; font-size:13px; margin-bottom:24px; text-decoration:none; }
|
|
.back:hover { color:#94a3b8; }
|
|
.license-block { background:#0f172a; border:1px solid #1e293b; border-radius:8px; padding:16px; margin:12px 0 24px; font-size:12px; font-family:monospace; white-space:pre-wrap; color:#64748b; overflow-x:auto; }
|
|
table { width:100%; border-collapse:collapse; margin:16px 0 32px; }
|
|
th, td { padding:10px 12px; text-align:left; border-bottom:1px solid #1e293b; font-size:13px; color:#94a3b8; }
|
|
th { color:#cbd5e1; font-weight:600; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<a href="/" class="back">← Back to ScreenTinker</a>
|
|
<h1>Third-Party Software Notices</h1>
|
|
<p class="updated">Last updated: March 24, 2026</p>
|
|
|
|
<p>ScreenTinker uses the following open-source software components. We gratefully acknowledge the contributions of these projects and their maintainers.</p>
|
|
|
|
<h2>Summary</h2>
|
|
<table>
|
|
<thead><tr><th>Package</th><th>License</th><th>Use</th></tr></thead>
|
|
<tbody>
|
|
<tr><td>Express</td><td>MIT</td><td>Web server framework</td></tr>
|
|
<tr><td>Socket.IO</td><td>MIT</td><td>Real-time WebSocket communication</td></tr>
|
|
<tr><td>better-sqlite3</td><td>MIT</td><td>SQLite database driver</td></tr>
|
|
<tr><td>Multer</td><td>MIT</td><td>File upload handling</td></tr>
|
|
<tr><td>uuid</td><td>MIT</td><td>Unique ID generation</td></tr>
|
|
<tr><td>Jimp</td><td>MIT</td><td>Image processing and thumbnails</td></tr>
|
|
<tr><td>@jsquash/webp, @jsquash/avif</td><td>Apache 2.0</td><td>WebP / AVIF encoding</td></tr>
|
|
<tr><td>FFmpeg (ffprobe, ffmpeg)</td><td>LGPL 2.1 or later</td><td>Video duration, dimensions and thumbnails. Bundled as unmodified binaries with the BrightSign player package only; built from unmodified FFmpeg 7.1.1 sources configured <code>--disable-gpl</code>, so no GPL component (including libpostproc) is included.</td></tr>
|
|
<tr><td>cors</td><td>MIT</td><td>Cross-origin resource sharing</td></tr>
|
|
<tr><td>bcryptjs</td><td>MIT</td><td>Password hashing</td></tr>
|
|
<tr><td>jsonwebtoken</td><td>MIT</td><td>JWT authentication tokens</td></tr>
|
|
<tr><td>Helmet</td><td>MIT</td><td>HTTP security headers</td></tr>
|
|
<tr><td>google-auth-library</td><td>Apache 2.0</td><td>Google OAuth verification</td></tr>
|
|
<tr><td>OkHttp</td><td>Apache 2.0</td><td>Android HTTP client</td></tr>
|
|
<tr><td>Gson</td><td>Apache 2.0</td><td>Android JSON parsing</td></tr>
|
|
<tr><td>AndroidX Media3 / ExoPlayer</td><td>Apache 2.0</td><td>Android video playback</td></tr>
|
|
<tr><td>AndroidX libraries</td><td>Apache 2.0</td><td>Android UI and lifecycle</td></tr>
|
|
<tr><td>Material Components for Android</td><td>Apache 2.0</td><td>Android UI components</td></tr>
|
|
<tr><td>Socket.IO Java Client</td><td>MIT</td><td>Android WebSocket client</td></tr>
|
|
<tr><td>Kotlin Coroutines</td><td>Apache 2.0</td><td>Android async operations</td></tr>
|
|
<tr><td>AndroidX Security Crypto</td><td>Apache 2.0</td><td>Encrypted SharedPreferences</td></tr>
|
|
<tr><td>AndroidX WorkManager</td><td>Apache 2.0</td><td>Background task management</td></tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<h2>MIT License</h2>
|
|
<p>The following packages are licensed under the MIT License:</p>
|
|
<p>Express, Socket.IO, better-sqlite3, Multer, uuid, cors, bcryptjs, jsonwebtoken, Helmet, Socket.IO Java Client</p>
|
|
<div class="license-block">MIT License
|
|
|
|
Copyright (c) respective authors and contributors
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction, including without limitation the rights
|
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
copies of the Software, and to permit persons to whom the Software is
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be included in all
|
|
copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
SOFTWARE.</div>
|
|
|
|
<h2>GNU Lesser General Public License v2.1</h2>
|
|
<p>
|
|
The BrightSign player package bundles two FFmpeg command-line programs, <code>ffprobe</code>
|
|
and <code>ffmpeg</code>, used to read the duration and dimensions of uploaded video and to
|
|
generate thumbnails. They are built from unmodified FFmpeg 7.1.1 sources
|
|
(<a href="https://ffmpeg.org/">ffmpeg.org</a>) and are licensed under the GNU Lesser General
|
|
Public License, version 2.1 or later.
|
|
</p>
|
|
<p>
|
|
They are configured with <code>--disable-gpl</code>, so no GPL-licensed FFmpeg component is
|
|
present — including <code>libpostproc</code>, which is GPL-only. No FFmpeg source was modified.
|
|
</p>
|
|
<p>
|
|
<strong>Written offer.</strong> These binaries are statically linked. On request we will supply
|
|
the complete corresponding source, the exact <code>configure</code> arguments used, and the
|
|
object files needed to relink the programs against a modified version of the library, as
|
|
section 6 of the LGPL requires. Contact <a href="mailto:support@screentinker.com">support@screentinker.com</a>.
|
|
The full licence text is at
|
|
<a href="https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html">gnu.org/licenses/lgpl-2.1</a>,
|
|
and a copy ships beside the binaries in the player package.
|
|
</p>
|
|
|
|
<h2>Apache License 2.0</h2>
|
|
<p>The following packages are licensed under the Apache License, Version 2.0:</p>
|
|
<p>@jsquash/webp, @jsquash/avif, google-auth-library, OkHttp, Gson, AndroidX Media3/ExoPlayer, AndroidX libraries, Material Components for Android, Kotlin Coroutines, AndroidX Security Crypto, AndroidX WorkManager</p>
|
|
<div class="license-block">Apache License
|
|
Version 2.0, January 2004
|
|
http://www.apache.org/licenses/
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.</div>
|
|
|
|
<h2>Contact</h2>
|
|
<p>If you have questions about the licensing of any component used in ScreenTinker, please contact us at support@screentinker.com</p>
|
|
</div>
|
|
</body>
|
|
</html>
|