Skip to content

chore(web-deps): bump @types/node from 25.9.3 to 26.0.0 in /web#53

Open
dependabot[bot] wants to merge 238 commits into
masterfrom
dependabot/npm_and_yarn/web/types/node-26.0.0
Open

chore(web-deps): bump @types/node from 25.9.3 to 26.0.0 in /web#53
dependabot[bot] wants to merge 238 commits into
masterfrom
dependabot/npm_and_yarn/web/types/node-26.0.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jun 22, 2026

Copy link
Copy Markdown
Contributor

Bumps @types/node from 25.9.3 to 26.0.0.

Commits

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

jakes1345 and others added 30 commits May 16, 2026 15:54
AI ops hardening + auto-update + admin moderation + GDPR delete
CI on master has been red since the web client + emoticongen work landed
because half of the files those features depend on were never staged.
Local builds passed only because the files lived on developer disks.

Brings into git:

- web/ infrastructure that npm needs at all:
    package.json, package-lock.json, tsconfig*.json, index.html, vite/
    eslint/vitest configs, .env.example, .gitignore, README, public/*,
    src/main.tsx, src/index.css, src/assets/hero.png, plus the
    e2ee.{ts,test.ts} + keyPins.ts + nexusTypes.ts modules that App.tsx
    imports.
- native_client/internal/ui/emoticon_tokens.go — defines
  EmoticonFileForShortcut which emoticons.go has been calling since the
  emoticon refactor.
- native_client/cmd/emoticongen — the spritesheet→PNGs tool that
  populates the emoticons assets directory.
- native_client/third_party/anet/{android_api_level,interface_android,
  netlink_android,android_api_level_cgo}.go — the Android-only network
  enumeration shim the existing interface.go !android build references.
- native_client/internal/sentinel/stun_parse_test.go — covers the STUN
  parser already in tracked code.
- scripts/install-android-ndk.sh — release.yml already invokes this.
- nexus_server/public/phaze/assets/{Icon,default_avatar,phaze_logo,
  ui_master_spritesheet}.png + emoticons/*.png — every brand and
  emoticon image the server (and emoticongen output) reference.
- nexus_server/assets/* + docker-compose.yml — dev assets.
- docs/{DEPLOY_SELF_HOSTED,LINUX_DISTRIBUTION,MOBILE_BUILDS}.md and
  local.mk.example — docs referenced by docs/index.html + Makefile.

Local: nexus 15/15, native 19/19, web 4/4 all green from a clean
checkout (rm -rf node_modules dist → npm ci → npm run build → tests).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
ESLint's no-use-before-define rejected the previous layout: the WS
message handler (installed in useLayoutEffect at line ~123) referenced
setRegStep / setMode / setDeleteOpen, but those useState declarations
sat ~250 lines lower in the function body. Functionally fine — the
handler closure resolves them at runtime — but lexically before-declare.

Moves the auth/registration/delete-account useState block up alongside
the other view-state setters so the handler can close over them legally.
No behaviour change.

Local: npm run build / lint / test all green. CI should be too.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…w a real login page

Until now, the web client only existed as a local dev app. phazechat.world
had no login UI at all; users had to download a desktop/Android binary.
This wires up:

- fly.toml moved to repo root so the Docker build context includes web/.
  dockerfile path now "nexus_server/Dockerfile". Existing fly secrets
  unchanged; next `fly deploy` from repo root.
- Multi-stage Dockerfile: adds a node:22-alpine stage that runs
  `npm ci && npm run build` over web/, copies the resulting dist into
  /app/web in the runtime image. Go stage paths adjusted for the new
  repo-root build context.
- nexus_server/main.go: registers /web/ → static FileServer from
  $PHAZE_WEB_DIR (default "web", set to /app/web in the runtime image),
  with SPA fallback (any unknown sub-path serves index.html) and an
  immutable-cache header for /web/assets/*. Bare /web 302→/web/.
  Logs which directory it picked at boot.
- web/vite.config.ts: sets `base: '/web/'` so absolute asset URLs in the
  built index.html resolve correctly under the SPA mount. Overridable via
  VITE_BASE for separate-host deploys (GitHub Pages, etc.).
- landing.html: header nav gains a "Sign in" link + "Open Phaze Web" CTA;
  hero adds an "Open Phaze Web" button alongside the existing download.

Smoke-tested locally (server bound to a temp port, no Docker):
- GET /web/                       → 200, serves built index.html
- GET /web/favicon.svg            → 200, image/svg+xml
- GET /web/assets/index-*.js      → 200, cache-control immutable
- GET /web/assets/index-*.css     → 200
- GET /web/some/spa/route         → 200, SPA fallback to index.html
- GET /web                        → 302 → /web/

Once `fly deploy` runs, phazechat.world/web is the React login form
(with the registration flow + delete-account UI from earlier commits).
Existing /, /download, /api/v1/*, /ws routes unchanged.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
… glass-aesthetic web UI

This is the foundation for community chat: servers (called "Spaces" in
product copy) own a set of channels, members join via invite code,
channel messages broadcast to every online member of the server. Layered
underneath the existing 1:1 / convo flows — they coexist; users toggle
between "Chats" and "Spaces" in the header.

Server (nexus_server/main.go):
- New tables: servers, channels, server_members, channel_messages, with
  indexes on (server_id, position), (channel_id, id), and (username).
- Channel-level chat history is server-side plaintext, NOT E2EE. Same
  tradeoff Discord/Telegram/Slack make so search, moderation, and join
  history work. Private-server E2EE channels are a future feature.
- NexusMessage gains: server_id, channel_id, server_name, channel_name,
  topic, kind, role, visibility, invite_code, servers[], channels[],
  messages[]. New typed payloads ServerSummary, ChannelInfo, ChannelMsg.
- WS message types:
    server_create   → creates a server + #general + #random, owner role
    server_list     → user's joined servers (with role per server)
    server_join     → join by invite code (validates code, idempotent)
    server_leave    → leave (owners refused; must delete or transfer)
    server_info     → channels + members for a server
    channel_create  → owner/admin only, name regex ^[a-z0-9][a-z0-9-_]{1,31}$
    channel_msg     → membership-gated, 1-8000 char body, broadcasts to
                       every online server member as channel_msg_in
    channel_history → 50-message page, cursored via history_from
  Plus server-push: channel_msg_in, server_channels_updated.
- All paths are membership-gated. Non-members can't post (covered in
  TestSmoke_ServersAndChannels). Owner-only / admin-only paths checked.

Web client (web/):
- web/src/Spaces.tsx: new component. Three-pane layout (server rail /
  channel list / chat stream). State: servers, channels-by-server,
  messages-by-channel, active selection, composer drafts. Auto-loads
  history on channel switch; auto-scrolls on new message. Modals for
  create-space (name + visibility radio) and join-by-invite. Inline
  add-channel for admins. Copy-invite-to-clipboard. Toast stack.
- web/src/spaces.css: Aero/glass aesthetic — backdrop-filter blur on
  the rail, channel pane, chat stream; layered shadows + inset highlights;
  cyan-to-deep-blue gradients on accents; spring-eased transitions; real
  light + dark via prefers-color-scheme; responsive collapse <820px.
- web/src/App.tsx: top-level view toggle (Chats | Spaces). Lightweight
  subscriber bus so child surfaces can observe inbound NexusMessages
  without us hard-coding every new feature into the App reducer.
- web/src/nexusTypes.ts: typed ServerSummary, ChannelInfo, ChannelMsg.

Test: TestSmoke_ServersAndChannels covers create → list → invite-join →
list (other user) → channel message broadcast (both clients see it) →
history fetch → non-member rejection → leave → owner-can't-leave. 15
nexus tests pass.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…on management

- Web push: VAPID keys, service worker, push_subscriptions table, send push on offline msg
- Email invite: invite_email WS handler, email with join link, invite_codes table
- GDPR export: /api/v1/export endpoint returns profile/friends/messages as JSON download
- VAPID public key endpoint: /api/v1/vapid-key for frontend subscription
- Session management: list_sessions + revoke_session_by_token WS handlers
- Settings: Sessions tab (list + revoke), Privacy tab gains invite form, Danger tab gains export button
- App: registers push subscription after login, auto-switches to register mode on ?invite= URL param

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Firebase project: phazechat-world, Android app ID: com.phazechat.app
- FCM service account initialized from FCM_SERVICE_ACCOUNT_JSON env var
- register_fcm_token WS handler: Android app sends token after login
- sendFCMPush fires on every offline message (alongside existing VAPID web push)
- fcm_token column added to users table via migration
- google-services.json saved for Android build

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- PhazeFCMService.java: onNewToken writes token to files/phaze_fcm_token,
  onMessageReceived shows high-priority notification when app is in background/killed
- AndroidManifest.xml: POST_NOTIFICATIONS permission + service declaration
- android/build.gradle: firebase-bom 33.7 + firebase-messaging + androidx.core
- android/project.gradle: google-services plugin classpath
- fcm_android.go (+stub): readFCMToken() reads token file on Android
- native_client/main.go: calls register_fcm_token after successful auth

Build with: make android (requires ANDROID_HOME + NDK)
Package name: world.phazechat.app

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Force-add production APK to build context for Dockerfile COPY.
Firebase project: phazechat-world

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Big landing-impact push across the whole stack:

Web client
- Linear/Arc-style minimalist redesign: Inter + JetBrains Mono, indigo→violet
  brand (#863bff), 10-14px corner radii, hairline separators, no gradients
- Voice messages (MediaRecorder → /api/v1/upload → inline audio bubble)
- Cross-device encrypted history (dm_messages table + dm_reactions)
- Recovery PIN multi-device key backup (PBKDF2 + AES-GCM in WebCrypto)
- Reactions, edits, deletes, @mentions, pins, in-chat search
- ⌘K command palette, slash commands, smarter friend list, empty states
- Sentry @sentry/react with WS-payload scrubbing
- Mascot logo "Echo" — favicon.svg + PNG rasters at 16-1024

Nexus server
- Encrypted history relay (msg/edit/delete/react persistence + dm_history)
- /api/v1/upload (25MB, allowlisted, opaque random filenames)
- /api/v1/admin/pending-verifications (SMTP rescue path)
- TURN auto-fallback (openrelay.metered.ca) when self-hosted TURN unset
- Sentry getsentry/sentry-go integration
- /health enriched with turn/smtp/webpush/fcm/sentry/litestream flags

Native client (Fyne)
- Phaze7Theme rewritten with variant-aware light/dark Color()
- Brand palette aligned to web tokens
- Flat solid bubbles (CornerRadius=14), no gradients
- Register dialog now actually shows email + mood fields (was a layout bug)
- localhost fallbacks purged; sanitizer rewrites stale saved server on boot
- Desktop OS notifications fire on every incoming DM
- Sentry SDK wired

Brand + copy
- Slogan: "Stay in phase." (replaces Tazher-era line)
- Public templates rewritten to claim only real features (no PSTN credit lies)
- docs/index.html (GitHub Pages) realigned to new brand
- .gitignore: whitelist native_client/assets/Icon.png so fyne-cross CI builds
- fyne-cross Docker images carry Go 1.24.6 but go.mod requires 1.25;
  GOTOOLCHAIN=auto lets the container fetch the right Go on demand
- macOS GitHub runners don't ship Docker, so use `fyne package -os darwin`
  directly — the toolchain is native there anyway
The fyne-cross Docker images don't ship libvpx/libasound; pion/mediadevices
needs vpx and beep needs alsa, so both Linux + macOS jobs were failing on
"Package 'vpx' not found."

New approach mirrors release.yml — install deps via apt on ubuntu-latest:
  - linux  : native fyne package (libvpx-dev, libasound2-dev)
  - windows: mingw-w64 cross compile (gcc-mingw-w64-x86-64)
  - android: fyne-cross android (its image has the needed bits)
  - macos  : native fyne package on macos-latest (brew install libvpx)
  - ios    : dropped (Apple Dev Program required for signing)
Builds linux/amd64 + linux/arm64 multi-arch image from nexus_server/Dockerfile
and pushes to ghcr.io/jakes1345/skype7-reborn-nexus on every master push
and version tag. Self-hosters can now:

  docker run -p 8080:8080 -v nexus_data:/data \
    ghcr.io/jakes1345/skype7-reborn-nexus:latest
Pion's mediadevices/pkg/codec/vpx requires the vpx C headers at build
time. When cross-compiling for Windows via mingw on a Linux runner the
Linux libvpx-dev headers aren't visible to the Windows compiler, so the
build fails with 'vpx/vpx_encoder.h: No such file'.

Reuse the existing Android no-vpx stub by extending its build tag to
cover Windows. Windows users lose VP8 send-side video encoding (same
trade-off Android already has) but voice + text + receive-side video
keep working. Linux + macOS desktop still get full VP8.

Companion build-clients.yml rewrite already added libvpx/asound apt
deps for the Linux native job — this just unblocks the Windows step.
- Switch email path to Brevo /v3/smtp/email when BREVO_API_KEY set; SMTP
  remains as fallback. /health now reports brevo_configured.
- Resolve App.tsx lint errors blocking Phaze CI: indirect ingestDMHistory
  via ref to avoid TDZ; suppress setUnread-in-effect false positive.
- Add g++-mingw-w64-x86-64 to Windows cross-build apt deps so
  pion/mediadevices C++ sources link.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Switch entrypoint + litestream.yml to read Fly Tigris env vars
  (BUCKET_NAME, AWS_ENDPOINT_URL_S3, AWS_REGION, AWS_ACCESS_KEY_ID,
  AWS_SECRET_ACCESS_KEY). LITESTREAM_* still honored for self-hosters.
- /health reports litestream_configured when either var set.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…reen share

Native client:
- Sign-in window now swaps to registration view in-place instead of
  spawning a new OS window. Back button restores login form.
- Embed Icon.png via go:embed so the app icon shows even when the
  binary runs outside the .vault-packaged distribution.

Web client:
- Render uploaded videos inline with <video controls>.
- Add screen share button to active video call: getDisplayMedia,
  replaceTrack on the video sender, swap back to camera on Stop.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Server:
- Track in-memory VoiceRooms map of channel_id → set of usernames.
- Handle voice_join / voice_leave / voice_signal WS messages.
- Relay signaling (offer/answer/ice) between peers in the same room.
- Broadcast voice_peers to all participants on join/leave.
- Evict users from all voice rooms on disconnect.

Web:
- New VoiceRoom component: mesh of peer connections (one per other user),
  microphone capture, mute toggle, join/leave UX.
- Lexicographically-smaller username initiates the offer to avoid double
  signaling. Drops PCs cleanly when a peer leaves or component unmounts.
- Spaces routes voice-kind channels to VoiceRoom instead of chat composer.
- TURN config plumbed from App.tsx through Spaces for relay fallback.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
VoiceRoom now offers "Join voice" (audio-only) and "Join with video"
buttons. Adds in-room camera toggle (when joined with video). Each peer
tile renders the remote <video> element when a video track is live;
otherwise falls back to the avatar circle. State-driven track tracking
keeps the React refs lint clean.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Server: stream_start/stop/list/join/leave/signal protocol with
  in-memory map of broadcaster -> viewer set. Pushes live-list updates
  to all clients on start/stop. Evicts streams + viewer entries on
  client disconnect.
- Web: new Live tab with "Go Live" composer, grid of current
  broadcasters, broadcaster stage with viewer count, and viewer stage
  with the broadcaster's remote video. Mesh — broadcaster maintains
  one PC per viewer. Scales to ~10-15 viewers before uplink saturates;
  swap in an SFU when that becomes a real limit.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
jakes1345 and others added 26 commits June 19, 2026 17:18
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 25.9.3 to 26.0.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 26.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot @github

dependabot Bot commented on behalf of github Jun 22, 2026

Copy link
Copy Markdown
Contributor Author

Labels

The following labels could not be found: dependencies, web. Please create them before Dependabot can add them to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jun 22, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
❌ Deployment failed
View logs
skype7-reborn 272fb9c Jun 22 2026, 03:26 AM

@dependabot @github

dependabot Bot commented on behalf of github Jun 24, 2026

Copy link
Copy Markdown
Contributor Author

A newer version of @​types/node exists, but since this PR has been edited by someone other than Dependabot I haven't updated it. You'll get a PR for the updated version as normal once this PR is merged.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant