ShareMember share.member@1
Generated at from
openvibe-contracts v0.419.0 and
openvibe-sdk v0.161.0.
- Version
- 1.1.0
- Owner
- network
- Visibility
- public
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/share/member.v1.json
share.member@1: a member with their Network identity fields. username, display_name and avatar_url are null when Network does not know the subject (or reports it banned or deleted).
Fields
| Field | Type | Required | Description | Constraints |
|---|---|---|---|---|
subject | identity.subject-ref | yes | ||
username | string | null | yes | ||
display_name | string | null | yes | ||
avatar_url | string | null | yes | ||
role | enum | yes |
| |
expires_at | string |
| ||
added_by | identity.subject-ref | yes | ||
added_at | string | yes |
| |
key_slot | locker.people-slot | |||
key_fingerprint | string | null | The member's current key fingerprint from Network's key directory (locker.public-keys@1), shown to the owner of a people-locked item; null when the person has no locker key (or Network did not answer). |
| |
fingerprint_changed | boolean | Owner-only, for a people-locked item: true when the member's current key is not the one their key_slot was made for, so the sheet warns and re-wraps. |
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: example
{
"subject": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
},
"username": "maticus",
"display_name": "Maticus",
"avatar_url": "https://cdn.openvibe.network/avatars/maticus.png",
"role": "viewer",
"added_by": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
},
"added_at": "2026-11-06T00:00:00Z"
}Valid: locked
{
"subject": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
},
"username": "maticus",
"display_name": "Maticus",
"avatar_url": "https://cdn.openvibe.network/avatars/maticus.png",
"role": "viewer",
"added_by": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
},
"added_at": "2026-11-06T00:00:00Z",
"key_slot": {
"subject": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
},
"algorithm": "ECDH-P256/HKDF-SHA256/AES-256-GCM",
"recipient_key": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
"ephemeral_public_key": {
"kty": "EC",
"crv": "P-256",
"x": "eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHg",
"y": "eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXk"
},
"salt": "c3Nzc3Nzc3Nzc3Nzc3Nzcw==",
"nonce": "bm5ubm5ubm5ubm5u",
"wrapped_key": "d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3d3"
},
"key_fingerprint": "plateau yew apple petal · river stone bread cedar",
"fingerprint_changed": false
}Rejected: bare-subject
{
"subject": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR",
"role": "viewer",
"added_by": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
},
"added_at": "2026-11-06T00:00:00Z"
}Rejected: expiry
{
"subject": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
},
"role": "viewer",
"added_by": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
},
"added_at": "2026-11-06T00:00:00Z",
"expires_at": "tomorrow"
}Rejected: role
{
"subject": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
},
"role": "owner",
"added_by": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
},
"added_at": "2026-11-06T00:00:00Z"
}Rejected: unknown-field
{
"subject": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPR"
},
"role": "viewer",
"added_by": {
"type": "user",
"id": "usr_01JAB2C3D4E5F6G7H8J9K0MNPQ"
},
"added_at": "2026-11-06T00:00:00Z",
"title": "must never appear"
}Validate
const contracts = require('openvibe-contracts');
contracts.validate('share.member@1', value); // { valid, errors: [{ path, message }] }