Contributors
RestrictedActions

RestrictedActions

The RestrictedActions module allows scenes to access sensitive (and thus restricted) functionality. It’s linked to the permission system, which scenes use to request the use of individual methods.

const RestrictedActions = require("~system/RestrictedActions")

As a World Explorer implementer, your runtime could have no enforcement of permissions. We strongly advise against this, since it puts players in danger.

Most of the restricted functionality is provided by this module, but there’s also restricted global functions.

The module contains the following methods and types:

Methods #

Each of the methods below is associated with a specific permission that can be requested in the scene manifest.

movePlayerTo #

Displace the player to a new position relative to the current one, and optionally set the camera target with vectors.

Requires the ALLOW_TO_MOVE_PLAYER_INSIDE_SCENE permission.

interface Request {
  newRelativePosition: Vector3
  cameraTarget?: Vector3
}

interface Response {}

function movePlayerTo(Request): Promise<Response>
teleportTo #

Reposition the player to an absolute world location given a by vectors.

Instead of requiring a pre-approved permission, each call to teleportTo must be approved by the player.

interface Request {
  worldPosition: Vector3
}

interface Response {}

function teleportTo(Request): Promise<Response>
triggerEmote #

Make the player’s avatar display an emote animation, using one of the predefined names.

Requires the ALLOW_TO_TRIGGER_AVATAR_EMOTE permission.

interface Request {
  predefinedEmote: string
}

interface Response {}

function triggerEmote(Request): Promise<Response>
openExternalUrl #

Offer to show a website to the player, using an appropriate UI (which may be another application).

Requires the OPEN_EXTERNAL_LINK permission.

interface Request {
  url: string
}

interface Response {
  // Whether the player authorized opening the link.
  success: boolean
}

function openExternalUrl(Request): Promise<Response>
openNftDialog #

Show information about an NFT to the player, using an appropriate UI.

interface Request {
  // The URN of the NFT.
  urn: string
}

interface Response {
  // Whether the NFT was successfully located and referred to an image or video.
  success: boolean
}

function openNftDialog(Request): Promise<Response>
changeRealm #

Switch the World Explorer to another content server, using its base URL.

interface Request {
  // The URL of the new realm.
  realm: string

  // An optional message to show users when they have to approve the change.
  message?: string 
}

interface Response {
  // Whether the realm change was authorized and successful.
  success: boolean
}

function changeRealm(Request): Promise<Response>

Types #

The only additional type used by methods in this module is the Vector3.

Vector3 #

Holds a relative or absolute 3d position.

interface Vector3 {
  x: number
  y: number
  z: number
}