openvibers/openvibe.network Commits

Network: Services may control a person's robot, room, restream definition and paste for them (contracts 0.176.0) (#193)

OP OpenVibers committed 29 days ago · 4c5bb86cdb · 3 files, +11 −5

OpenVibe.Services holds the four control capabilities for person-owned resources (contracts 0.176.0, ADR-048 amendment 2026-10-15):

- `bot.resource.control` on openvibe.bot: stop or resume a robot;
- `chat.resource.control` on openvibe.chat: archive a room;
- `openre.resource.control` on openvibe.openre: suspend or resume a restream definition;
- `community.resource.control` on openvibe.community: delete a paste.

Services acts for the person who owns the resource. Each authority checks the owner it holds (Bot#107, Chat#85, OpenRestream#69, Community#73).

**Also:** `openvibe-contracts` v0.175.0 → v0.176.0.

**Tests:** `principals` and `services-resource-grants` pass. The new default grants are seeded at boot.

Changes

ddiff --git a/package-lock.json b/package-lock.json
iindex ed9e807c..e8986cc9 100644
---- a/package-lock.json
++++ b/package-lock.json
@@@ -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.175.0",
++ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.176.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.44.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.1.4",
"pg": "^8.23.0",
@@@ -1320,9 +1320,9 @@
}
},
"node_modules/openvibe-contracts": {
-- "version": "0.175.0",
-- "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.175.0",
-- "integrity": "sha512-AJNkb/g7mMQDi1oGPiKpVVEmk+oGvzJYLsgxCzd7bPkxN7aos3y/VKh7+tAlfnAOKTajpOTAz5cvLXcGJQHiiQ==",
++ "version": "0.176.0",
++ "resolved": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.176.0",
++ "integrity": "sha512-COLEoRbjs6he+Tb2LvazezNWvHzB6CEWflebrgEyMaTd1hhE5zWJAAL/mdvR0LOzVDAX6vb1GPdTw83AulLfCg==",
"license": "AGPL-3.0-only",
"dependencies": {
"ajv": "^8.17.1",
ddiff --git a/package.json b/package.json
iindex 9adf6e40..d72fbcf0 100644
---- a/package.json
++++ b/package.json
@@@ -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.175.0",
++ "openvibe-contracts": "https://codeload.github.com/OpenVibers/OpenVibe.Contracts/tar.gz/refs/tags/v0.176.0",
"openvibe-sdk": "https://codeload.github.com/OpenVibers/OpenVibe.SDK/tar.gz/refs/tags/v0.44.0",
"openvibe-shared": "https://codeload.github.com/OpenVibers/OpenVibe.Shared/tar.gz/refs/tags/v4.1.4",
"pg": "^8.23.0",
ddiff --git a/server/identity/principals.js b/server/identity/principals.js
iindex 85574a1c..4764f3fa 100644
---- a/server/identity/principals.js
++++ b/server/identity/principals.js
@@@ -276,6 +276,12 @@ const DEFAULT_GRANTS = [
// OpenVibe.Zone (contracts 0.173.0, ADR-031 amendment): Services lists its zones and deletes one for a project admin.
['services', 'zone.resource.read', 'openvibe.zone', []],
['services', 'zone.resource.control', 'openvibe.zone', []],
++ // Person-owned resources (contracts 0.176.0, ADR-048 amendment 2026-10-15): Services acts on a person's own robot,
++ // room, restream definition or paste for them; each authority checks the owner it holds.
++ ['services', 'bot.resource.control', 'openvibe.bot', []],
++ ['services', 'chat.resource.control', 'openvibe.chat', []],
++ ['services', 'openre.resource.control', 'openvibe.openre', []],
++ ['services', 'community.resource.control', 'openvibe.community', []],
// Zone provisions each zone in Media and manages S3 access keys there for a project admin; it reads project roles here.
['zone', 'media.zone.provision', 'openvibe.media', []],
['zone', 'media.access_key.manage', 'openvibe.media', []],