GamesModInstalledPayload games.mod.installed@1

Generated at from openvibe-contracts v0.34.2 and openvibe-sdk v0.5.0.

Version
1.0.0
Owner
games
Visibility
first-party
Status
active
Compatibility
backward
Schema
https://openvibe.network/contracts/events/payloads/games.mod.installed.v1.json

games.mod.installed v1 (OpenVibe.Games apps/server/src/platform/gameEvents.ts modEvent, via ModRegistry.install in mods/registry.ts; POST /api/v1/mods). A games-content@1 mod was installed after its manifest and content pack were validated. requested is the manifest's capability list, granted the approved subset (only capabilities the games-content@1 runtime binds: games.world.announce, games.prop.place), status whether it was installed enabled. Written to Games' event_outbox in the same SQLite transaction as the registry and mod_audit rows (mods/registry.ts). The manifest, content pack, audit actor string and installer are left out. No consumer yet. Envelope: subject { type: mod, id: <mod.id> }, visibility internal, priority low, actor the staff member who made the change (user:<usr_...>), service:<client> for a principal token carrying games.mod.manage, or service:games (pre-subject staff token, editor key).

Fields

FieldTypeRequiredDescriptionConstraints
modobjectyesThe install, from its validated mods/mod-manifest.v1 manifest.
  • no other fields
mod.idstringyesMod id (manifest id). Also the envelope subject id.
  • pattern ^mod_[0-9A-HJKMNP-TV-Z]{26}$
mod.namestringyes
  • minLength 1
  • maxLength 80
mod.versionstringyesSemantic version of the installed release.
  • pattern ^(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)(-[0-9A-Za-z.-]+)?$
mod.targetstringyesManifest target. Games only accepts games.browser today (mods/manifest.ts checkForGames).
  • pattern ^[a-z][a-z0-9-]{1,39}\.[a-z][a-z0-9-]{1,39}$
mod.trust_tierenumyesInstall metadata set at install; never consulted by a grant check.
  • one of "unreviewed", "reviewed", "first-party"
requestedarray of stringyesmanifest.permissions.capabilities, sorted.
  • maxItems 64
  • unique items
  • items: pattern ^[a-z][a-z0-9_]*(\.[a-z0-9_]+){2,}$
grantedarray of stringyesThe approved subset of requested, sorted (may be empty).
  • maxItems 64
  • unique items
  • items: pattern ^[a-z][a-z0-9_]*(\.[a-z0-9_]+){2,}$
statusenumyes
  • one of "enabled", "disabled"

Examples

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

Valid: disabled-nothing-granted
{
  "mod": {
    "id": "mod_01JAD3F5G7H9K1M3N5P7Q9R1S3",
    "name": "Campfire",
    "version": "0.2.0-beta.1",
    "target": "games.browser",
    "trust_tier": "reviewed"
  },
  "requested": [],
  "granted": [],
  "status": "disabled"
}
Valid: enabled-with-grant
{
  "mod": {
    "id": "mod_01JAD3F5G7H9K1M3N5P7Q9R1S3",
    "name": "Town Square",
    "version": "1.0.0",
    "target": "games.browser",
    "trust_tier": "unreviewed"
  },
  "requested": [
    "games.prop.place",
    "games.world.announce"
  ],
  "granted": [
    "games.prop.place"
  ],
  "status": "enabled"
}
Rejected: bad-mod-id
{
  "mod": {
    "id": "mod_town_square",
    "name": "Town Square",
    "version": "1.0.0",
    "target": "games.browser",
    "trust_tier": "unreviewed"
  },
  "requested": [],
  "granted": [],
  "status": "enabled"
}
Rejected: camelcase-trust-tier
{
  "mod": {
    "id": "mod_01JAD3F5G7H9K1M3N5P7Q9R1S3",
    "name": "Town Square",
    "version": "1.0.0",
    "target": "games.browser",
    "trustTier": "unreviewed"
  },
  "requested": [],
  "granted": [],
  "status": "enabled"
}
Rejected: revoked-status
{
  "mod": {
    "id": "mod_01JAD3F5G7H9K1M3N5P7Q9R1S3",
    "name": "Town Square",
    "version": "1.0.0",
    "target": "games.browser",
    "trust_tier": "unreviewed"
  },
  "requested": [
    "games.prop.place"
  ],
  "granted": [],
  "status": "revoked"
}

Validate

const contracts = require('openvibe-contracts');
contracts.validate('games.mod.installed@1', value);   // { valid, errors: [{ path, message }] }