@urth/metatell-sdk - v0.1.0
    Preparing search index...

    Events

    @urth/metatell-sdk/events is the low-level typed event bus that the higher level modules (user, users, chat, input, voice, emote, objects, triggers, runtime, environment) are built on. Most plugins should prefer those modules; reach for events when you need an event that has no dedicated wrapper, or want to work with the bus directly.

    import { on, once, off } from "@urth/metatell-sdk/events";

    const unsubscribe = on("chat:message", (message) => {
    console.log(message.text);
    });

    once("users:join", (user) => {
    console.log("first join", user.profile.displayName);
    });

    // either call the returned function, or off() with the same handler
    unsubscribe();
    • on(event, handler) — subscribe; returns an Unsubscribe.
    • once(event, handler) — subscribe for a single delivery.
    • off(event, handler) — remove a previously registered handler.

    Events are fully typed: the payload type is inferred from the event name. The EventMap includes (among others):

    Event Payload
    user:profile UserProfile
    users:join / users:update RemoteUser
    users:leave { sessionId }
    users:speaking / voice:speaking SpeakingEvent
    users:transform TransformUpdate
    chat:message ChatMessage
    input:pointerdown … input:hover PointerEvent
    input:gaze GazeInfo
    emote EmoteEvent
    objects:added / objects:updated RoomObject
    objects:removed { id }
    objects:moved { id, transform: ObjectTransform }
    trigger:fired TriggerFiredEvent
    runtime:changed RuntimeSnapshot
    environment:changed EnvironmentChanged ({ epoch, revision })

    The onAdded(), onUpdated(), and onMoved() wrappers in Room Objects deliver copies of their payloads. onRemoved() and onFired() in Triggers pass the bus payload through unchanged, so treat it as read-only. Prefer onCapabilitiesChanged() from /runtime and onChanged() from /environment over the raw runtime:changed and environment:changed events: the wrappers validate, order, and fetch full state.

    The EventMap also contains internal request/response events that back the wrapper APIs and are not meant to be used directly: chat:send-request / chat:send-result and input:raycast-request / input:raycast-result (behind the promise-based chat and input APIs), emote:trigger-request (behind emote.trigger()), objects:op-request / objects:op-result, trigger:op-request / trigger:op-result, runtime:request / runtime:result, and environment:request / environment:result / environment:release. Prefer the wrapper functions over emitting these yourself. All payload types are exported from @urth/metatell-sdk/events.

    import { getBus } from "@urth/metatell-sdk/events";

    const bus = getBus();
    bus.on("emote", (e) => console.log(e.name));

    createBus() is also exported for advanced cases (e.g. tests) that need an isolated bus instance.