openvibers/openvibe.network Commits
openvibe-contracts v0.271.0: the Dock's timer (#482)
Changes
@@@ -820,7 +820,7 @@ Reporting a vulnerability: [SECURITY.md](SECURITY.md). The rules the code keeps:MIT (`license` in [package.json](package.json)).<!-- versions:start -->--- openvibe-contracts: v0.270.0++- openvibe-contracts: v0.271.0- openvibe-sdk: v0.74.0- openvibe-shared: v4.73.0<!-- versions:end -->@@@ -6,7 +6,7 @@"runtime": "node 22, express, PostgreSQL 18 (openvibe-sdk/db, async) + Valkey 9","port": 4000,"domain": "openvibe.network (with auth., api., admin., my. and themes.openvibe.network in its manifest)",-- "contracts": "openvibe-contracts v0.270.0",++ "contracts": "openvibe-contracts v0.271.0","sdk": "openvibe-sdk v0.74.0","shared": "openvibe-shared v4.73.0","capabilities": [@@@ -20,7 +20,7 @@"iovalkey": "^0.4.0","jsonwebtoken": "^9.0.0","multer": "^1.4.5-lts.1",-- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.270.0",++ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.271.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.74.0","openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.73.0","pg": "^8.23.0",@@@ -1595,9 +1595,9 @@}},"node_modules/openvibe-contracts": {-- "version": "0.270.0",-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.270.0",-- "integrity": "sha512-smeardiqY5pkwFNpVAEbR6LszJkjRMIRIvpv2mNN1Tlo0rWXHeQ5QSFQPhsPvpFCyFmewjayHtQp/K7bE3Bojw==",++ "version": "0.271.0",++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.271.0",++ "integrity": "sha512-pkkF191c+cxm6v90eNXej8qywVcRMK/avsfDKxlGuH/GrYICjceGxuPsCBQZeQ79by0/DqgXaG8tTWYnEs+oFw==","license": "AGPL-3.0-only","dependencies": {"ajv": "^8.17.1",@@@ -24,7 +24,7 @@"iovalkey": "^0.4.0","jsonwebtoken": "^9.0.0","multer": "^1.4.5-lts.1",-- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.270.0",++ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.271.0","openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.74.0","openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.73.0","pg": "^8.23.0",@@@ -108,6 +108,14 @@ try {assert.strictEqual(r.body.state.tab, 'vibe');r = await call('PUT', { tab: 'chats' });assert.strictEqual((await call('PUT', { tab: 'nope' })).status, 422, 'a tab the contract does not know is refused');++ // A timer (contracts 0.271.0, plan L48 R2): kept whole, cleared with null.++ const timer = { kind: 'focus', label: 'Write', started_at: '2026-11-01T09:00:00.000Z', ends_at: '2026-11-01T09:25:00.000Z', round: 1, rounds: 4, focus_min: 25, break_min: 5 };++ r = await call('PUT', { timer });++ assert.strictEqual(r.status, 200, JSON.stringify(r.body));++ assert.deepStrictEqual(r.body.state.timer, timer);++ assert.strictEqual((await call('PUT', { timer: { kind: 'nap', started_at: timer.started_at, ends_at: timer.ends_at } })).status, 422, 'a kind the contract does not know');++ r = await call('PUT', { timer: null });++ assert.strictEqual(r.body.state.timer, null, 'stopped');// place merges per device class, and inside a class per field.r = await call('PUT', { place: { desktop: { width: 500 } } });
@@ -820,7 +820,7 @@ Reporting a vulnerability: [SECURITY.md](SECURITY.md). The rules the code keeps:
@@ -820,7 +820,7 @@ Reporting a vulnerability: [SECURITY.md](SECURITY.md). The rules the code keeps:
MIT (`license` in [package.json](package.json)).
MIT (`license` in [package.json](package.json)).
<!-- versions:start -->
<!-- versions:start -->
-- openvibe-contracts: v0.270.0
+- openvibe-contracts: v0.271.0
- openvibe-sdk: v0.74.0
- openvibe-sdk: v0.74.0
- openvibe-shared: v4.73.0
- openvibe-shared: v4.73.0
<!-- versions:end -->
<!-- versions:end -->
@@ -6,7 +6,7 @@
@@ -6,7 +6,7 @@
"runtime": "node 22, express, PostgreSQL 18 (openvibe-sdk/db, async) + Valkey 9",
"runtime": "node 22, express, PostgreSQL 18 (openvibe-sdk/db, async) + Valkey 9",
"port": 4000,
"port": 4000,
"domain": "openvibe.network (with auth., api., admin., my. and themes.openvibe.network in its manifest)",
"domain": "openvibe.network (with auth., api., admin., my. and themes.openvibe.network in its manifest)",
- "contracts": "openvibe-contracts v0.270.0",
+ "contracts": "openvibe-contracts v0.271.0",
"sdk": "openvibe-sdk v0.74.0",
"sdk": "openvibe-sdk v0.74.0",
"shared": "openvibe-shared v4.73.0",
"shared": "openvibe-shared v4.73.0",
"capabilities": [
"capabilities": [
@@ -20,7 +20,7 @@
@@ -20,7 +20,7 @@
"iovalkey": "^0.4.0",
"iovalkey": "^0.4.0",
"jsonwebtoken": "^9.0.0",
"jsonwebtoken": "^9.0.0",
"multer": "^1.4.5-lts.1",
"multer": "^1.4.5-lts.1",
- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.270.0",
+ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.271.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.74.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.74.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.73.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.73.0",
"pg": "^8.23.0",
"pg": "^8.23.0",
@@ -1595,9 +1595,9 @@
@@ -1595,9 +1595,9 @@
}
}
},
},
"node_modules/openvibe-contracts": {
"node_modules/openvibe-contracts": {
- "version": "0.270.0",
- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.270.0",
- "integrity": "sha512-smeardiqY5pkwFNpVAEbR6LszJkjRMIRIvpv2mNN1Tlo0rWXHeQ5QSFQPhsPvpFCyFmewjayHtQp/K7bE3Bojw==",
+ "version": "0.271.0",
+ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.271.0",
+ "integrity": "sha512-pkkF191c+cxm6v90eNXej8qywVcRMK/avsfDKxlGuH/GrYICjceGxuPsCBQZeQ79by0/DqgXaG8tTWYnEs+oFw==",
"license": "AGPL-3.0-only",
"license": "AGPL-3.0-only",
"dependencies": {
"dependencies": {
"ajv": "^8.17.1",
"ajv": "^8.17.1",
@@ -24,7 +24,7 @@
@@ -24,7 +24,7 @@
"iovalkey": "^0.4.0",
"iovalkey": "^0.4.0",
"jsonwebtoken": "^9.0.0",
"jsonwebtoken": "^9.0.0",
"multer": "^1.4.5-lts.1",
"multer": "^1.4.5-lts.1",
- "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.270.0",
+ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.271.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.74.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.74.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.73.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.73.0",
"pg": "^8.23.0",
"pg": "^8.23.0",
@@ -108,6 +108,14 @@ try {
@@ -108,6 +108,14 @@ try {
assert.strictEqual(r.body.state.tab, 'vibe');
assert.strictEqual(r.body.state.tab, 'vibe');
r = await call('PUT', { tab: 'chats' });
r = await call('PUT', { tab: 'chats' });
assert.strictEqual((await call('PUT', { tab: 'nope' })).status, 422, 'a tab the contract does not know is refused');
assert.strictEqual((await call('PUT', { tab: 'nope' })).status, 422, 'a tab the contract does not know is refused');
+ // A timer (contracts 0.271.0, plan L48 R2): kept whole, cleared with null.
+ const timer = { kind: 'focus', label: 'Write', started_at: '2026-11-01T09:00:00.000Z', ends_at: '2026-11-01T09:25:00.000Z', round: 1, rounds: 4, focus_min: 25, break_min: 5 };
+ r = await call('PUT', { timer });
+ assert.strictEqual(r.status, 200, JSON.stringify(r.body));
+ assert.deepStrictEqual(r.body.state.timer, timer);
+ assert.strictEqual((await call('PUT', { timer: { kind: 'nap', started_at: timer.started_at, ends_at: timer.ends_at } })).status, 422, 'a kind the contract does not know');
+ r = await call('PUT', { timer: null });
+ assert.strictEqual(r.body.state.timer, null, 'stopped');
// place merges per device class, and inside a class per field.
// place merges per device class, and inside a class per field.
r = await call('PUT', { place: { desktop: { width: 500 } } });
r = await call('PUT', { place: { desktop: { width: 500 } } });