Skip to content

Changelog

All notable, user-facing changes to @hopecloud/jetstream-player are documented here. The format follows Keep a Changelog, and the project adheres to Semantic Versioning.

Unreleased

[1.3.0] - 2026-06-17

Added

  • on() and off() methods — subscribe to player events after the instance is created, the dynamic counterpart to the events constructor option. Multiple listeners per event are supported; on() returns an unsubscribe function, and off(event) (no handler) clears every listener for that event:

    ts
    const off = player.on('timeupdate', (seconds) => console.log(seconds));
    off(); // or: player.off('timeupdate')

[1.2.0] - 2026-06-17

Breaking

  • Removed the internal wire-codec exports normalizeEventData, denormalizeEventData, and isValidEventData. They were never meant to be public; the package now exports only JetstreamPlayer and the player types.
  • Replaced the IFrameBuilderSrcOpt and IFrameBuilderOpt types with a single EmbedFrameOptions.

Added

  • origin option — point the iframe at a specific embed host (a staging host, or the production host directly) to skip the redirect:

    ts
    new JetstreamPlayer('#player', {
      mediaId: 'jsv:xxxxxxxxxx',
      origin: 'https://embed.jetstream.studio',
    });
  • Optional playerId and relaxed idsplayerId may be omitted, and id formats are no longer enforced, so live stream (jsl:) ids and custom player ids work.

Fixed

  • Commands and events no longer silently fail after a redirect. The embed URL 302-redirects to its real host; the SDK now learns that host from the iframe's own messages instead of trusting the pre-redirect origin, so play(), events, and getters keep working.
  • Getters no longer hang forever. isMuted(), isPaused(), getVideoCurrentTime(), and getDuration() reject after 5 seconds if the player never replies.