# changelog

## v1.1.0

### Added

* Multi-framework support — QBCore, ESX, and Standalone all use native notification methods automatically.
* `config.lua` — all configurable values (command, prefix, volume, timing intervals, framework name) are now in a single file loaded by both client and server.
* Server-side ownership validation — the server now verifies the requesting player is inside the vehicle before forwarding sync events. Spoofed requests are silently dropped with a console warning.

### Fixed

* `getPeds()` now guards against invalid `NetworkGetPlayerIndexFromPed` returns (`-1`) and zero server IDs, preventing accidental events being sent to player 0 (the server).
* Song name parsing (`parseSongName`) and sound identifier building (`soundName`) extracted into dedicated helpers, removing logic duplicated across five separate call sites.

### Changed

* All magic numbers (wait durations, intervals, prefixes) replaced with `Config.*` references.
* `notify()` now correctly uses the `type`, `title`, and `duration` parameters instead of ignoring them.

## v1.0.0

* Initial release.
* In-vehicle CarPlay UI with URL playback via xsound.
* Real-time passenger sync via server events.
* Vehicle statebag persistence for song, timestamp, volume, and pause state.
* Auto-resume when re-entering a vehicle with an active song.
* Pause on vehicle exit with timestamp save.
* Resource stop cleanup for sounds and statebag keys.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://mohssins.gitbook.io/mohscriptsdocs/moh-carplay/changelog.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
