Skip to content

2025-05-05

Choose a tag to compare

@rupamkairi rupamkairi released this 05 May 13:26
· 16 commits to main since this release
f3a65ee

Summary

This release delivers end-to-end push notification deep-linking for the native app (Android + iOS), fixes two critical server-side bugs that were silently dropping all device notifications, and ships a structured logfmt observability improvement for BetterStack. A batch of security and maintenance dependency upgrades is also included.


Changes

Critical Bug Fixes — #331

  • AlertMethodMethod type-only import — enum was erased at compile time, causing a silent ReferenceError that skipped all device notifications. Fixed to a value import.
  • Unfiltered notification iterationPromise.all was iterating the original notifications array instead of filteredNotifications, sending pushes to disabled alert methods. Fixed.
  • Logger debug level leaking to Logtail — debug entries were routed as INFO in production. Now gated to NODE_ENV === 'development'.

Deep-Linking for Push Notifications — #331

  • firealert:// custom scheme — notifications now use firealert://alert/:alertId, bypassing iOS Safari intercept.
  • Cold-start queuing — notification tap events are queued if NavigationContainer isn't ready yet, then flushed on onReady.
  • Map zoom on tap — Home screen locates the tapped alert and calls camera.setCamera via calculateAlertCamera; skips default user-location zoom when alertId/incidentId is in params.
  • Re-tap support__ts nonce in deep-link params forces useEffect to re-fire on repeated taps.
  • OneSignal URL suppressionOneSignal_suppress_launch_urls = true added to iOS Info.plist, mirroring Android's existing config.
  • Platform config — Android intent-filters (/incident, /verify, firealert://), MainActivity.onNewIntent; iOS AppDelegate URL bridging, app group entitlement, AASA headers via Next.js config; server serves /.well-known/apple-app-site-association and assetlinks.json.

Android: OneSignal Permission Fix — #338 / #339

  • Fixed permission state not being correctly propagated to OneSignal, causing push registration failures on some Android devices.
  • Version bump and CodeRabbit feedback addressed.

Observability: Reduced BetterStack Log Volume — #340

  • Collapsed per-provider/per-incident/per-notification info lines into single logfmt summaries (stage=... event=...); verbose logs are dev-only.
  • Added escapeLogfmt() helper to prevent stack traces from fragmenting log records.
  • Removed clientApiKey and raw destination (PII) from log tags.
  • Fixed unsafe (error as Error) casts with error instanceof Error guards.
  • Fixed GEO provider tags in site alert logs; notification sender no longer halts after skipped batches.

Tooling — #329

  • Added .claude/ config for Claude Code worktree management; cleaned up older feature instruction files.

Dependency Updates

#328 + Dependabot

apps/server

Package From To
next ^16.1.5 ^16.2.3
nodemailer ^6.9.1 ^8.0.5
postcss ^8.5.6 ^8.5.10
@types/nodemailer ^6.4.7 ^8.0.0

apps/nativeapp (v1.9)

Package From To
axios ^1.13.5 ^1.15.0
Android versionCode 24 26
iOS build number 28 31
activesupport (Ruby) 7.2.2.1 7.2.3.1
addressable (Ruby) 2.8.7 2.9.0

Indirect / Security

  • ajv 6.12.66.14.0
  • rollup 4.54.04.59.0
  • minimatch 3.1.23.1.5
  • flatted 3.3.33.4.2
  • node-forge 1.3.21.4.0
  • follow-redirects 1.15.111.16.0
  • brace-expansion 1.1.121.1.14
  • fast-xml-parser 4.5.34.5.6
  • lodash 4.17.234.18.1
  • yaml 2.8.12.8.3
  • picomatch 2.3.12.3.2
  • protocol-buffers-schema 3.6.03.6.1

Tooling

  • .yarnrc: enabled --install.frozen-lockfile true for reproducible installs.
  • package-lock.json removed — yarn.lock is the single source of truth.

📜 Full Changelog

PR Type Title
#328 chore Update multiple dependencies to latest versions
#329 chore Configure Claude Code worktree management
#331 fix Resolve notification delivery failures and complete deep-link flow
#338 fix Fix Android OneSignal permission propagation
#339 chore Version bump & CodeRabbit feedback
#340 perf Reduce BetterStack log volume with logfmt summaries
#337 release Release: Update dependencies and Claude Config & DeepLinking

Full diff: develop...main