chore(release): v1.9.30

This commit is contained in:
ScreenTinker 2026-08-06 16:32:23 -05:00
parent e812f35b6b
commit e313826d85
5 changed files with 11 additions and 6 deletions

View file

@ -1 +1 @@
1.9.29
1.9.30

View file

@ -1,7 +1,7 @@
openapi: 3.1.0
info:
title: ScreenTinker Public API
version: 1.9.29
version: 1.9.30
description: |
Public, token-scoped REST API for ScreenTinker digital signage.

View file

@ -1,12 +1,12 @@
{
"name": "screentinker",
"version": "1.9.29",
"version": "1.9.30",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "screentinker",
"version": "1.9.29",
"version": "1.9.30",
"dependencies": {
"@azure/msal-node": "^5.2.1",
"archiver": "^7.0.1",

View file

@ -1,6 +1,6 @@
{
"name": "screentinker",
"version": "1.9.29",
"version": "1.9.30",
"description": "ScreenTinker - Digital Signage Management Server",
"main": "server.js",
"scripts": {

View file

@ -66,7 +66,12 @@ test('the worker prunes to the set the player declares', () => {
// a panel with a 1GB widget quota, a few replaced videos is the whole budget.
const sw = fs.readFileSync(path.join(__dirname, '..', 'player', 'sw.js'), 'utf8');
assert.match(sw, /function pruneToPlaylist/);
assert.match(sw, /if \(data\.prune\)/, 'the prune must be driven by the player declaring a complete set');
// The guard is `data.prune && data.urls.length > 0`, not a bare `data.prune`: an EMPTY list is
// never a prune instruction. `assignments: []` is what the server sends for a device between
// playlists and from the catch when a snapshot fails to parse, and honouring it as "keep nothing"
// wiped a panel's whole offline library (fixed in 1.9.30).
assert.match(sw, /if \(data\.prune && data\.urls\.length > 0\)/,
'the prune must require a NON-EMPTY declared set');
const html = fs.readFileSync(path.join(__dirname, '..', 'player', 'index.html'), 'utf8');
assert.match(html, /prune:\s*true/);