## Typescript SDK Changes Detected:

* `plex-api.butler.startTask()`: 
  *  `request` **Changed** **Breaking** ⚠️
  *  `error` **Changed** **Breaking** ⚠️
* `plex-api.butler.stopTask()`: 
  *  `request` **Changed** **Breaking** ⚠️
  *  `error` **Changed** **Breaking** ⚠️
* `plex-api.updater.applyUpdates()`: 
  *  `request` **Changed** **Breaking** ⚠️
  *  `error` **Changed** **Breaking** ⚠️
* `plex-api.general.getServerInfo()`: **Added**
* `plex-api.general.getIdentity()`: **Added**
* `plex-api.general.getSourceConnectionInformation()`: **Added**
* `plex-api.general.getTransientToken()`: **Added**
* `plex-api.events.getNotifications()`: **Added**
* `plex-api.events.connectWebSocket()`: **Added**
* `plex-api.preferences.getAllPreferences()`: **Added**
* `plex-api.preferences.setPreferences()`: **Added**
* `plex-api.preferences.getPreference()`: **Added**
* `plex-api.rate.setRating()`: **Added**
* `plex-api.timeline.markPlayed()`: **Added**
* `plex-api.timeline.report()`: **Added**
* `plex-api.timeline.unscrobble()`: **Added**
* `plex-api.activities.listActivities()`: **Added**
* `plex-api.activities.cancelActivity()`: **Added**
* `plex-api.butler.stopTasks()`: **Added**
* `plex-api.butler.getTasks()`: **Added**
* `plex-api.butler.startTasks()`: **Added**
* `plex-api.downloadQueue.createDownloadQueue()`: **Added**
* `plex-api.downloadQueue.getDownloadQueue()`: **Added**
* `plex-api.downloadQueue.addDownloadQueueItems()`: **Added**
* `plex-api.downloadQueue.listDownloadQueueItems()`: **Added**
* `plex-api.downloadQueue.getItemDecision()`: **Added**
* `plex-api.downloadQueue.getDownloadQueueMedia()`: **Added**
* `plex-api.downloadQueue.removeDownloadQueueItems()`: **Added**
* `plex-api.downloadQueue.getDownloadQueueItems()`: **Added**
* `plex-api.downloadQueue.restartProcessingDownloadQueueItems()`: **Added**
* `plex-api.hubs.getAllHubs()`: **Added**
* `plex-api.hubs.getContinueWatching()`: **Added**
* `plex-api.hubs.getHubItems()`: **Added**
* `plex-api.hubs.getPromotedHubs()`: **Added**
* `plex-api.hubs.getMetadataHubs()`: **Added**
* `plex-api.hubs.getPostplayHubs()`: **Added**
* `plex-api.hubs.getRelatedHubs()`: **Added**
* `plex-api.hubs.getSectionHubs()`: **Added**
* `plex-api.hubs.resetSectionDefaults()`: **Added**
* `plex-api.hubs.listHubs()`: **Added**
* `plex-api.hubs.createCustomHub()`: **Added**
* `plex-api.hubs.moveHub()`: **Added**
* `plex-api.hubs.deleteCustomHub()`: **Added**
* `plex-api.hubs.updateHubVisibility()`: **Added**
* `plex-api.search.searchHubs()`: **Added**
* `plex-api.search.voiceSearchHubs()`: **Added**
* `plex-api.library.getLibraryItems()`: **Added**
* `plex-api.library.deleteCaches()`: **Added**
* `plex-api.library.cleanBundles()`: **Added**
* `plex-api.library.ingestTransientItem()`: **Added**
* `plex-api.library.getLibraryMatches()`: **Added**
* `plex-api.library.optimizeDatabase()`: **Added**
* `plex-api.library.getRandomArtwork()`: **Added**
* `plex-api.library.getSections()`: **Added**
* `plex-api.library.addSection()`: **Added**
* `plex-api.library.stopAllRefreshes()`: **Added**
* `plex-api.library.getSectionsPrefs()`: **Added**
* `plex-api.library.refreshSectionsMetadata()`: **Added**
* `plex-api.library.getTags()`: **Added**
* `plex-api.library.deleteMetadataItem()`: **Added**
* `plex-api.library.editMetadataItem()`: **Added**
* `plex-api.library.detectAds()`: **Added**
* `plex-api.library.getAllItemLeaves()`: **Added**
* `plex-api.library.analyzeMetadata()`: **Added**
* `plex-api.library.generateThumbs()`: **Added**
* `plex-api.library.detectCredits()`: **Added**
* `plex-api.library.getExtras()`: **Added**
* `plex-api.library.addExtras()`: **Added**
* `plex-api.library.getFile()`: **Added**
* `plex-api.library.startBifGeneration()`: **Added**
* `plex-api.library.detectIntros()`: **Added**
* `plex-api.library.createMarker()`: **Added**
* `plex-api.library.matchItem()`: **Added**
* `plex-api.library.listMatches()`: **Added**
* `plex-api.library.mergeItems()`: **Added**
* `plex-api.library.listSonicallySimilar()`: **Added**
* `plex-api.library.setItemPreferences()`: **Added**
* `plex-api.library.refreshItemsMetadata()`: **Added**
* `plex-api.library.getRelatedItems()`: **Added**
* `plex-api.library.listSimilar()`: **Added**
* `plex-api.library.splitItem()`: **Added**
* `plex-api.library.addSubtitles()`: **Added**
* `plex-api.library.getItemTree()`: **Added**
* `plex-api.library.unmatch()`: **Added**
* `plex-api.library.listTopUsers()`: **Added**
* `plex-api.library.detectVoiceActivity()`: **Added**
* `plex-api.library.getAugmentationStatus()`: **Added**
* `plex-api.library.setStreamSelection()`: **Added**
* `plex-api.library.getPerson()`: **Added**
* `plex-api.library.listPersonMedia()`: **Added**
* `plex-api.library.deleteLibrarySection()`: **Added**
* `plex-api.library.getLibraryDetails()`: **Added**
* `plex-api.library.editSection()`: **Added**
* `plex-api.library.updateItems()`: **Added**
* `plex-api.library.startAnalysis()`: **Added**
* `plex-api.library.autocomplete()`: **Added**
* `plex-api.library.getCollections()`: **Added**
* `plex-api.library.getCommon()`: **Added**
* `plex-api.library.emptyTrash()`: **Added**
* `plex-api.library.getSectionFilters()`: **Added**
* `plex-api.library.getFirstCharacters()`: **Added**
* `plex-api.library.deleteIndexes()`: **Added**
* `plex-api.library.deleteIntros()`: **Added**
* `plex-api.library.getSectionPreferences()`: **Added**
* `plex-api.library.setSectionPreferences()`: **Added**
* `plex-api.library.cancelRefresh()`: **Added**
* `plex-api.library.refreshSection()`: **Added**
* `plex-api.library.getAvailableSorts()`: **Added**
* `plex-api.library.getStreamLevels()`: **Added**
* `plex-api.library.getStreamLoudness()`: **Added**
* `plex-api.library.getChapterImage()`: **Added**
* `plex-api.library.setItemArtwork()`: **Added**
* `plex-api.library.updateItemArtwork()`: **Added**
* `plex-api.library.deleteMarker()`: **Added**
* `plex-api.library.editMarker()`: **Added**
* `plex-api.library.deleteMediaItem()`: **Added**
* `plex-api.library.getPartIndex()`: **Added**
* `plex-api.library.deleteCollection()`: **Added**
* `plex-api.library.getSectionImage()`: **Added**
* `plex-api.library.deleteStream()`: **Added**
* `plex-api.library.getStream()`: **Added**
* `plex-api.library.setStreamOffset()`: **Added**
* `plex-api.library.getItemArtwork()`: **Added**
* `plex-api.library.getMediaPart()`: **Added**
* `plex-api.library.getImageFromBif()`: **Added**
* `plex-api.collections.createCollection()`: **Added**
* `plex-api.dvRs.listDvRs()`: **Added**
* `plex-api.dvRs.createDvr()`: **Added**
* `plex-api.dvRs.deleteDvr()`: **Added**
* `plex-api.dvRs.getDvr()`: **Added**
* `plex-api.dvRs.deleteLineup()`: **Added**
* `plex-api.dvRs.addLineup()`: **Added**
* `plex-api.dvRs.setDvrPreferences()`: **Added**
* `plex-api.dvRs.stopDvrReload()`: **Added**
* `plex-api.dvRs.reloadGuide()`: **Added**
* `plex-api.dvRs.tuneChannel()`: **Added**
* `plex-api.dvRs.removeDeviceFromDvr()`: **Added**
* `plex-api.dvRs.addDeviceToDvr()`: **Added**
* `plex-api.epg.computeChannelMap()`: **Added**
* `plex-api.epg.getChannels()`: **Added**
* `plex-api.epg.getCountries()`: **Added**
* `plex-api.epg.getAllLanguages()`: **Added**
* `plex-api.epg.getLineup()`: **Added**
* `plex-api.epg.getLineupChannels()`: **Added**
* `plex-api.epg.getCountriesLineups()`: **Added**
* `plex-api.epg.getCountryRegions()`: **Added**
* `plex-api.epg.listLineups()`: **Added**
* `plex-api.liveTv.getSessions()`: **Added**
* `plex-api.liveTv.getLiveTvSession()`: **Added**
* `plex-api.liveTv.getSessionPlaylistIndex()`: **Added**
* `plex-api.liveTv.getSessionSegment()`: **Added**
* `plex-api.log.writeLog()`: **Added**
* `plex-api.log.writeMessage()`: **Added**
* `plex-api.log.enablePapertrail()`: **Added**
* `plex-api.devices.getAvailableGrabbers()`: **Added**
* `plex-api.devices.listDevices()`: **Added**
* `plex-api.devices.addDevice()`: **Added**
* `plex-api.devices.discoverDevices()`: **Added**
* `plex-api.devices.removeDevice()`: **Added**
* `plex-api.devices.getDeviceDetails()`: **Added**
* `plex-api.devices.modifyDevice()`: **Added**
* `plex-api.devices.setChannelmap()`: **Added**
* `plex-api.devices.getDevicesChannels()`: **Added**
* `plex-api.devices.setDevicePreferences()`: **Added**
* `plex-api.devices.stopScan()`: **Added**
* `plex-api.devices.scan()`: **Added**
* `plex-api.devices.getThumb()`: **Added**
* `plex-api.provider.listProviders()`: **Added**
* `plex-api.provider.addProvider()`: **Added**
* `plex-api.provider.refreshProviders()`: **Added**
* `plex-api.provider.deleteMediaProvider()`: **Added**
* `plex-api.subscriptions.getAllSubscriptions()`: **Added**
* `plex-api.subscriptions.createSubscription()`: **Added**
* `plex-api.subscriptions.processSubscriptions()`: **Added**
* `plex-api.subscriptions.getScheduledRecordings()`: **Added**
* `plex-api.subscriptions.getTemplate()`: **Added**
* `plex-api.subscriptions.cancelGrab()`: **Added**
* `plex-api.subscriptions.deleteSubscription()`: **Added**
* `plex-api.subscriptions.getSubscription()`: **Added**
* `plex-api.subscriptions.editSubscriptionPreferences()`: **Added**
* `plex-api.subscriptions.reorderSubscription()`: **Added**
* `plex-api.transcoder.transcodeImage()`: **Added**
* `plex-api.transcoder.makeDecision()`: **Added**
* `plex-api.transcoder.triggerFallback()`: **Added**
* `plex-api.transcoder.transcodeSubtitles()`: **Added**
* `plex-api.transcoder.startTranscodeSession()`: **Added**
* `plex-api.playlist.listPlaylists()`: **Added**
* `plex-api.playlist.getPlaylist()`: **Added**
* `plex-api.playlist.getPlaylistItems()`: **Added**
* `plex-api.libraryPlaylists.createPlaylist()`: **Added**
* `plex-api.libraryPlaylists.uploadPlaylist()`: **Added**
* `plex-api.libraryPlaylists.deletePlaylist()`: **Added**
* `plex-api.libraryPlaylists.updatePlaylist()`: **Added**
* `plex-api.libraryPlaylists.getPlaylistGenerators()`: **Added**
* `plex-api.libraryPlaylists.clearPlaylistItems()`: **Added**
* `plex-api.libraryPlaylists.addPlaylistItems()`: **Added**
* `plex-api.libraryPlaylists.deletePlaylistItem()`: **Added**
* `plex-api.libraryPlaylists.getPlaylistGenerator()`: **Added**
* `plex-api.libraryPlaylists.modifyPlaylistGenerator()`: **Added**
* `plex-api.libraryPlaylists.getPlaylistGeneratorItems()`: **Added**
* `plex-api.libraryPlaylists.movePlaylistItem()`: **Added**
* `plex-api.libraryPlaylists.refreshPlaylist()`: **Added**
* `plex-api.playQueue.createPlayQueue()`: **Added**
* `plex-api.playQueue.getPlayQueue()`: **Added**
* `plex-api.playQueue.addToPlayQueue()`: **Added**
* `plex-api.playQueue.clearPlayQueue()`: **Added**
* `plex-api.playQueue.resetPlayQueue()`: **Added**
* `plex-api.playQueue.shuffle()`: **Added**
* `plex-api.playQueue.unshuffle()`: **Added**
* `plex-api.playQueue.deletePlayQueueItem()`: **Added**
* `plex-api.playQueue.movePlayQueueItem()`: **Added**
* `plex-api.ultraBlur.getColors()`: **Added**
* `plex-api.ultraBlur.getImage()`: **Added**
* `plex-api.status.listSessions()`: **Added**
* `plex-api.status.getBackgroundTasks()`: **Added**
* `plex-api.status.listPlaybackHistory()`: **Added**
* `plex-api.status.terminateSession()`: **Added**
* `plex-api.status.deleteHistory()`: **Added**
* `plex-api.status.getHistoryItem()`: **Added**
* `plex-api.updater.checkUpdates()`: **Added**
* `plex-api.updater.getUpdatesStatus()`: **Added**
* `plex-api.content.getCollectionItems()`: **Added**
* `plex-api.content.getMetadataItem()`: **Added**
* `plex-api.content.getAlbums()`: **Added**
* `plex-api.content.listContent()`: **Added**
* `plex-api.content.getAllLeaves()`: **Added**
* `plex-api.content.getArts()`: **Added**
* `plex-api.content.getCategories()`: **Added**
* `plex-api.content.getCluster()`: **Added**
* `plex-api.content.getSonicPath()`: **Added**
* `plex-api.content.getFolders()`: **Added**
* `plex-api.content.listMoments()`: **Added**
* `plex-api.content.getSonicallySimilar()`: **Added**
* `plex-api.content.getCollectionImage()`: **Added**
* `plex-api.libraryCollections.addCollectionItems()`: **Added**
* `plex-api.libraryCollections.deleteCollectionItem()`: **Added**
* `plex-api.libraryCollections.moveCollectionItem()`: **Added**
* `plex-api.server.getServerCapabilities()`: **Deleted** **Breaking** ⚠️
* `plex-api.server.getServerPreferences()`: **Deleted** **Breaking** ⚠️
* `plex-api.server.getAvailableClients()`: **Deleted** **Breaking** ⚠️
* `plex-api.server.getDevices()`: **Deleted** **Breaking** ⚠️
* `plex-api.server.getServerIdentity()`: **Deleted** **Breaking** ⚠️
* `plex-api.server.getMyPlexAccount()`: **Deleted** **Breaking** ⚠️
* `plex-api.server.getResizedPhoto()`: **Deleted** **Breaking** ⚠️
* `plex-api.server.getMediaProviders()`: **Deleted** **Breaking** ⚠️
* `plex-api.server.getServerList()`: **Deleted** **Breaking** ⚠️
* `plex-api.media.markPlayed()`: **Deleted** **Breaking** ⚠️
* `plex-api.media.markUnplayed()`: **Deleted** **Breaking** ⚠️
* `plex-api.media.updatePlayProgress()`: **Deleted** **Breaking** ⚠️
* `plex-api.media.getBannerImage()`: **Deleted** **Breaking** ⚠️
* `plex-api.media.getThumbImage()`: **Deleted** **Breaking** ⚠️
* `plex-api.video.getTimeline()`: **Deleted** **Breaking** ⚠️
* `plex-api.video.startUniversalTranscode()`: **Deleted** **Breaking** ⚠️
* `plex-api.activities.getServerActivities()`: **Deleted** **Breaking** ⚠️
* `plex-api.activities.cancelServerActivities()`: **Deleted** **Breaking** ⚠️
* `plex-api.butler.getButlerTasks()`: **Deleted** **Breaking** ⚠️
* `plex-api.butler.startAllTasks()`: **Deleted** **Breaking** ⚠️
* `plex-api.butler.stopAllTasks()`: **Deleted** **Breaking** ⚠️
* `plex-api.plex.getCompanionsData()`: **Deleted** **Breaking** ⚠️
* `plex-api.plex.getUserFriends()`: **Deleted** **Breaking** ⚠️
* `plex-api.plex.getGeoData()`: **Deleted** **Breaking** ⚠️
* `plex-api.plex.getHomeData()`: **Deleted** **Breaking** ⚠️
* `plex-api.plex.getServerResources()`: **Deleted** **Breaking** ⚠️
* `plex-api.plex.getPin()`: **Deleted** **Breaking** ⚠️
* `plex-api.plex.getTokenByPinId()`: **Deleted** **Breaking** ⚠️
* `plex-api.hubs.getGlobalHubs()`: **Deleted** **Breaking** ⚠️
* `plex-api.hubs.getRecentlyAdded()`: **Deleted** **Breaking** ⚠️
* `plex-api.hubs.getLibraryHubs()`: **Deleted** **Breaking** ⚠️
* `plex-api.search.performSearch()`: **Deleted** **Breaking** ⚠️
* `plex-api.search.performVoiceSearch()`: **Deleted** **Breaking** ⚠️
* `plex-api.search.getSearchResults()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getFileHash()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getRecentlyAddedLibrary()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getAllLibraries()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getLibraryDetails()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.deleteLibrary()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getLibraryItems()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getLibrarySectionsAll()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getRefreshLibraryMetadata()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getSearchLibrary()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getGenresLibrary()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getCountriesLibrary()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getActorsLibrary()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getSearchAllLibraries()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getMediaMetaData()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getMediaArts()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.postMediaArts()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getMediaPosters()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.postMediaPoster()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getMetadataChildren()`: **Deleted** **Breaking** ⚠️
* `plex-api.library.getTopWatchedContent()`: **Deleted** **Breaking** ⚠️
* `plex-api.watchlist.getWatchList()`: **Deleted** **Breaking** ⚠️
* `plex-api.log.logLine()`: **Deleted** **Breaking** ⚠️
* `plex-api.log.logMultiLine()`: **Deleted** **Breaking** ⚠️
* `plex-api.log.enablePaperTrail()`: **Deleted** **Breaking** ⚠️
* `plex-api.playlists.createPlaylist()`: **Deleted** **Breaking** ⚠️
* `plex-api.playlists.getPlaylists()`: **Deleted** **Breaking** ⚠️
* `plex-api.playlists.getPlaylist()`: **Deleted** **Breaking** ⚠️
* `plex-api.playlists.deletePlaylist()`: **Deleted** **Breaking** ⚠️
* `plex-api.playlists.updatePlaylist()`: **Deleted** **Breaking** ⚠️
* `plex-api.playlists.getPlaylistContents()`: **Deleted** **Breaking** ⚠️
* `plex-api.playlists.clearPlaylistContents()`: **Deleted** **Breaking** ⚠️
* `plex-api.playlists.addPlaylistContents()`: **Deleted** **Breaking** ⚠️
* `plex-api.playlists.uploadPlaylist()`: **Deleted** **Breaking** ⚠️
* `plex-api.authentication.getTransientToken()`: **Deleted** **Breaking** ⚠️
* `plex-api.authentication.getSourceConnectionInformation()`: **Deleted** **Breaking** ⚠️
* `plex-api.authentication.getTokenDetails()`: **Deleted** **Breaking** ⚠️
* `plex-api.authentication.postUsersSignInData()`: **Deleted** **Breaking** ⚠️
* `plex-api.statistics.getStatistics()`: **Deleted** **Breaking** ⚠️
* `plex-api.statistics.getResourcesStatistics()`: **Deleted** **Breaking** ⚠️
* `plex-api.statistics.getBandwidthStatistics()`: **Deleted** **Breaking** ⚠️
* `plex-api.sessions.getSessions()`: **Deleted** **Breaking** ⚠️
* `plex-api.sessions.getSessionHistory()`: **Deleted** **Breaking** ⚠️
* `plex-api.sessions.getTranscodeSessions()`: **Deleted** **Breaking** ⚠️
* `plex-api.sessions.stopTranscodeSession()`: **Deleted** **Breaking** ⚠️
* `plex-api.updater.getUpdateStatus()`: **Deleted** **Breaking** ⚠️
* `plex-api.updater.checkForUpdates()`: **Deleted** **Breaking** ⚠️
* `plex-api.users.getUsers()`: **Deleted** **Breaking** ⚠️
This commit is contained in:
speakeasybot
2025-10-12 05:27:01 +00:00
parent de0bc5c344
commit cf2cf981be
2723 changed files with 266613 additions and 129103 deletions

View File

@@ -3,33 +3,110 @@
## Overview
Submit logs to the Log Handler for Plex Media Server
Logging mechanism to allow clients to log to the server
### Available Operations
* [logLine](#logline) - Logging a single line message.
* [logMultiLine](#logmultiline) - Logging a multi-line message
* [enablePaperTrail](#enablepapertrail) - Enabling Papertrail
* [writeLog](#writelog) - Logging a multi-line message to the Plex Media Server log
* [writeMessage](#writemessage) - Logging a single-line message to the Plex Media Server log
* [enablePapertrail](#enablepapertrail) - Enabling Papertrail
## logLine
## writeLog
This endpoint will write multiple lines to the main Plex Media Server log in a single request. It takes a set of query strings as would normally sent to the above PUT endpoint as a linefeed-separated block of POST data. The parameters for each query string match as above.
### Example Usage
<!-- UsageSnippet language="typescript" operationID="writeLog" method="post" path="/log" -->
```typescript
import { PlexAPI } from "@lukehagar/plexjs";
import { openAsBlob } from "node:fs";
const plexAPI = new PlexAPI();
async function run() {
const result = await plexAPI.log.writeLog(await openAsBlob("example.file"));
console.log(result);
}
run();
```
### Standalone function
The standalone function version of this method:
```typescript
import { PlexAPICore } from "@lukehagar/plexjs/core.js";
import { logWriteLog } from "@lukehagar/plexjs/funcs/logWriteLog.js";
import { openAsBlob } from "node:fs";
// Use `PlexAPICore` for best tree-shaking performance.
// You can create one instance of it to use across an application.
const plexAPI = new PlexAPICore();
async function run() {
const res = await logWriteLog(plexAPI, await openAsBlob("example.file"));
if (res.ok) {
const { value: result } = res;
console.log(result);
} else {
console.log("logWriteLog failed:", res.error);
}
}
run();
```
### Parameters
| Parameter | Type | Required | Description |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `request` | [ReadableStream<Uint8Array>](../../models/.md) | :heavy_check_mark: | The request object to use for the request. |
| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. |
| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. |
| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. |
### Response
**Promise\<[operations.WriteLogResponse](../../sdk/models/operations/writelogresponse.md)\>**
### Errors
| Error Type | Status Code | Content Type |
| --------------- | --------------- | --------------- |
| errors.SDKError | 4XX, 5XX | \*/\* |
## writeMessage
This endpoint will write a single-line log message, including a level and source to the main Plex Media Server log.
Note: This endpoint responds to all HTTP verbs **except POST** but PUT is preferred
### Example Usage
<!-- UsageSnippet language="typescript" operationID="logLine" method="get" path="/log" -->
<!-- UsageSnippet language="typescript" operationID="writeMessage" method="put" path="/log" -->
```typescript
import { PlexAPI } from "@lukehagar/plexjs";
import { Level } from "@lukehagar/plexjs/sdk/models/operations";
const plexAPI = new PlexAPI({
accessToken: "<YOUR_API_KEY_HERE>",
xPlexClientIdentifier: "abc123",
xPlexProduct: "Plex for Roku",
xPlexVersion: "2.4.1",
xPlexPlatform: "Roku",
xPlexPlatformVersion: "4.3 build 1057",
xPlexDevice: "Roku 3",
xPlexModel: "4200X",
xPlexDeviceVendor: "Roku",
xPlexDeviceName: "Living Room TV",
xPlexMarketplace: "googlePlay",
});
async function run() {
const result = await plexAPI.log.logLine(Level.Three, "Test log message", "Postman");
const result = await plexAPI.log.writeMessage({});
console.log(result);
}
@@ -43,120 +120,30 @@ The standalone function version of this method:
```typescript
import { PlexAPICore } from "@lukehagar/plexjs/core.js";
import { logLogLine } from "@lukehagar/plexjs/funcs/logLogLine.js";
import { Level } from "@lukehagar/plexjs/sdk/models/operations";
import { logWriteMessage } from "@lukehagar/plexjs/funcs/logWriteMessage.js";
// Use `PlexAPICore` for best tree-shaking performance.
// You can create one instance of it to use across an application.
const plexAPI = new PlexAPICore({
accessToken: "<YOUR_API_KEY_HERE>",
xPlexClientIdentifier: "abc123",
xPlexProduct: "Plex for Roku",
xPlexVersion: "2.4.1",
xPlexPlatform: "Roku",
xPlexPlatformVersion: "4.3 build 1057",
xPlexDevice: "Roku 3",
xPlexModel: "4200X",
xPlexDeviceVendor: "Roku",
xPlexDeviceName: "Living Room TV",
xPlexMarketplace: "googlePlay",
});
async function run() {
const res = await logLogLine(plexAPI, Level.Three, "Test log message", "Postman");
const res = await logWriteMessage(plexAPI, {});
if (res.ok) {
const { value: result } = res;
console.log(result);
} else {
console.log("logLogLine failed:", res.error);
}
}
run();
```
### Parameters
| Parameter | Type | Required | Description | Example |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `level` | [operations.Level](../../sdk/models/operations/level.md) | :heavy_check_mark: | An integer log level to write to the PMS log with.<br/>0: Error<br/>1: Warning<br/>2: Info<br/>3: Debug<br/>4: Verbose<br/> | |
| `message` | *string* | :heavy_check_mark: | The text of the message to write to the log. | [object Object] |
| `source` | *string* | :heavy_check_mark: | a string indicating the source of the message. | [object Object] |
| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. | |
| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. | |
| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. | |
### Response
**Promise\<[operations.LogLineResponse](../../sdk/models/operations/loglineresponse.md)\>**
### Errors
| Error Type | Status Code | Content Type |
| -------------------------- | -------------------------- | -------------------------- |
| errors.LogLineBadRequest | 400 | application/json |
| errors.LogLineUnauthorized | 401 | application/json |
| errors.SDKError | 4XX, 5XX | \*/\* |
## logMultiLine
This endpoint allows for the batch addition of log entries to the main Plex Media Server log.
It accepts a text/plain request body, where each line represents a distinct log entry.
Each log entry consists of URL-encoded key-value pairs, specifying log attributes such as 'level', 'message', and 'source'.
Log entries are separated by a newline character (`\n`).
Each entry's parameters should be URL-encoded to ensure accurate parsing and handling of special characters.
This method is efficient for logging multiple entries in a single API call, reducing the overhead of multiple individual requests.
The 'level' parameter specifies the log entry's severity or importance, with the following integer values:
- `0`: Error - Critical issues that require immediate attention.
- `1`: Warning - Important events that are not critical but may indicate potential issues.
- `2`: Info - General informational messages about system operation.
- `3`: Debug - Detailed information useful for debugging purposes.
- `4`: Verbose - Highly detailed diagnostic information for in-depth analysis.
The 'message' parameter contains the log text, and 'source' identifies the log message's origin (e.g., an application name or module).
Example of a single log entry format:
`level=4&message=Sample%20log%20entry&source=applicationName`
Ensure each parameter is properly URL-encoded to avoid interpretation issues.
### Example Usage
<!-- UsageSnippet language="typescript" operationID="logMultiLine" method="post" path="/log" -->
```typescript
import { PlexAPI } from "@lukehagar/plexjs";
const plexAPI = new PlexAPI({
accessToken: "<YOUR_API_KEY_HERE>",
});
async function run() {
const result = await plexAPI.log.logMultiLine("level=4&message=Test%20message%201&source=postman\n" +
"level=3&message=Test%20message%202&source=postman\n" +
"level=1&message=Test%20message%203&source=postman");
console.log(result);
}
run();
```
### Standalone function
The standalone function version of this method:
```typescript
import { PlexAPICore } from "@lukehagar/plexjs/core.js";
import { logLogMultiLine } from "@lukehagar/plexjs/funcs/logLogMultiLine.js";
// Use `PlexAPICore` for best tree-shaking performance.
// You can create one instance of it to use across an application.
const plexAPI = new PlexAPICore({
accessToken: "<YOUR_API_KEY_HERE>",
});
async function run() {
const res = await logLogMultiLine(plexAPI, "level=4&message=Test%20message%201&source=postman\n" +
"level=3&message=Test%20message%202&source=postman\n" +
"level=1&message=Test%20message%203&source=postman");
if (res.ok) {
const { value: result } = res;
console.log(result);
} else {
console.log("logLogMultiLine failed:", res.error);
console.log("logWriteMessage failed:", res.error);
}
}
@@ -167,40 +154,49 @@ run();
| Parameter | Type | Required | Description |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `request` | [string](../../models/.md) | :heavy_check_mark: | The request object to use for the request. |
| `request` | [operations.WriteMessageRequest](../../sdk/models/operations/writemessagerequest.md) | :heavy_check_mark: | The request object to use for the request. |
| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. |
| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. |
| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. |
### Response
**Promise\<[operations.LogMultiLineResponse](../../sdk/models/operations/logmultilineresponse.md)\>**
**Promise\<[operations.WriteMessageResponse](../../sdk/models/operations/writemessageresponse.md)\>**
### Errors
| Error Type | Status Code | Content Type |
| ------------------------------- | ------------------------------- | ------------------------------- |
| errors.LogMultiLineBadRequest | 400 | application/json |
| errors.LogMultiLineUnauthorized | 401 | application/json |
| errors.SDKError | 4XX, 5XX | \*/\* |
| Error Type | Status Code | Content Type |
| --------------- | --------------- | --------------- |
| errors.SDKError | 4XX, 5XX | \*/\* |
## enablePaperTrail
## enablePapertrail
This endpoint will enable all Plex Media Serverlogs to be sent to the Papertrail networked logging site for a period of time.
This endpoint will enable all Plex Media Server logs to be sent to the Papertrail networked logging site for a period of time
Note: This endpoint responds to all HTTP verbs but POST is preferred
### Example Usage
<!-- UsageSnippet language="typescript" operationID="enablePaperTrail" method="get" path="/log/networked" -->
<!-- UsageSnippet language="typescript" operationID="enablePapertrail" method="post" path="/log/networked" -->
```typescript
import { PlexAPI } from "@lukehagar/plexjs";
const plexAPI = new PlexAPI({
accessToken: "<YOUR_API_KEY_HERE>",
xPlexClientIdentifier: "abc123",
xPlexProduct: "Plex for Roku",
xPlexVersion: "2.4.1",
xPlexPlatform: "Roku",
xPlexPlatformVersion: "4.3 build 1057",
xPlexDevice: "Roku 3",
xPlexModel: "4200X",
xPlexDeviceVendor: "Roku",
xPlexDeviceName: "Living Room TV",
xPlexMarketplace: "googlePlay",
});
async function run() {
const result = await plexAPI.log.enablePaperTrail();
const result = await plexAPI.log.enablePapertrail({});
console.log(result);
}
@@ -214,21 +210,30 @@ The standalone function version of this method:
```typescript
import { PlexAPICore } from "@lukehagar/plexjs/core.js";
import { logEnablePaperTrail } from "@lukehagar/plexjs/funcs/logEnablePaperTrail.js";
import { logEnablePapertrail } from "@lukehagar/plexjs/funcs/logEnablePapertrail.js";
// Use `PlexAPICore` for best tree-shaking performance.
// You can create one instance of it to use across an application.
const plexAPI = new PlexAPICore({
accessToken: "<YOUR_API_KEY_HERE>",
xPlexClientIdentifier: "abc123",
xPlexProduct: "Plex for Roku",
xPlexVersion: "2.4.1",
xPlexPlatform: "Roku",
xPlexPlatformVersion: "4.3 build 1057",
xPlexDevice: "Roku 3",
xPlexModel: "4200X",
xPlexDeviceVendor: "Roku",
xPlexDeviceName: "Living Room TV",
xPlexMarketplace: "googlePlay",
});
async function run() {
const res = await logEnablePaperTrail(plexAPI);
const res = await logEnablePapertrail(plexAPI, {});
if (res.ok) {
const { value: result } = res;
console.log(result);
} else {
console.log("logEnablePaperTrail failed:", res.error);
console.log("logEnablePapertrail failed:", res.error);
}
}
@@ -239,18 +244,17 @@ run();
| Parameter | Type | Required | Description |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `request` | [operations.EnablePapertrailRequest](../../sdk/models/operations/enablepapertrailrequest.md) | :heavy_check_mark: | The request object to use for the request. |
| `options` | RequestOptions | :heavy_minus_sign: | Used to set various options for making HTTP requests. |
| `options.fetchOptions` | [RequestInit](https://developer.mozilla.org/en-US/docs/Web/API/Request/Request#options) | :heavy_minus_sign: | Options that are passed to the underlying HTTP request. This can be used to inject extra headers for examples. All `Request` options, except `method` and `body`, are allowed. |
| `options.retries` | [RetryConfig](../../lib/utils/retryconfig.md) | :heavy_minus_sign: | Enables retrying HTTP requests under certain failure conditions. |
### Response
**Promise\<[operations.EnablePaperTrailResponse](../../sdk/models/operations/enablepapertrailresponse.md)\>**
**Promise\<[operations.EnablePapertrailResponse](../../sdk/models/operations/enablepapertrailresponse.md)\>**
### Errors
| Error Type | Status Code | Content Type |
| ----------------------------------- | ----------------------------------- | ----------------------------------- |
| errors.EnablePaperTrailBadRequest | 400 | application/json |
| errors.EnablePaperTrailUnauthorized | 401 | application/json |
| errors.SDKError | 4XX, 5XX | \*/\* |
| Error Type | Status Code | Content Type |
| --------------- | --------------- | --------------- |
| errors.SDKError | 4XX, 5XX | \*/\* |