نسخهٔ تغییرناپذیر پلاگین

Media 0.1.0-alpha.29

Direct calls, meetings, large audio stages, and screen sharing for independent web environments.

راهنمای نصب برای عامل هوشمندmanifest.jsonsettings.schema.jsonopenapi.jsontypes.d.ts

اعتماد و موارد اعلام‌شده

کلاس اجرا
trusted_library آداپتر فرانت‌اند در قلمرو JavaScript محیط میزبان اجرا می‌شود و محیط ایزوله یا sandbox نیست.
مجوزهای پلتفرم
identity:read profile:read settings:read settings:write plugin-grant:request
سازگاری
قراردادها ^0.1.0-alpha.1 · SDK ^0.1.0-alpha.1
مجوز نرم‌افزار
MIT

آداپترهای فرانت‌اند

نیازمندی‌های مرورگر

دسترسی شبکه

Authenticated control traffic and self-hosted LiveKit WebRTC media transport.

شیوهٔ استفاده از داده

داده‌های جمع‌آوری‌شده
pairwise plugin actor، authoritative display profile، environment and scope، session membership، connection diagnostics
داده‌های اشتراکی
هیچ‌کدام
نگه‌داری
Invitations and session state are ephemeral. Security audit events follow platform retention policy. Media is not recorded or transcribed, and Media does not collect movement or position data.
سیاست حریم خصوصی
مشاهدهٔ سیاست

مجوزهای کوتاه‌عمر بک‌اند

اسنپ‌شات انتشار

{
  "contractVersion": "0.1.0-alpha.1",
  "pluginId": "plg_media",
  "publisher": {
    "id": "pub_fcb267e3-08ca-4755-9fe0-ceb6142544cd",
    "handle": "al-amr-technical"
  },
  "slug": "media",
  "name": "Media",
  "version": "0.1.0-alpha.29",
  "shortDescription": "Direct calls, meetings, large audio stages, and screen sharing for independent web environments.",
  "category": "communication",
  "kind": "full_stack",
  "runtimeClass": "trusted_library",
  "frontendAdapters": [
    {
      "id": "react",
      "runtime": "react",
      "exportPath": ".",
      "exports": [
        "createMediaV2Runtime",
        "mediaV2ProblemMessageFa",
        "mediaV2MicrophoneMessageFa",
        "mediaV2PlaybackMessageFa",
        "mediaV2TransportMessageFa",
        "mediaV2BootstrapMessageFa",
        "mediaV2SelfMember",
        "mediaV2IsJoined",
        "mediaV2IsModerator",
        "mediaV2ActiveMembers",
        "mediaV2PendingSpeakerOfferForSelf",
        "mediaV2RaisedHandQueue",
        "mediaV2MicrophoneButton",
        "mediaV2CallableActorKeySet",
        "mediaV2RecoveryOffer",
        "MediaV2RuntimeProvider",
        "useMediaV2",
        "mediaPluginManifest",
        "MediaV2ClientMessageSchema",
        "MediaV2ServerMessageSchema",
        "MediaSpacePolicyV2Schema",
        "MediaEnvironmentConfigV2Schema",
        "MediaV2ActionError",
        "mediaV2AudioGate",
        "mediaV2MediaTransportMessageFa",
        "mediaV2ConnectionQualityMessageFa"
      ],
      "capabilities": [
        "media:direct-call",
        "media:meeting",
        "media:stage",
        "media:screen-share"
      ],
      "peerDependencies": {
        "react": ">=18"
      },
      "semanticPorts": {
        "provides": [],
        "requires": []
      }
    }
  ],
  "backendComponents": [
    {
      "id": "control",
      "name": "Media control plane",
      "protocol": "websocket",
      "protocolArtifactId": "media-v2-data-plane",
      "hostCallbacks": [
        {
          "id": "publisher-authority",
          "description": "Asks the owning Environment backend whether the scope-bound actor may publish in a configured Media space.",
          "target": "environment_backend",
          "endpointConfigPointer": "/spaces/*/policy/roleAuthorityUrl",
          "protocolArtifactId": "publisher-authority-api",
          "operationId": "authorizePublisher",
          "authorization": {
            "kind": "forwarded_plugin_grant",
            "requiredScopes": [
              "media:publish"
            ],
            "location": "json_body",
            "field": "grant"
          },
          "timeoutMs": 2000,
          "maxResponseBytes": 4096,
          "redirectPolicy": "error",
          "failureMode": "deny"
        }
      ],
      "capabilities": [
        "call:signaling",
        "space:membership",
        "media:authorization",
        "moderation"
      ],
      "grantScopes": [
        "media:connect",
        "media:direct-call",
        "media:join-space",
        "media:request-speak",
        "media:publish"
      ],
      "contextSchema": {
        "type": "object",
        "properties": {
          "scope": {
            "type": "string",
            "minLength": 1,
            "maxLength": 96,
            "pattern": "^[A-Za-z0-9][A-Za-z0-9:_-]{0,95}$"
          }
        },
        "required": [
          "scope"
        ],
        "additionalProperties": false
      },
      "limits": {
        "maxConcurrentSessions": 1,
        "maxParticipantsPerContext": 150,
        "maxMessageBytes": 16384,
        "requestsPerMinute": 600
      }
    }
  ],
  "protocolArtifacts": [
    {
      "id": "media-v2-data-plane",
      "kind": "asyncapi",
      "specificationVersion": "3.0.0",
      "path": "./protocol/media-v2.asyncapi.json",
      "digest": "sha256:65a7407f65fedb42a32d93e61d5406473816653b6d8aa73edf39378f4e4327cc",
      "mediaType": "application/vnd.aai.asyncapi+json"
    },
    {
      "id": "publisher-authority-api",
      "kind": "openapi",
      "specificationVersion": "3.1.0",
      "path": "./protocol/publisher-authority.openapi.json",
      "digest": "sha256:db7cb99f3b43fe3e71a8d5849597eb4529fa7a877231e0357ba56d6b8db613ff",
      "mediaType": "application/vnd.oai.openapi+json"
    }
  ],
  "settings": {
    "schemaVersion": "1.0.0",
    "type": "object",
    "properties": {
      "volume": {
        "title": "Volume",
        "x-al-amr-scopes": [
          "plugin_default",
          "user",
          "user_environment"
        ],
        "type": "number",
        "default": 0.8,
        "minimum": 0,
        "maximum": 1,
        "multipleOf": 0.05
      },
      "defaultMuted": {
        "title": "Join muted",
        "x-al-amr-scopes": [
          "plugin_default",
          "user",
          "user_environment"
        ],
        "type": "boolean",
        "default": true
      },
      "inputDeviceId": {
        "title": "Input device",
        "x-al-amr-scopes": [
          "session"
        ],
        "type": "string",
        "maxLength": 512
      },
      "outputDeviceId": {
        "title": "Output device",
        "x-al-amr-scopes": [
          "session"
        ],
        "type": "string",
        "maxLength": 512
      }
    },
    "additionalProperties": false
  },
  "environmentConfigSchema": {
    "title": "Media installation configuration",
    "description": "Media v2 policies keep interaction mode, capacity, floor control, screen sharing, encryption, reconnection, and spatial audio explicit per space. Registry validates this bounded structural schema and the Media service applies the stricter cross-field policy contract.",
    "type": "object",
    "properties": {
      "spaces": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1,
              "maxLength": 80,
              "pattern": "^[a-z][a-z0-9_-]{0,79}$"
            },
            "policy": {
              "type": "object",
              "properties": {
                "mode": {
                  "type": "string",
                  "enum": [
                    "stage",
                    "meeting"
                  ],
                  "maxLength": 16
                },
                "raiseHand": {
                  "type": "string",
                  "enum": [
                    "disabled",
                    "enabled"
                  ],
                  "maxLength": 8
                },
                "encryption": {
                  "type": "string",
                  "enum": [
                    "transport",
                    "sfu_blind"
                  ],
                  "maxLength": 10
                },
                "guestPolicy": {
                  "type": "string",
                  "enum": [
                    "account_required",
                    "allowed"
                  ],
                  "maxLength": 16
                },
                "screenShare": {
                  "type": "string",
                  "enum": [
                    "disabled",
                    "owners",
                    "speakers"
                  ],
                  "maxLength": 8
                },
                "floorControl": {
                  "type": "string",
                  "enum": [
                    "fixed",
                    "moderated",
                    "open"
                  ],
                  "maxLength": 16
                },
                "spatialAudio": {
                  "type": "string",
                  "enum": [
                    "disabled",
                    "distance_attenuation"
                  ],
                  "maxLength": 20
                },
                "screenProfile": {
                  "type": "string",
                  "enum": [
                    "slides",
                    "motion"
                  ],
                  "maxLength": 8
                },
                "maxParticipants": {
                  "type": "integer",
                  "minimum": 2,
                  "maximum": 150
                },
                "maxSpeakerSeats": {
                  "type": "integer",
                  "minimum": 1,
                  "maximum": 16
                },
                "roleAuthorityUrl": {
                  "type": "string",
                  "maxLength": 2048
                },
                "reconnectGraceSeconds": {
                  "type": "integer",
                  "minimum": 5,
                  "maximum": 120
                }
              },
              "required": [
                "mode",
                "maxParticipants",
                "maxSpeakerSeats",
                "floorControl",
                "raiseHand",
                "screenShare",
                "guestPolicy",
                "encryption",
                "reconnectGraceSeconds"
              ],
              "additionalProperties": false
            }
          },
          "required": [
            "id",
            "policy"
          ],
          "additionalProperties": false
        },
        "maxItems": 64
      },
      "directCalls": {
        "type": "object",
        "properties": {
          "policy": {
            "type": "object",
            "properties": {
              "mode": {
                "type": "string",
                "const": "direct_call",
                "maxLength": 16
              },
              "raiseHand": {
                "type": "string",
                "const": "disabled",
                "maxLength": 8
              },
              "encryption": {
                "type": "string",
                "const": "sfu_blind",
                "maxLength": 10
              },
              "guestPolicy": {
                "type": "string",
                "enum": [
                  "account_required",
                  "callee_only"
                ],
                "maxLength": 16
              },
              "screenShare": {
                "type": "string",
                "const": "disabled",
                "maxLength": 8
              },
              "floorControl": {
                "type": "string",
                "const": "open",
                "maxLength": 16
              },
              "spatialAudio": {
                "type": "string",
                "const": "disabled",
                "maxLength": 20
              },
              "maxParticipants": {
                "type": "integer",
                "const": 2
              },
              "maxSpeakerSeats": {
                "type": "integer",
                "const": 2
              },
              "roleAuthorityUrl": {
                "type": "string",
                "maxLength": 2048
              },
              "reconnectGraceSeconds": {
                "type": "integer",
                "minimum": 5,
                "maximum": 120
              }
            },
            "required": [
              "mode",
              "maxParticipants",
              "maxSpeakerSeats",
              "floorControl",
              "raiseHand",
              "screenShare",
              "guestPolicy",
              "encryption",
              "reconnectGraceSeconds"
            ],
            "additionalProperties": false
          },
          "enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "enabled"
        ],
        "additionalProperties": false
      }
    },
    "required": [
      "directCalls"
    ],
    "additionalProperties": false
  },
  "platformPermissions": [
    "identity:read",
    "profile:read",
    "settings:read",
    "settings:write",
    "plugin-grant:request"
  ],
  "browserRequirements": [
    {
      "name": "microphone",
      "reason": "Requested only when the participant chooses to speak.",
      "required": false
    },
    {
      "name": "display-capture",
      "reason": "Requested only when the participant explicitly starts screen sharing.",
      "required": false
    }
  ],
  "networkAccess": {
    "origins": [
      "https://media.al-amr.com",
      "wss://rtc.al-amr.com"
    ],
    "reason": "Authenticated control traffic and self-hosted LiveKit WebRTC media transport."
  },
  "dataHandling": {
    "collected": [
      "pairwise plugin actor",
      "authoritative display profile",
      "environment and scope",
      "session membership",
      "connection diagnostics"
    ],
    "shared": [],
    "retention": "Invitations and session state are ephemeral. Security audit events follow platform retention policy. Media is not recorded or transcribed, and Media does not collect movement or position data.",
    "privacyPolicyUrl": "https://developer.al-amr.com/legal/privacy"
  },
  "compat": {
    "contracts": "^0.1.0-alpha.1",
    "sdk": "^0.1.0-alpha.1"
  },
  "documentation": {
    "canonicalUrl": "https://developer.al-amr.com/plugins/al-amr/media",
    "integrationUrl": "https://developer.al-amr.com/plugins/al-amr/media/integration.md",
    "repositoryUrl": "https://github.com/al-amr/al-amr/tree/main/plugins/media",
    "license": "MIT"
  }
}
Media 0.1.0-alpha.29 · الامر