NetworkProjectMemberResult network.project-member-result@1

Generated at from openvibe-contracts v0.177.0 and openvibe-sdk v0.44.0.

Version
1.0.0
Owner
network
Visibility
first-party
Status
active
Compatibility
backward
Decision
ADR-003
Schema
https://openvibe.network/contracts/network/project-member-result.v1.json

network.project-member-result@1: OpenVibe.Network's answer to GET /internal/projects/:project_id/members/:subject (network.project.member.read). It says whether one person belongs to a developer project, with which role, and whether the project is archived, so a receiver can check a project delegation (ADR-003 amendment 2026-10-12: the person must be an admin or owner of an unarchived project). Only members are answered; a non-member and an unknown project are both 404 project.member_not_found. It carries no other members, no apps and no secrets.

Fields

FieldTypeRequiredDescriptionConstraints
project_idstringyes
  • pattern ^prj_[0-9A-HJKMNP-TV-Z]{26}$
subjectstringyes
  • pattern ^usr_[0-9A-HJKMNP-TV-Z]{26}$
roleenumyes
  • one of "viewer", "developer", "admin", "owner"
archivedbooleanyes
added_atstring | null

Examples

From the contract's own test fixtures: valid ones validate, rejected ones must fail.

Valid: admin
{
  "project_id": "prj_01J9Z8Y7X6W5V4T3S2R1Q0P9N8",
  "subject": "usr_01J9Z8Y7X6W5V4T3S2R1Q0P9N7",
  "role": "admin",
  "archived": false,
  "added_at": "2026-10-01T12:00:00.000Z"
}
Valid: archived-viewer
{
  "project_id": "prj_01J9Z8Y7X6W5V4T3S2R1Q0P9N8",
  "subject": "usr_01J9Z8Y7X6W5V4T3S2R1Q0P9N6",
  "role": "viewer",
  "archived": true
}
Rejected: other-members
{
  "project_id": "prj_01J9Z8Y7X6W5V4T3S2R1Q0P9N8",
  "subject": "usr_01J9Z8Y7X6W5V4T3S2R1Q0P9N7",
  "role": "owner",
  "archived": false,
  "members": [
    "usr_01J9Z8Y7X6W5V4T3S2R1Q0P9N6"
  ]
}
Rejected: unknown-role
{
  "project_id": "prj_01J9Z8Y7X6W5V4T3S2R1Q0P9N8",
  "subject": "usr_01J9Z8Y7X6W5V4T3S2R1Q0P9N7",
  "role": "superuser",
  "archived": false
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('network.project-member-result@1', value);   // { valid, errors: [{ path, message }] }