https://github.com/lukehagar/plex-api-oauth
An NPM Module designed to make Plex Media Server and plex.tv API calls easier to implement in JavaScript and React projects
https://github.com/lukehagar/plex-api-oauth
Last synced: 6 months ago
JSON representation
An NPM Module designed to make Plex Media Server and plex.tv API calls easier to implement in JavaScript and React projects
- Host: GitHub
- URL: https://github.com/lukehagar/plex-api-oauth
- Owner: LukeHagar
- License: mit
- Created: 2022-07-22T01:29:06.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2024-01-19T17:53:38.000Z (over 2 years ago)
- Last Synced: 2025-01-18T09:13:30.781Z (over 1 year ago)
- Language: JavaScript
- Size: 2.21 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# plex-api-oauth
# THIS PACKAGE IS DEPRECATED IN FAVOR OF https://github.com/LukeHagar/plexjs
An NPM Module designed to make Plex Media Server and plex.tv API calls easier to implement in JavaScript and React projects

https://www.npmjs.com/package/plex-api-oauth
This is a JavaScript Module written to take the OAuth Module written by @Dmbob https://github.com/Dmbob/plex-oauth and incorporate it into a front end friend frame work to make development of Plex API Based applications better
## How to Use
Examples Assume React Syntax
### Loading a Saved Session
LoadPlexSession:
Function returns an object that contains the plexClientInformation and plexTVAuthToken keys/values according to how they were created
```JavaScript
const loadedSession = LoadPlexSession();
if (loadedSession.plexClientInformation == null){
loadedSession.plexClientInformation = CreatePlexClientInformation();
}
const [plexClientInformation, setPlexClientInformation] = useState(
loadedSession.plexClientInformation
);
const [plexTVAuthToken, setPlexTVAuthToken] = useState(
loadedSession.plexTVAuthToken
);
```
### Login Button + Save Session
```JavaScript
async function PlexLoginButton() {
const tempPlexTVAuthToken = await PlexLogin(plexClientInformation);
const tempPlexTVUserData = await GetPlexUserData(
plexClientInformation,
tempPlexTVAuthToken
);
const tempPlexServers = await GetPlexServers(
plexClientInformation,
tempPlexTVAuthToken
);
const tempPlexLibraries = await GetPlexLibraries(tempPlexServers);
setPlexTVAuthToken(tempPlexTVAuthToken);
setPlexServers(tempPlexServers);
setPlexTVUserData(tempPlexTVUserData);
setPlexLibraries(tempPlexLibraries);
SavePlexSession(plexClientInformation, tempPlexTVAuthToken);
}
```
### Refresh Data with Saved Session
```JavaScript
async function Refresh() {
const tempPlexTVUserData = await GetPlexUserData(
plexClientInformation,
plexTVAuthToken
);
const tempPlexServers = await GetPlexServers(
plexClientInformation,
plexTVAuthToken
);
const tempPlexDevices = await GetPlexDevices(
plexClientInformation,
plexTVAuthToken
);
const tempPlexLibraries = await GetPlexLibraries(tempPlexServers);
UpdateHubs(tempPlexServers, tempPlexLibraries);
setPlexServers(tempPlexServers);
setPlexDevices(tempPlexDevices);
setPlexTVUserData(tempPlexTVUserData);
setPlexLibraries(tempPlexLibraries);
setIsRefreshing(false);
}
```
### Update Library list when the topic is changed (artists. albums, songs)
```JavaScript
async function UpdateLibrary() {
setIsLoading(true);
const returnObject = await GetLibraryPages(
plexServers,
plexLibraries,
topic,
pageNumber,
250
);
console.log(returnObject);
const tempItemArray = Array.from([
...new Set([...libraryItems, ...returnObject.items]),
]);
setLibraryItems(tempItemArray);
setLibraryHasMore(returnObject.hasMore);
setIsLoading(false);
}
```
### Intersection observer to load more library items when the callbackref object comes into view
```JavaScript
const observer = useRef();
const lastLibraryItem = useCallback(
(node) => {
if (isLoading) return;
if (observer.current) observer.current.disconnect();
observer.current = new IntersectionObserver((entries) => {
if (entries[0].isIntersecting && libraryHasMore) {
setPageNumber(pageNumber + 1);
}
});
if (node) observer.current.observe(node);
console.log(node);
},
[isLoading, libraryHasMore]
);
```
### Intersection observer Callback usage
```JavaScript
if (libraryItems?.length === index + 100) {
return (
{Obj.title} - {Obj.grandparentTitle} -{' '}
{Obj.parentTitle}
);
}
```
### Intersection observer to load more library items when the callbackref object comes into view
```JavaScript
const observer = useRef();
const lastLibraryItem = useCallback(
(node) => {
if (isLoading) return;
if (observer.current) observer.current.disconnect();
observer.current = new IntersectionObserver((entries) => {
if (entries[0].isIntersecting && libraryHasMore) {
setPageNumber(pageNumber + 1);
}
});
if (node) observer.current.observe(node);
console.log(node);
},
[isLoading, libraryHasMore]
);
```
### Get Plex Music Hub data
```JavaScript
async function UpdateHubs(plexClientInformation, plexServers, plexLibraries) {
const tempMusicHubs = await GetMusicHub(
plexClientInformation,
plexServers, // No Auth Token is needed since the server objects have their own access tokens
plexLibraries
);
setMusicHubs(tempMusicHubs);
}
```
## Commands:
### CreatePlexClientInformation
Accepts: input values
Generates the Client Information to uniquely identify the Authenticated client
Save between sessions for consistency
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### PlexLogin
Accepts: plexClientInformation
If command is run in a browser window it will open the new login window automatically
```JavaScript
plexTVAuthToken = PlexLogin(plexClientInformation);
```
### GetPlexUserData
Accepts: plexClientInformation, plexTVAuthToken
Queries the plex.tv api to get information on the authenticated user
```JavaScript
plexUserData = GetPlexUserData(plexClientInformation, plexTVAuthToken);
```
### GetPlexServers
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
plexServers = GetPlexServers(plexClientInformation, plexTVAuthToken);
```
### GetPlexMovies
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### GetPlexShows
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### GetPlexSeasons
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### GetPlexEpisodes
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### GetPlexMovieLibraries
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### GetPlexMusicLibraries
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### GetPlexTVShowLibraries
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### GetPlexArtists
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### GetPlexAlbums
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### GetPlexSongs
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### GetPlexLibraries
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### GetPlexDevices
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### ### GetLibraryPages
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### LoadPlexSession
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### SavePlexSession
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### GetMusicHub
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```
### GetArtistPage
Accepts an Object with partial client values, will populate the remaining ones left blank if needed
```JavaScript
input = {product:"LukeHagar.com"}
plexClientInformation = CreatePlexClientInformation(input);
```