githubEdit

Globals

The scene runtime ensures the existence of certain objects and functions inside the sandboxed Javascript environment, in addition to the standard utilities such as Promise, Date or Math.

circle-info

The globals described below are typical JavaScript concepts, but they are tailored to the Decentrland scene runtime and may not behave identically to their counterparts in browser or Node environments.

Globals

The runtime injects 6 definitions in the scene's global scope:

  1. console: a simplified version of the typical console object.

  2. exports: an object where the scene can add its public interfacearrow-up-right.

  3. module: a container for the exports object.

  4. require: a function to load runtime-provided modules by name.

  5. fetch: a restricted implementation of the browser fetch function.

  6. WebSocket: a restricted implementation of the browser WebSocket class.

All of these are defined as read-only properties, so they cannot be reassigned. Some will throw exceptions when used unless certain permissionsarrow-up-right are granted to the scene.

Console

Scenes have access to a console object, much like the one provided by a browser or Node environment, though limited to only some of the methods you would normally find.

type Console = {
  log(...args: any): void
  info(...args: any): void
  debug(...args: any): void
  warning(...args: any): void
  error(...args: any): void
}

Just like their standard counterparts, each method takes variable arguments of any type and renders them as human-readable messages. For example, this is valid:

The precise behavior of these methods depends on the provider, but the messages must be accessible to scene developers debugging their code.

circle-info

In the Foundation's browser-based World Explorer, log messages appear in the developer tools panel.

Imports and Exports

Scenes can import and export objects using the traditional CommonJSarrow-up-right module interface.

The require function allows scenes to access runtime-provided modules (such as EngineApiarrow-up-right or RestrictedActionsarrow-up-right), and nothing else (it does not access NPM packages or modules by path).

Properties added to the exports object are the scene's public interface and will be exposed to the runtime. In fact, scenes must expose at least one method to run properly (see executionarrow-up-right).

circle-info

Scenes written in languages such as TypeScript use the more modern import and export statements, which can be transpiled into CommonJS-compatible uses of require and exports.

HTTP and WebSockets

The fetch and WebSocket globals work exactly like their well-known counterparts (see fetcharrow-up-right and WebSocketarrow-up-right in MDN), but with some restrictions enforced by the runtime.

When calling the fetch function:

  • An error is thrown if the URL doesn't begin with https://.

  • An error is thrown if the scene doesn't have the USE_FETCH permissionarrow-up-right.

  • An implementation-defined timeout can abort the request.

When using the WebSocket class:

Apart from these differences, both cases follow standard behavior.

Last updated