983 Commits

Author SHA1 Message Date
Timo a33b3b33ec fix(security): patch CVE-2026-111497 Brotli/Node2Shell vulnerability v3.3.2 2026-10-26 08:41:05 +01:00
GitHub Action eeb8d2c7eb chore(release): update versions to v3.3.1 [skip ci] 2026-10-18 09:00:33 +00:00
KoalaDev 4fa27be2ac Merge pull request #50 from Shik3i/codex/changelog-v3.3.1
docs(changelog): finalize v3.3.1 release notes
v3.3.1
2026-10-18 10:53:42 +02:00
Timo 7eb81dab7b docs(changelog): finalize v3.3.1 release notes
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-17 11:04:37 +02:00
KoalaDev 29003a95c0 Merge pull request #49 from Shik3i/codex/paste-invite-autojoin
feat(extension): join directly when pasting an invite link
2026-10-17 11:03:43 +02:00
Timo b84c7f9b2f fix(extension): cancel stale invite-join timer and hint during active join
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-17 10:48:00 +02:00
Timo 12f8d3ba39 docs(readme): describe pasting invite links to join
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-17 10:14:29 +02:00
Timo abb4ff73ca feat(extension): join directly when pasting an invite link
Pasting an invite link now works on every popup tab, joins the room at once
and confirms with a toast. Other pasted content shows an "invalid invite
link" toast; pasting while already in a room asks to leave first. A paste
during a running connection attempt joins as soon as the button is released.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 05:29:34 +02:00
GitHub Action 06a6e63995 chore(release): update versions to v3.3.0 [skip ci] 2026-10-16 01:45:16 +00:00
Claude 44477e7d85 docs(changelog): finalize v3.3.0 release notes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012qx2BQfvCSescFYEacvute
v3.3.0
2026-10-16 01:33:50 +00:00
KoalaDev 5c75a76856 Merge pull request #48 from Shik3i/claude/eloquent-shannon-9pc9hb
feat: paste invite links into the popup and patch dev dependency advisories
2026-10-16 03:13:35 +02:00
Claude 38bc72ac0f fix(shared): scan every invite fragment and unwrap wrapped legacy links
- Try each #j2:/#join: fragment in text order, so a broken example
  earlier in a message no longer hides the real invite link.
- Drop a closing delimiter only when the link itself was wrapped
  ("<link>", "(link)", "[text](link)"), so wrapped legacy links no
  longer add ">" or ")" to the password while raw legacy passwords
  keep their punctuation.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012qx2BQfvCSescFYEacvute
2026-10-16 00:57:28 +00:00
Claude 8090c0ecd2 Merge remote-tracking branch 'origin/main' into claude/eloquent-shannon-9pc9hb
# Conflicts:
#	docs/CHANGELOG.md
2026-10-16 00:32:15 +00:00
Claude 080719f612 docs: note invite chat key fix in changelog
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012qx2BQfvCSescFYEacvute
2026-10-16 00:29:35 +00:00
Claude 7438e817b2 fix(extension): keep the invite chat key after a failed room creation
A "Create New Room" attempt that failed validation (custom server
without URL) left pendingRoomCreation set. Filling the form from an
invite does not fire an input event, so the next Join was treated as a
room creation and replaced the invite's chat key with a new one,
breaking chat with the other participants. Applying an invite now
clears the creation state.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012qx2BQfvCSescFYEacvute
2026-10-16 00:29:29 +00:00
Claude fd1d4c6094 fix(i18n): align invite-link wording in pl and tr placeholders
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012qx2BQfvCSescFYEacvute
2026-10-16 00:27:54 +00:00
Claude 3fb1d51be2 fix(extension): make invite paste discoverable and robust
- Listen for paste on the whole join view, so Ctrl+V works without
  first opening the collapsed Manual Connect section; other text
  fields keep their normal paste.
- Open the Manual Connect section after an invite is applied, so the
  filled-in room, password and relay are visible.
- Strip trailing brackets and punctuation from j2 links pasted from
  messages ("(link)", "<link>", "link."), which previously corrupted
  the chat key.
- Fix the e2e spec lint error and test real keyboard paste.
- Document the paste flow in the changelog, README and HOW_IT_WORKS.

Refs #47

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012qx2BQfvCSescFYEacvute
2026-10-16 00:26:09 +00:00
Claude eff2935b2e feat(extension): fill join form from pasted invite links
Pasting an invite link into the room ID or password field now fills
room, password, chat key and relay, regardless of the link's domain.
Only the #j2:/#join: fragment is parsed, so self-hosted invite links
work without opening the page and without injecting into other sites.
The paste event is used directly, so no clipboard permission is needed.

Refs #47

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012qx2BQfvCSescFYEacvute
2026-10-15 23:27:52 +00:00
Claude 06bb6a34e4 docs(changelog): summarize shared video links under Unreleased
Condense the Unreleased entry for the merged peer video link work into
short bullets that match the style of the released sections.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGtFfKKJucjVZrph9x6AKa
2026-10-15 23:15:00 +00:00
Claude 5c6e223555 fix(deps): patch dev dependency security advisories
Bump vitest/@vitest/coverage-v8 to 4.1.12, addons-linter to 10.14.0,
sharp to 0.35.5 and svgo to 4.1.0 (supersedes the Dependabot svgo PR).
Raise the brace-expansion, fast-uri, js-yaml and postcss overrides to
their patched releases and refresh undici, image-size and
source-map-js through the lockfile. npm audit now reports 0
vulnerabilities for the root and server packages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012qx2BQfvCSescFYEacvute
2026-10-15 23:14:54 +00:00
KoalaDev 389cbc1aa3 Merge pull request #46 from Shik3i/codex/peer-video-navigation
feat(extension): share encrypted video links and fix initial chat activation
2026-10-16 01:11:39 +02:00
Claude 1e265d4462 fix(extension): keep participant focus across live list updates
The late-joiner E2E failed intermittently in CI for two reasons:

- The spec now joins Charlie with the chat secret but kept an empty room
  password. With a chat key, the popup's invite link requires a password,
  so init() threw before rendering the participant list, which then only
  appeared if a later PEER_UPDATE happened to arrive. Created rooms always
  carry a password, so the spec now uses one.
- A PEER_UPDATE that rebuilt the participant list right after a
  confirmation was cancelled dropped keyboard focus. The popup now restores
  focus to the same participant name after every rebuild.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGtFfKKJucjVZrph9x6AKa
2026-10-15 18:25:16 +00:00
Claude d717994b40 fix(extension): confirm link documents only after heartbeat checks
- Mark the selected document as showing a video only after a heartbeat has
  passed the session checks that follow getSettings(), so a heartbeat that
  turned stale meanwhile cannot leave the document marked shareable.
- Correct the tabs permission disclosure: tab addresses are read locally for
  tab selection and synchronization regardless of the setting; only sharing
  them with room participants depends on Share video link.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGtFfKKJucjVZrph9x6AKa
2026-10-15 17:58:40 +00:00
Claude 5020621aae docs: describe video-only sharing, secret groups and default-off handshakes
Align the privacy policy, chat protocol notes, help and changelog with the
link-sharing behaviour: links are shared only for pages with a detected
video, secret holders exchange links only with each other and are protected
against an active relay, and every current client takes part in the
encrypted handshake even with sharing off, exposing a secret-derived tag to
the relay.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGtFfKKJucjVZrph9x6AKa
2026-10-15 17:46:58 +00:00
Claude d970d01129 fix(extension): stop relay downgrades and limit links to video pages
- A chat-secret holder never answers an untagged or foreign-tagged hello
  with an ECDH key frame. A relay could otherwise strip the tag from a
  forged hello and read the holder's links. Secret holders now exchange
  links only within their secret group; rooms without a secret keep the
  pairwise exchange.
- Share the selected tab's URL only while its current document has shown a
  video. A cross-document navigation withdraws the link until the new page
  reports a video, so a selected tab taken to an unrelated site no longer
  publishes that site.
- A queued withdrawal may use the chat budget reserved for user messages, so
  active chatting cannot delay revoking a link.
- GET_STATUS returns peer links only to extension pages, and the chat
  overlay no longer receives CONNECTION_STATUS twice for top-level players.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGtFfKKJucjVZrph9x6AKa
2026-10-15 17:46:58 +00:00
Claude e7c53d7107 fix(extension): show the link-sharing disclosure and keep peer hosts readable
- Show the full-URL disclosure as visible text under the toggle, wired with
  aria-describedby, instead of only in a tooltip.
- Cut long destination hosts from the left so the registrable domain stays
  visible in the participant row.
- Return keyboard focus to the participant name after cancelling a link
  confirmation.
- Insert i18n placeholder values literally; peer-controlled data containing
  `$&` or similar patterns no longer rewrites the message.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGtFfKKJucjVZrph9x6AKa
2026-10-15 17:46:58 +00:00
Claude 1967bbb1e7 fix(extension): never drop the peer-navigation tab's load completion
A busy browser could finish loading another tab while a completion was in
progress and overwrite the single queued tab id, so the job tab was only
activated by the next keep-alive resume. Queue every completed tab instead.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AGtFfKKJucjVZrph9x6AKa
2026-10-15 17:46:58 +00:00
Claude dbdfa168a3 feat(extension): tell users when the relay cannot carry shared video links
Video links use the relay's encrypted chat channel. With sharing enabled and a
connected relay that does not advertise chat, the Privacy setting now shows an
explanatory note (translated in all 15 locales) instead of silently doing nothing.
The note stays hidden on capable relays, when sharing is off, or while offline.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BA13Ty4MaUSPjvfxN3DuYG
2026-10-09 18:01:21 +00:00
Claude 8d7107398c fix(deps): patch engine.io and proxy-addr production advisories
npm audit fix in server/ raises engine.io 6.6.9 to 6.6.11 (Engine.IO protocol
revision mismatch DoS, GHSA-2gc4-cqfq-p2gv) and proxy-addr 2.0.7 to 2.0.8
(IPv4-mapped IPv6 trust subnet spoofing, GHSA-jqcg-44mw-7w3h). Lockfile only; the
server production audit in `npm run verify` reports 0 vulnerabilities again.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BA13Ty4MaUSPjvfxN3DuYG
2026-10-09 18:01:21 +00:00
Claude e9bae77406 fix(extension): let slow peer navigations finish and cover the link lifecycle
An issued peer navigation is no longer failed after 45 seconds. A slow page that
finishes loading later is still activated, with a five-minute cap enforced by the
keep-alive resume. After the 45-second grace period the loaded page must still be
on the peer's site, so a tab the user took elsewhere meanwhile is reported instead
of being activated. A navigation that was stored but never issued still expires
after 45 seconds.

Adds an end-to-end lifecycle spec (default off, enable/disable, tab switch, clear,
navigation, tab close, relay restart, leave; with and without a chat secret) and
unit tests for the privacy gate and a relay without chat support.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BA13Ty4MaUSPjvfxN3DuYG
2026-10-09 12:10:21 +00:00
Claude 5fdc566299 feat(extension): confirm before a peer link replaces the selected tab
Participant rows now show the link's destination host (insecure http:// and
punycode look-alikes stay visible). When a tab is already selected, a click shows
an inline confirmation with Cancel focused; Escape cancels. The popup pins the
displayed URL in NAVIGATE_TO_PEER and the worker rejects the request with
status 'changed' if the peer published a different link in the meantime, so an
earlier confirmation can never open a newer destination.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BA13Ty4MaUSPjvfxN3DuYG
2026-10-09 11:18:42 +00:00
Claude ed5614f460 docs: disclose shared video links and warn about full URLs in every locale
The share-video-link tooltip now says the full URL, including query string and
fragment, is shared with the room, and that the setting is off by default
(all 15 locales). Privacy policy (EN/DE), docs/PRIVACY.md, help page, the chat
protocol document and the changelog describe the opt-in link sharing and the
peer-link subprotocol carried inside the existing chat envelope.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BA13Ty4MaUSPjvfxN3DuYG
2026-10-09 10:48:03 +00:00
Claude 7a13edf284 perf(extension): derive peer-link sender keys from the chat secret and reserve chat budget
Peers that hold the same chat secret now receive each sender key through one
broadcast frame wrapped under an HKDF-derived group key. A handshake costs a
constant number of frames per peer (hello, group key, URL) instead of one key
frame per participant; per-pair ECDH remains only for peers without the secret.
A 25-peer room converges in ~5 s with 4 frames per peer instead of ~32 s and 27.

Peer-link traffic can no longer starve user chat on the shared relay budget:
the limiter gains a reserve so link frames use at most 6 of 10 slots, and its
window carries a 500 ms jitter margin against the relay's fixed-window counter.
A URL withdrawal now overtakes queued handshake frames.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01BA13Ty4MaUSPjvfxN3DuYG
2026-10-09 10:08:21 +00:00
Timo cd7353c408 fix(extension): harden peer link privacy and navigation races 2026-09-09 02:19:18 +02:00
Timo 2b8bbf2316 feat(extension): add encrypted peer links and fix initial chat activation 2026-09-09 01:51:36 +02:00
Timo 358de748b5 docs: remove unsolicited security review report 2026-09-07 23:12:34 +02:00
KoalaDev 2a013f11ea Merge pull request #44 from Shik3i/codex/security-alert-remediation
fix(deps): patch fast-uri security advisories
2026-09-07 23:07:13 +02:00
Timo 9eee719dfe fix(deps): cover additional fast-uri authority advisories 2026-09-07 23:02:07 +02:00
Timo 74c90e2eb9 fix(deps): patch fast-uri security advisories 2026-09-07 22:52:32 +02:00
KoalaDev 7bac8d48ac Merge pull request #43 from Shik3i/dependabot/npm_and_yarn/server/npm_and_yarn-049d63b98d
chore(deps): bump qs from 6.15.3 to 6.16.0 in /server in the npm_and_yarn group across 1 directory
2026-09-07 22:47:07 +02:00
dependabot[bot] 44e20a8d9b chore(deps): bump qs
Bumps the npm_and_yarn group with 1 update in the /server directory: [qs](https://github.com/ljharb/qs).


Updates `qs` from 6.15.3 to 6.16.0
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.15.3...v6.16.0)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.16.0
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-03 11:22:07 +00:00
GitHub Action 77e3e829c6 chore(release): update versions to v3.2.0 [skip ci] 2026-09-01 05:14:36 +00:00
Timo dc7eb86ce6 fix(sync): harden episode transition compatibility v3.2.0 2026-09-01 07:08:39 +02:00
Timo 742386064c ci(release): enforce canonical image references 2026-09-01 03:45:18 +02:00
Timo bc5d1a0ea6 fix(sync): harden terminal state races 2026-09-01 03:34:01 +02:00
Timo 77e7d0c103 fix(sync): make episode transitions relay-authoritative 2026-09-01 03:21:02 +02:00
Timo 0dd6f5bba5 fix(extension): clear stale target after room exit 2026-08-31 23:43:41 +02:00
KoalaDev 1bd9da6bc5 fix(i18n): correct Romance locale translations 2026-08-30 01:06:28 +02:00
KoalaDev 05cfa5efb1 Merge pull request #41 from Kaia-Alenia/refactor/improve-locales-es-it-pt
refactor(locales): refine translations for Spanish, Italian, and Portuguese
2026-08-30 01:00:26 +02:00
KoalaDev 2ab3cbf170 fix(extension): harden Netflix page API sync 2026-08-30 00:50:35 +02:00