mirror of
https://github.com/LukeHagar/plexjs.git
synced 2025-12-06 12:37:46 +00:00
Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c5d773bf41 | ||
|
|
00eaf93095 | ||
|
|
d3a82b8467 | ||
|
|
85ce11cadc | ||
|
|
1b4f9dbf96 | ||
|
|
2f0a7b96d4 | ||
|
|
fa3519f1bb | ||
|
|
8afc3f323d | ||
|
|
7fd2b4ceda | ||
|
|
87bb486f1f | ||
|
|
18c735a920 | ||
|
|
331618b77a | ||
|
|
5f601ecf65 | ||
|
|
8eeef06c9c | ||
|
|
bc9335abcf | ||
|
|
792fedc759 | ||
|
|
e343455e77 | ||
|
|
7a7931b0d0 | ||
|
|
b3c26fd1a7 | ||
|
|
26fa0aef86 | ||
|
|
74ecefac8b | ||
|
|
8855195c09 | ||
|
|
227636620e | ||
|
|
5866739942 | ||
|
|
0eacb0e7c4 | ||
|
|
c0efb9a732 | ||
|
|
71484de76e | ||
|
|
be73efff0b | ||
|
|
a00c394526 | ||
|
|
3d57b22b26 | ||
|
|
995bbedbb6 | ||
|
|
d638acb5d2 | ||
|
|
f87006d3e8 | ||
|
|
fcab6f2532 | ||
|
|
4c552faaf5 | ||
|
|
7ea8776750 | ||
|
|
b9487a78df | ||
|
|
4addcb43e0 | ||
|
|
05444f54ad |
34
.github/workflows/bump_version.yml
vendored
34
.github/workflows/bump_version.yml
vendored
@@ -5,11 +5,6 @@ on:
|
|||||||
inputs:
|
inputs:
|
||||||
version:
|
version:
|
||||||
description: The version to bump to
|
description: The version to bump to
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- plexjs/**
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
update_typescript_version:
|
update_typescript_version:
|
||||||
@@ -58,17 +53,34 @@ jobs:
|
|||||||
- name: Update config files with new version
|
- name: Update config files with new version
|
||||||
id: updateVersion
|
id: updateVersion
|
||||||
run: |
|
run: |
|
||||||
yq -i '.npmVersion = "${{ github.event.inputs.version }}"' config.yaml
|
yq -i '.npmVersion = "${{ github.event.inputs.version }}"' sdk-resources/pms-config.yaml
|
||||||
|
yq -i '.npmVersion = "${{ github.event.inputs.version }}"' sdk-resources/plextv-config.yaml
|
||||||
|
|
||||||
- name: Build TS SDK
|
## Update package.json file with new version
|
||||||
id: buildTS
|
- name: Update package.json version
|
||||||
|
id: updatePackageJsonVersion
|
||||||
|
if: steps.updateVersion.outcome == 'success'
|
||||||
run: |
|
run: |
|
||||||
rm -rf plexjs/
|
LATEST_TAG=$(git describe --tags `git rev-list --tags --max-count=1`)
|
||||||
java -jar openapi-generator-cli.jar generate -i api-specs/referenced/plex-api-spec.yaml -g typescript-axios -o plexjs/ --global-property skipFormModel=false --config config.yaml
|
cd plexjs
|
||||||
|
jq '.version = "${{ github.event.inputs.version }}"' package.json > package.json.tmp && mv package.json.tmp package.json
|
||||||
|
|
||||||
|
- name: Build PMS SDK
|
||||||
|
id: buildPMS
|
||||||
|
run: |
|
||||||
|
rm -rf plexjs/pms
|
||||||
|
java -jar openapi-generator-cli.jar generate -i api-specs/pms/pms-spec.yaml -g typescript-axios -o plexjs/pms --global-property skipFormModel=false --config sdk-resources/pms-config.yaml
|
||||||
|
|
||||||
|
- name: Build PTV SDK
|
||||||
|
id: buildPTV
|
||||||
|
if: steps.buildPMS.outcome == 'success'
|
||||||
|
run: |
|
||||||
|
rm -rf plexjs/plextv
|
||||||
|
java -jar openapi-generator-cli.jar generate -i api-specs/plextv/plextv-spec.yaml -g typescript-axios -o plexjs/plextv --global-property skipFormModel=false --config sdk-resources/plextv-config.yaml
|
||||||
|
|
||||||
- name: After SDK Build
|
- name: After SDK Build
|
||||||
id: buildSDK
|
id: buildSDK
|
||||||
if: steps.buildTS.outcome == 'success'
|
if: steps.buildPTV.outcome == 'success'
|
||||||
run: |
|
run: |
|
||||||
cd plexjs
|
cd plexjs
|
||||||
npm install
|
npm install
|
||||||
|
|||||||
6
examples/.eslintignore
Normal file
6
examples/.eslintignore
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
# don't ever lint node_modules
|
||||||
|
node_modules
|
||||||
|
# don't lint build output (make sure it's set to your correct build folder name)
|
||||||
|
build
|
||||||
|
# don't lint nyc coverage output
|
||||||
|
coverage
|
||||||
19
examples/.eslintrc
Normal file
19
examples/.eslintrc
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
"root": true,
|
||||||
|
"parser": "@typescript-eslint/parser",
|
||||||
|
"plugins": ["@typescript-eslint", "prettier", "jest"],
|
||||||
|
"extends": [
|
||||||
|
"eslint:recommended",
|
||||||
|
"plugin:@typescript-eslint/recommended",
|
||||||
|
"prettier"
|
||||||
|
],
|
||||||
|
"rules": {
|
||||||
|
"no-console": 1,
|
||||||
|
"prettier/prettier": 2
|
||||||
|
},
|
||||||
|
"env": {
|
||||||
|
"browser": true,
|
||||||
|
"node": true,
|
||||||
|
"jest/globals": true
|
||||||
|
}
|
||||||
|
}
|
||||||
107
examples/.gitignore
vendored
Normal file
107
examples/.gitignore
vendored
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
# Diagnostic reports (https://nodejs.org/api/report.html)
|
||||||
|
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
||||||
|
|
||||||
|
# Runtime data
|
||||||
|
pids
|
||||||
|
*.pid
|
||||||
|
*.seed
|
||||||
|
*.pid.lock
|
||||||
|
|
||||||
|
# Directory for instrumented libs generated by jscoverage/JSCover
|
||||||
|
lib-cov
|
||||||
|
|
||||||
|
# Coverage directory used by tools like istanbul
|
||||||
|
coverage
|
||||||
|
*.lcov
|
||||||
|
|
||||||
|
# nyc test coverage
|
||||||
|
.nyc_output
|
||||||
|
|
||||||
|
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
|
||||||
|
.grunt
|
||||||
|
|
||||||
|
# Bower dependency directory (https://bower.io/)
|
||||||
|
bower_components
|
||||||
|
|
||||||
|
# node-waf configuration
|
||||||
|
.lock-wscript
|
||||||
|
|
||||||
|
# Compiled binary addons (https://nodejs.org/api/addons.html)
|
||||||
|
build/Release
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
node_modules/
|
||||||
|
jspm_packages/
|
||||||
|
|
||||||
|
# TypeScript v1 declaration files
|
||||||
|
typings/
|
||||||
|
|
||||||
|
# TypeScript cache
|
||||||
|
*.tsbuildinfo
|
||||||
|
|
||||||
|
# Optional npm cache directory
|
||||||
|
.npm
|
||||||
|
|
||||||
|
# Optional eslint cache
|
||||||
|
.eslintcache
|
||||||
|
|
||||||
|
# Microbundle cache
|
||||||
|
.rpt2_cache/
|
||||||
|
.rts2_cache_cjs/
|
||||||
|
.rts2_cache_es/
|
||||||
|
.rts2_cache_umd/
|
||||||
|
|
||||||
|
# Optional REPL history
|
||||||
|
.node_repl_history
|
||||||
|
|
||||||
|
# Output of 'npm pack'
|
||||||
|
*.tgz
|
||||||
|
|
||||||
|
# Yarn Integrity file
|
||||||
|
.yarn-integrity
|
||||||
|
|
||||||
|
# dotenv environment variables file
|
||||||
|
.env
|
||||||
|
.env.test
|
||||||
|
|
||||||
|
# parcel-bundler cache (https://parceljs.org/)
|
||||||
|
.cache
|
||||||
|
|
||||||
|
# Next.js build output
|
||||||
|
.next
|
||||||
|
|
||||||
|
# Nuxt.js build / generate output
|
||||||
|
.nuxt
|
||||||
|
dist
|
||||||
|
|
||||||
|
# Gatsby files
|
||||||
|
.cache/
|
||||||
|
# Comment in the public line in if your project uses Gatsby and not Next.js
|
||||||
|
# https://nextjs.org/blog/next-9-1#public-directory-support
|
||||||
|
# public
|
||||||
|
|
||||||
|
# vuepress build output
|
||||||
|
.vuepress/dist
|
||||||
|
|
||||||
|
# Serverless directories
|
||||||
|
.serverless/
|
||||||
|
|
||||||
|
# FuseBox cache
|
||||||
|
.fusebox/
|
||||||
|
|
||||||
|
# DynamoDB Local files
|
||||||
|
.dynamodb/
|
||||||
|
|
||||||
|
# TernJS port file
|
||||||
|
.tern-port
|
||||||
|
|
||||||
|
# Stores VSCode versions used for testing VSCode extensions
|
||||||
|
.vscode-test
|
||||||
43
examples/README.md
Normal file
43
examples/README.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# 🧰 Simple TypeScript Starter | 2022
|
||||||
|
|
||||||
|
> We talk about a lot of **advanced Node.js and TypeScript** concepts on [the blog](https://khalilstemmler.com), particularly focused around Domain-Driven Design and large-scale enterprise application patterns. However, I received a few emails from readers that were interested in seeing what a basic TypeScript starter project looks like. So I've put together just that.
|
||||||
|
|
||||||
|
### Features
|
||||||
|
|
||||||
|
- Minimal
|
||||||
|
- TypeScript v4
|
||||||
|
- Testing with Jest
|
||||||
|
- Linting with Eslint and Prettier
|
||||||
|
- Pre-commit hooks with Husky
|
||||||
|
- VS Code debugger scripts
|
||||||
|
- Local development with Nodemon
|
||||||
|
|
||||||
|
### Scripts
|
||||||
|
|
||||||
|
#### `npm run start:dev`
|
||||||
|
|
||||||
|
Starts the application in development using `nodemon` and `ts-node` to do hot reloading.
|
||||||
|
|
||||||
|
#### `npm run start`
|
||||||
|
|
||||||
|
Starts the app in production by first building the project with `npm run build`, and then executing the compiled JavaScript at `build/index.js`.
|
||||||
|
|
||||||
|
#### `npm run build`
|
||||||
|
|
||||||
|
Builds the app at `build`, cleaning the folder first.
|
||||||
|
|
||||||
|
#### `npm run test`
|
||||||
|
|
||||||
|
Runs the `jest` tests once.
|
||||||
|
|
||||||
|
#### `npm run test:dev`
|
||||||
|
|
||||||
|
Run the `jest` tests in watch mode, waiting for file changes.
|
||||||
|
|
||||||
|
#### `npm run prettier-format`
|
||||||
|
|
||||||
|
Format your code.
|
||||||
|
|
||||||
|
#### `npm run prettier-watch`
|
||||||
|
|
||||||
|
Format your code in watch mode, waiting for file changes.
|
||||||
6
examples/nodemon.json
Normal file
6
examples/nodemon.json
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"watch": ["src"],
|
||||||
|
"ext": ".ts,.js",
|
||||||
|
"ignore": [],
|
||||||
|
"exec": "npx ts-node ./src/index.ts"
|
||||||
|
}
|
||||||
17904
examples/package-lock.json
generated
Normal file
17904
examples/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,24 +1,31 @@
|
|||||||
{
|
{
|
||||||
"name": "examples",
|
"name": "typescript-starter",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "Examples using the plexjs package",
|
"description": "A basic typescript app starter for 2023.",
|
||||||
"main": "build/index.js",
|
"main": "index.js",
|
||||||
"types": "build/index.d.ts",
|
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "ts-node src/index.ts",
|
"build": "rimraf ./build && tsc",
|
||||||
"build": "tsc"
|
"dev": "npx nodemon",
|
||||||
|
"start": "npm run build && node build/index.js"
|
||||||
},
|
},
|
||||||
|
"keywords": [],
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/request": "^2.48.8",
|
"@lukehagar/plexjs": "^0.0.22",
|
||||||
"http": "^0.0.1-security",
|
"@types/jest": "^29.5.1",
|
||||||
|
"@types/node": "^18.6.1",
|
||||||
|
"@typescript-eslint/eslint-plugin": "^5.31.0",
|
||||||
|
"@typescript-eslint/parser": "^5.31.0",
|
||||||
|
"dotenv": "^16.0.3",
|
||||||
"nodemon": "^2.0.19",
|
"nodemon": "^2.0.19",
|
||||||
"request": "^2.88.2",
|
"onchange": "^7.1.0",
|
||||||
|
"rimraf": "^5.0.0",
|
||||||
|
"run-script-os": "^1.1.6",
|
||||||
"ts-node": "^10.9.1",
|
"ts-node": "^10.9.1",
|
||||||
"typescript": "^5.0.4"
|
"typescript": "^5.0.4"
|
||||||
},
|
},
|
||||||
"author": "lukehagar",
|
|
||||||
"license": "MIT",
|
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"plexjs": "file:../plexjs"
|
"jest-cucumber": "^3.0.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,21 @@
|
|||||||
import { Configuration, DevicesApi } from "plexjs";
|
import {
|
||||||
|
Configuration,
|
||||||
|
ServerApi,
|
||||||
|
DevicesApi,
|
||||||
|
PlexTvApi,
|
||||||
|
} from "@lukehagar/plexjs";
|
||||||
|
import dotenv from "dotenv";
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
let Config = new Configuration({ basePath: "127.0.0.1:80" });
|
const config = new Configuration({
|
||||||
let devicesApi = new DevicesApi(Config);
|
basePath: process.env.BASE_PATH,
|
||||||
|
plexToken: process.env.PLEX_TOKEN,
|
||||||
|
});
|
||||||
|
|
||||||
|
// new ServerApi(config).getServerCapabilities().then((resp) => console.log(resp));
|
||||||
|
|
||||||
|
// new DevicesApi(config).getDevices().then((resp) => console.log(resp));
|
||||||
|
|
||||||
|
new PlexTvApi(config)
|
||||||
|
.getUserDetails({ baseURL: "https://plex.tv/api/v2" })
|
||||||
|
.then((resp) => console.log(resp));
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "ES2020", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
|
"target": "es5",
|
||||||
"module": "commonjs", /* Specify what module code is generated. */
|
"module": "commonjs",
|
||||||
"moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
|
"lib": ["es6"],
|
||||||
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
|
"allowJs": true,
|
||||||
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
|
"outDir": "build",
|
||||||
"strict": true, /* Enable all strict type-checking options. */
|
|
||||||
"skipLibCheck": true,
|
|
||||||
"outDir": "./build",
|
|
||||||
"rootDir": "src",
|
"rootDir": "src",
|
||||||
"sourceMap": true
|
"strict": true,
|
||||||
|
"esModuleInterop": true,
|
||||||
|
"types": ["node", "jest"],
|
||||||
|
"skipLibCheck": true
|
||||||
},
|
},
|
||||||
"include": ["src/**/*"],
|
"include": ["src/**/*"],
|
||||||
"exclude": ["node_modules"]
|
"exclude": ["src/**/*.spec.ts"]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,202 +0,0 @@
|
|||||||
Arguments:
|
|
||||||
C:\Program Files\nodejs\node.exe C:\Users\Luke\AppData\Roaming\npm\node_modules\yarn\bin\yarn.js dev
|
|
||||||
|
|
||||||
PATH:
|
|
||||||
C:\Python311\Scripts\;C:\Python311\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\nodejs\;C:\ProgramData\chocolatey\bin;C:\Program Files\Git\cmd;C:\Program Files\Docker\Docker\resources\bin;C:\Program Files\Go\bin;C:\Users\Luke\.console-ninja\.bin;C:\Users\Luke\AppData\Local\Microsoft\WindowsApps;C:\Users\Luke\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\Luke\AppData\Local\GitHubDesktop\bin;C:\Users\Luke\go\bin;C:\Users\Luke\AppData\Roaming\npm;C:\Users\Luke\go\bin
|
|
||||||
|
|
||||||
Yarn version:
|
|
||||||
1.22.19
|
|
||||||
|
|
||||||
Node version:
|
|
||||||
18.14.2
|
|
||||||
|
|
||||||
Platform:
|
|
||||||
win32 x64
|
|
||||||
|
|
||||||
Trace:
|
|
||||||
SyntaxError: C:\Users\Luke\Documents\GitHub\plexjs\examples\package.json: Unexpected token } in JSON at position 361
|
|
||||||
at JSON.parse (<anonymous>)
|
|
||||||
at C:\Users\Luke\AppData\Roaming\npm\node_modules\yarn\lib\cli.js:1629:59
|
|
||||||
at Generator.next (<anonymous>)
|
|
||||||
at step (C:\Users\Luke\AppData\Roaming\npm\node_modules\yarn\lib\cli.js:310:30)
|
|
||||||
at C:\Users\Luke\AppData\Roaming\npm\node_modules\yarn\lib\cli.js:321:13
|
|
||||||
|
|
||||||
npm manifest:
|
|
||||||
{
|
|
||||||
"name": "examples",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"description": "Examples using the plexjs package",
|
|
||||||
"main": "index.js",
|
|
||||||
|
|
||||||
"scripts": {
|
|
||||||
"dev": "node --experimental-modules index.js ",
|
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
|
||||||
},
|
|
||||||
"author": "lukehagar",
|
|
||||||
"license": "MIT",
|
|
||||||
"devDependencies": {
|
|
||||||
"@lukehagar/plexjs": "^0.0.15",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
yarn manifest:
|
|
||||||
No manifest
|
|
||||||
|
|
||||||
Lockfile:
|
|
||||||
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
|
||||||
# yarn lockfile v1
|
|
||||||
|
|
||||||
|
|
||||||
"@babel/runtime@^7.15.4":
|
|
||||||
version "7.21.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673"
|
|
||||||
integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==
|
|
||||||
dependencies:
|
|
||||||
regenerator-runtime "^0.13.11"
|
|
||||||
|
|
||||||
"@cspotcode/source-map-support@^0.8.0":
|
|
||||||
version "0.8.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
|
|
||||||
integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
|
|
||||||
dependencies:
|
|
||||||
"@jridgewell/trace-mapping" "0.3.9"
|
|
||||||
|
|
||||||
"@jridgewell/resolve-uri@^3.0.3":
|
|
||||||
version "3.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
|
|
||||||
integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
|
|
||||||
|
|
||||||
"@jridgewell/sourcemap-codec@^1.4.10":
|
|
||||||
version "1.4.15"
|
|
||||||
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
|
|
||||||
integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
|
|
||||||
|
|
||||||
"@jridgewell/trace-mapping@0.3.9":
|
|
||||||
version "0.3.9"
|
|
||||||
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
|
|
||||||
integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
|
|
||||||
dependencies:
|
|
||||||
"@jridgewell/resolve-uri" "^3.0.3"
|
|
||||||
"@jridgewell/sourcemap-codec" "^1.4.10"
|
|
||||||
|
|
||||||
"@lukehagar/plexjs@^0.0.15":
|
|
||||||
version "0.0.15"
|
|
||||||
resolved "https://registry.yarnpkg.com/@lukehagar/plexjs/-/plexjs-0.0.15.tgz#fa4bfc7b87b0fb79357ae0eb31e68eeed45de0db"
|
|
||||||
integrity sha512-reAJ+c5e7MDEZ6xy+zhNQOPEt+O20s/TYoD8wQXf5KjQCXpYas3isDQgSPxSa6PENJPSr32e30bruuXMXyzDmQ==
|
|
||||||
dependencies:
|
|
||||||
axios "^0.26.1"
|
|
||||||
axios-retry "^3.4.0"
|
|
||||||
|
|
||||||
"@tsconfig/node10@^1.0.7":
|
|
||||||
version "1.0.9"
|
|
||||||
resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
|
|
||||||
integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
|
|
||||||
|
|
||||||
"@tsconfig/node12@^1.0.7":
|
|
||||||
version "1.0.11"
|
|
||||||
resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
|
|
||||||
integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
|
|
||||||
|
|
||||||
"@tsconfig/node14@^1.0.0":
|
|
||||||
version "1.0.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
|
|
||||||
integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
|
|
||||||
|
|
||||||
"@tsconfig/node16@^1.0.2":
|
|
||||||
version "1.0.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e"
|
|
||||||
integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==
|
|
||||||
|
|
||||||
acorn-walk@^8.1.1:
|
|
||||||
version "8.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
|
|
||||||
integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
|
|
||||||
|
|
||||||
acorn@^8.4.1:
|
|
||||||
version "8.8.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
|
|
||||||
integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
|
|
||||||
|
|
||||||
arg@^4.1.0:
|
|
||||||
version "4.1.3"
|
|
||||||
resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
|
|
||||||
integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
|
|
||||||
|
|
||||||
axios-retry@^3.4.0:
|
|
||||||
version "3.4.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/axios-retry/-/axios-retry-3.4.0.tgz#f464dbe9408e5aa78fa319afd38bb69b533d8854"
|
|
||||||
integrity sha512-VdgaP+gHH4iQYCCNUWF2pcqeciVOdGrBBAYUfTY+wPcO5Ltvp/37MLFNCmJKo7Gj3SHvCSdL8ouI1qLYJN3liA==
|
|
||||||
dependencies:
|
|
||||||
"@babel/runtime" "^7.15.4"
|
|
||||||
is-retry-allowed "^2.2.0"
|
|
||||||
|
|
||||||
axios@^0.26.1:
|
|
||||||
version "0.26.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.26.1.tgz#1ede41c51fcf51bbbd6fd43669caaa4f0495aaa9"
|
|
||||||
integrity sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==
|
|
||||||
dependencies:
|
|
||||||
follow-redirects "^1.14.8"
|
|
||||||
|
|
||||||
create-require@^1.1.0:
|
|
||||||
version "1.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
|
|
||||||
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
|
|
||||||
|
|
||||||
diff@^4.0.1:
|
|
||||||
version "4.0.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
|
|
||||||
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
|
|
||||||
|
|
||||||
follow-redirects@^1.14.8:
|
|
||||||
version "1.15.2"
|
|
||||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
|
|
||||||
integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
|
|
||||||
|
|
||||||
is-retry-allowed@^2.2.0:
|
|
||||||
version "2.2.0"
|
|
||||||
resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz#88f34cbd236e043e71b6932d09b0c65fb7b4d71d"
|
|
||||||
integrity sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==
|
|
||||||
|
|
||||||
make-error@^1.1.1:
|
|
||||||
version "1.3.6"
|
|
||||||
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
|
|
||||||
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
|
|
||||||
|
|
||||||
regenerator-runtime@^0.13.11:
|
|
||||||
version "0.13.11"
|
|
||||||
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
|
|
||||||
integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
|
|
||||||
|
|
||||||
ts-node@^10.9.1:
|
|
||||||
version "10.9.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
|
|
||||||
integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
|
|
||||||
dependencies:
|
|
||||||
"@cspotcode/source-map-support" "^0.8.0"
|
|
||||||
"@tsconfig/node10" "^1.0.7"
|
|
||||||
"@tsconfig/node12" "^1.0.7"
|
|
||||||
"@tsconfig/node14" "^1.0.0"
|
|
||||||
"@tsconfig/node16" "^1.0.2"
|
|
||||||
acorn "^8.4.1"
|
|
||||||
acorn-walk "^8.1.1"
|
|
||||||
arg "^4.1.0"
|
|
||||||
create-require "^1.1.0"
|
|
||||||
diff "^4.0.1"
|
|
||||||
make-error "^1.1.1"
|
|
||||||
v8-compile-cache-lib "^3.0.1"
|
|
||||||
yn "3.1.1"
|
|
||||||
|
|
||||||
typescript@^5.0.4:
|
|
||||||
version "5.0.4"
|
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.0.4.tgz#b217fd20119bd61a94d4011274e0ab369058da3b"
|
|
||||||
integrity sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==
|
|
||||||
|
|
||||||
v8-compile-cache-lib@^3.0.1:
|
|
||||||
version "3.0.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
|
|
||||||
integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
|
|
||||||
|
|
||||||
yn@3.1.1:
|
|
||||||
version "3.1.1"
|
|
||||||
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
|
|
||||||
integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
|
|
||||||
4212
examples/yarn.lock
4212
examples/yarn.lock
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
|||||||
## plexjs@0.0.18
|
## plexjs@0.0.22
|
||||||
|
|
||||||
This generator creates TypeScript/JavaScript client that utilizes [axios](https://github.com/axios/axios). The generated Node module can be used in the following environments:
|
This generator creates TypeScript/JavaScript client that utilizes [axios](https://github.com/axios/axios). The generated Node module can be used in the following environments:
|
||||||
|
|
||||||
@@ -36,7 +36,7 @@ navigate to the folder of your consuming project and run one of the following co
|
|||||||
_published:_
|
_published:_
|
||||||
|
|
||||||
```
|
```
|
||||||
npm install plexjs@0.0.18 --save
|
npm install plexjs@0.0.22 --save
|
||||||
```
|
```
|
||||||
|
|
||||||
_unPublished (not recommended):_
|
_unPublished (not recommended):_
|
||||||
|
|||||||
@@ -14,14 +14,83 @@
|
|||||||
|
|
||||||
import { IAxiosRetryConfig } from "axios-retry";
|
import { IAxiosRetryConfig } from "axios-retry";
|
||||||
|
|
||||||
export interface ConfigurationParameters {
|
export type ConfigurationParameters = {
|
||||||
|
plexToken?: string;
|
||||||
apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);
|
clientIdentifier?: string;
|
||||||
|
device?: string;
|
||||||
|
deviceName?: string;
|
||||||
|
platform?: string;
|
||||||
|
platformVersion?: string;
|
||||||
|
product?: string;
|
||||||
|
version?: string;
|
||||||
basePath?: string;
|
basePath?: string;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Configuration {
|
export class Configuration {
|
||||||
|
/**
|
||||||
|
* Plex Media Server or Plex.TV Authentication token
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
plexToken?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UUID, serial number, or other number unique per device
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
clientIdentifier?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Device name and model number, eg iPhone3,2, Motorola XOOM™, LG5200TV
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
device?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Customized Device Name
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
deviceName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Platform name, eg iOS, MacOSX, Android, LG, etc
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
platform?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operating system version, eg 4.3.1, 10.6.7, 3.2
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
platformVersion?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plex application name, eg Laika, Plex Media Server, Media Link
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
product?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plex application version number
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
version?: string;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* parameter for apiKey security
|
* parameter for apiKey security
|
||||||
* @param name security name
|
* @param name security name
|
||||||
@@ -63,10 +132,42 @@ export class Configuration {
|
|||||||
retriesConfig?: IAxiosRetryConfig
|
retriesConfig?: IAxiosRetryConfig
|
||||||
|
|
||||||
constructor(param: ConfigurationParameters = {}) {
|
constructor(param: ConfigurationParameters = {}) {
|
||||||
|
this.plexToken = param.plexToken || "";
|
||||||
|
this.clientIdentifier = param.clientIdentifier || "plexjs";
|
||||||
|
this.device = param.device || "plexjs";
|
||||||
|
this.deviceName = param.deviceName || "plexjs";
|
||||||
|
this.platform = param.platform || "plexjs";
|
||||||
|
this.platformVersion = param.platformVersion || "0.0.22";
|
||||||
|
this.product = param.product || "plexjs";
|
||||||
|
this.version = param.version || "0.0.22";
|
||||||
|
|
||||||
this.apiKey = param.apiKey;
|
this.apiKey = (header: string) => {
|
||||||
|
switch (header) {
|
||||||
|
case "X-Plex-Token":
|
||||||
|
return this.plexToken
|
||||||
|
case "X-Plex-Client-Identifier":
|
||||||
|
return this.clientIdentifier
|
||||||
|
case "X-Plex-Device-Name":
|
||||||
|
return this.deviceName
|
||||||
|
case "X-Plex-Device":
|
||||||
|
return this.device
|
||||||
|
case "X-Plex-Platform-Version":
|
||||||
|
return this.platformVersion
|
||||||
|
case "X-Plex-Platform":
|
||||||
|
return this.platform
|
||||||
|
case "X-Plex-Product":
|
||||||
|
return this.product
|
||||||
|
case "X-Plex-Version":
|
||||||
|
return this.version
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
this.basePath = param.basePath;
|
this.basePath = param.basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public setAuthToken(token: string) {
|
||||||
|
this.plexToken = token
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -12,7 +12,6 @@
|
|||||||
* Do not edit the class manually.
|
* Do not edit the class manually.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
export * from "./plextv/api";
|
||||||
export * from "./api";
|
export * from "./pms/api";
|
||||||
export {Configuration, ConfigurationParameters} from "./configuration";
|
export { Configuration, ConfigurationParameters } from "./configuration";
|
||||||
|
|
||||||
|
|||||||
4
plexjs/package-lock.json
generated
4
plexjs/package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@lukehagar/plexjs",
|
"name": "@lukehagar/plexjs",
|
||||||
"version": "0.0.18",
|
"version": "0.0.25",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@lukehagar/plexjs",
|
"name": "@lukehagar/plexjs",
|
||||||
"version": "0.0.18",
|
"version": "0.0.25",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"axios": "^0.26.1",
|
"axios": "^0.26.1",
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "@lukehagar/plexjs",
|
"name": "@lukehagar/plexjs",
|
||||||
"version": "0.0.18",
|
"version": "0.0.25",
|
||||||
"description": "Community Made Plex JS/TS Module",
|
"description": "Community Made Plex JS/TS Module",
|
||||||
"author": "Luke Hagar",
|
"author": "Luke Hagar",
|
||||||
"type": "module",
|
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/LukeHagar/plexjs.git"
|
"url": "https://github.com/LukeHagar/plexjs.git"
|
||||||
|
|||||||
23
plexjs/plextv/.openapi-generator-ignore
Normal file
23
plexjs/plextv/.openapi-generator-ignore
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# OpenAPI Generator Ignore
|
||||||
|
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
|
||||||
|
|
||||||
|
# Use this file to prevent files from being overwritten by the generator.
|
||||||
|
# The patterns follow closely to .gitignore or .dockerignore.
|
||||||
|
|
||||||
|
# As an example, the C# client generator defines ApiClient.cs.
|
||||||
|
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
|
||||||
|
#ApiClient.cs
|
||||||
|
|
||||||
|
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
|
||||||
|
#foo/*/qux
|
||||||
|
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
|
||||||
|
|
||||||
|
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
|
||||||
|
#foo/**/qux
|
||||||
|
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
|
||||||
|
|
||||||
|
# You can also negate patterns with an exclamation (!).
|
||||||
|
# For example, you can ignore all files in a docs folder with the file extension .md:
|
||||||
|
#docs/*.md
|
||||||
|
# Then explicitly reverse the ignore rule for a single file:
|
||||||
|
#!docs/README.md
|
||||||
12
plexjs/plextv/.openapi-generator/FILES
Normal file
12
plexjs/plextv/.openapi-generator/FILES
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
.gitignore
|
||||||
|
.npmignore
|
||||||
|
.openapi-generator-ignore
|
||||||
|
README.md
|
||||||
|
api.ts
|
||||||
|
base.ts
|
||||||
|
common.ts
|
||||||
|
configuration.ts
|
||||||
|
git_push.sh
|
||||||
|
index.ts
|
||||||
|
package.json
|
||||||
|
tsconfig.json
|
||||||
1
plexjs/plextv/.openapi-generator/VERSION
Normal file
1
plexjs/plextv/.openapi-generator/VERSION
Normal file
@@ -0,0 +1 @@
|
|||||||
|
6.3.0
|
||||||
45
plexjs/plextv/README.md
Normal file
45
plexjs/plextv/README.md
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
## plexjs@0.0.25
|
||||||
|
|
||||||
|
This generator creates TypeScript/JavaScript client that utilizes [axios](https://github.com/axios/axios). The generated Node module can be used in the following environments:
|
||||||
|
|
||||||
|
Environment
|
||||||
|
* Node.js
|
||||||
|
* Webpack
|
||||||
|
* Browserify
|
||||||
|
|
||||||
|
Language level
|
||||||
|
* ES5 - you must have a Promises/A+ library installed
|
||||||
|
* ES6
|
||||||
|
|
||||||
|
Module system
|
||||||
|
* CommonJS
|
||||||
|
* ES6 module system
|
||||||
|
|
||||||
|
It can be used in both TypeScript and JavaScript. In TypeScript, the definition should be automatically resolved via `package.json`. ([Reference](http://www.typescriptlang.org/docs/handbook/typings-for-npm-packages.html))
|
||||||
|
|
||||||
|
### Building
|
||||||
|
|
||||||
|
To build and compile the typescript sources to javascript use:
|
||||||
|
```
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Publishing
|
||||||
|
|
||||||
|
First build the package then run ```npm publish```
|
||||||
|
|
||||||
|
### Consuming
|
||||||
|
|
||||||
|
navigate to the folder of your consuming project and run one of the following commands.
|
||||||
|
|
||||||
|
_published:_
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install plexjs@0.0.25 --save
|
||||||
|
```
|
||||||
|
|
||||||
|
_unPublished (not recommended):_
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install PATH_TO_GENERATED_PACKAGE --save
|
||||||
1127
plexjs/plextv/api.ts
Normal file
1127
plexjs/plextv/api.ts
Normal file
File diff suppressed because it is too large
Load Diff
71
plexjs/plextv/base.ts
Normal file
71
plexjs/plextv/base.ts
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
/**
|
||||||
|
* Plex-API
|
||||||
|
* An Open API Spec for interacting with Plex.tv
|
||||||
|
*
|
||||||
|
* The version of the OpenAPI document: 0.0.3
|
||||||
|
* Contact: Lukeslakemail@gmail.com
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
* https://openapi-generator.tech
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import { Configuration } from "./configuration";
|
||||||
|
// Some imports not used depending on template conditions
|
||||||
|
// @ts-ignore
|
||||||
|
import globalAxios, { AxiosPromise, AxiosInstance, AxiosRequestConfig } from 'axios';
|
||||||
|
|
||||||
|
export const BASE_PATH = "https://plex.tv/api/v2".replace(/\/+$/, "");
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const COLLECTION_FORMATS = {
|
||||||
|
csv: ",",
|
||||||
|
ssv: " ",
|
||||||
|
tsv: "\t",
|
||||||
|
pipes: "|",
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
* @interface RequestArgs
|
||||||
|
*/
|
||||||
|
export interface RequestArgs {
|
||||||
|
url: string;
|
||||||
|
axiosOptions: AxiosRequestConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
* @class BaseAPI
|
||||||
|
*/
|
||||||
|
export class BaseAPI {
|
||||||
|
protected configuration: Configuration | undefined;
|
||||||
|
|
||||||
|
constructor(configuration?: Configuration, protected basePath: string = BASE_PATH, protected axios: AxiosInstance = globalAxios) {
|
||||||
|
if (configuration) {
|
||||||
|
this.configuration = configuration;
|
||||||
|
this.basePath = configuration.basePath || this.basePath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
* @class RequiredError
|
||||||
|
* @extends {Error}
|
||||||
|
*/
|
||||||
|
export class RequiredError extends Error {
|
||||||
|
name: "RequiredError" = "RequiredError";
|
||||||
|
constructor(public field: string, msg?: string) {
|
||||||
|
super(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
105
plexjs/plextv/common.ts
Normal file
105
plexjs/plextv/common.ts
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
/**
|
||||||
|
* Plex-API
|
||||||
|
* An Open API Spec for interacting with Plex.tv
|
||||||
|
*
|
||||||
|
* The version of the OpenAPI document: 0.0.3
|
||||||
|
* Contact: Lukeslakemail@gmail.com
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
* https://openapi-generator.tech
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
import { Configuration } from "./configuration";
|
||||||
|
import { RequiredError, RequestArgs } from "./base";
|
||||||
|
import { AxiosInstance, AxiosResponse } from 'axios';
|
||||||
|
import axiosRetry from "axios-retry";
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const DUMMY_BASE_URL = 'https://example.com'
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @throws {RequiredError}
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const assertParamExists = function (functionName: string, paramName: string, paramValue: unknown) {
|
||||||
|
if (paramValue === null || paramValue === undefined) {
|
||||||
|
throw new RequiredError(paramName, `Required parameter ${paramName} was null or undefined when calling ${functionName}.`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const setApiKeyToObject = async function (object: any, keyParamName: string, configuration?: Configuration) {
|
||||||
|
if (configuration && configuration.apiKey) {
|
||||||
|
const localVarApiKeyValue = typeof configuration.apiKey === 'function'
|
||||||
|
? await configuration.apiKey(keyParamName)
|
||||||
|
: await configuration.apiKey;
|
||||||
|
object[keyParamName] = localVarApiKeyValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const setSearchParams = function (url: URL, ...objects: any[]) {
|
||||||
|
const searchParams = new URLSearchParams(url.search);
|
||||||
|
for (const object of objects) {
|
||||||
|
for (const key in object) {
|
||||||
|
if (Array.isArray(object[key])) {
|
||||||
|
searchParams.delete(key);
|
||||||
|
for (const item of object[key]) {
|
||||||
|
searchParams.append(key, item);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
searchParams.set(key, object[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
url.search = searchParams.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) {
|
||||||
|
const nonString = typeof value !== 'string';
|
||||||
|
const needsSerialization = nonString && configuration && configuration.isJsonMime
|
||||||
|
? configuration.isJsonMime(requestOptions.headers['Content-Type'])
|
||||||
|
: nonString;
|
||||||
|
return needsSerialization
|
||||||
|
? JSON.stringify(value !== undefined ? value : {})
|
||||||
|
: (value || "");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const toPathString = function (url: URL) {
|
||||||
|
return url.pathname + url.search + url.hash
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const createRequestFunction = function (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) {
|
||||||
|
return <T = unknown, R = AxiosResponse<T>>(axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
|
||||||
|
axiosRetry(globalAxios, configuration.retriesConfig)
|
||||||
|
const axiosRequestArgs = {...axiosArgs.axiosOptions, url: (configuration?.basePath || basePath) + axiosArgs.url};
|
||||||
|
return axios.request<T, R>(axiosRequestArgs);
|
||||||
|
};
|
||||||
|
}
|
||||||
187
plexjs/plextv/configuration.ts
Normal file
187
plexjs/plextv/configuration.ts
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
/**
|
||||||
|
* Plex-API
|
||||||
|
* An Open API Spec for interacting with Plex.tv
|
||||||
|
*
|
||||||
|
* The version of the OpenAPI document: 0.0.3
|
||||||
|
* Contact: Lukeslakemail@gmail.com
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
* https://openapi-generator.tech
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { IAxiosRetryConfig } from "axios-retry";
|
||||||
|
|
||||||
|
export type ConfigurationParameters = {
|
||||||
|
plexToken?: string;
|
||||||
|
clientIdentifier?: string;
|
||||||
|
device?: string;
|
||||||
|
deviceName?: string;
|
||||||
|
platform?: string;
|
||||||
|
platformVersion?: string;
|
||||||
|
product?: string;
|
||||||
|
version?: string;
|
||||||
|
basePath?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Configuration {
|
||||||
|
/**
|
||||||
|
* Plex Media Server or Plex.TV Authentication token
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
plexToken?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UUID, serial number, or other number unique per device
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
clientIdentifier?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Device name and model number, eg iPhone3,2, Motorola XOOM™, LG5200TV
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
device?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Customized Device Name
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
deviceName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Platform name, eg iOS, MacOSX, Android, LG, etc
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
platform?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operating system version, eg 4.3.1, 10.6.7, 3.2
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
platformVersion?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plex application name, eg Laika, Plex Media Server, Media Link
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
product?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plex application version number
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
version?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parameter for apiKey security
|
||||||
|
* @param name security name
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* override base path
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
basePath?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* base options for axios calls
|
||||||
|
*
|
||||||
|
* @type {any}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
baseOptions?: any;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The FormData constructor that will be used to create multipart form data
|
||||||
|
* requests. You can inject this here so that execution environments that
|
||||||
|
* do not support the FormData class can still run the generated client.
|
||||||
|
*
|
||||||
|
* @type {new () => FormData}
|
||||||
|
*/
|
||||||
|
formDataCtor?: new () => any;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* axios retry configuration
|
||||||
|
*
|
||||||
|
* @type {IAxiosRetryConfig}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
retriesConfig?: IAxiosRetryConfig
|
||||||
|
|
||||||
|
constructor(param: ConfigurationParameters = {}) {
|
||||||
|
this.plexToken = param.plexToken || "";
|
||||||
|
this.clientIdentifier = param.clientIdentifier || "plexjs";
|
||||||
|
this.device = param.device || "plexjs";
|
||||||
|
this.deviceName = param.deviceName || "plexjs";
|
||||||
|
this.platform = param.platform || "plexjs";
|
||||||
|
this.platformVersion = param.platformVersion || "0.0.25";
|
||||||
|
this.product = param.product || "plexjs";
|
||||||
|
this.version = param.version || "0.0.25";
|
||||||
|
|
||||||
|
this.apiKey = (header: string) => {
|
||||||
|
switch (header) {
|
||||||
|
case "X-Plex-Token":
|
||||||
|
return this.plexToken
|
||||||
|
case "X-Plex-Client-Identifier":
|
||||||
|
return this.clientIdentifier
|
||||||
|
case "X-Plex-Device-Name":
|
||||||
|
return this.deviceName
|
||||||
|
case "X-Plex-Device":
|
||||||
|
return this.device
|
||||||
|
case "X-Plex-Platform-Version":
|
||||||
|
return this.platformVersion
|
||||||
|
case "X-Plex-Platform":
|
||||||
|
return this.platform
|
||||||
|
case "X-Plex-Product":
|
||||||
|
return this.product
|
||||||
|
case "X-Plex-Version":
|
||||||
|
return this.version
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.basePath = param.basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public setAuthToken(token: string) {
|
||||||
|
this.plexToken = token
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the given MIME is a JSON MIME.
|
||||||
|
* JSON MIME examples:
|
||||||
|
* application/json
|
||||||
|
* application/json; charset=UTF8
|
||||||
|
* APPLICATION/JSON
|
||||||
|
* application/vnd.company+json
|
||||||
|
* @param mime - MIME (Multipurpose Internet Mail Extensions)
|
||||||
|
* @return True if the given MIME is JSON, false otherwise.
|
||||||
|
*/
|
||||||
|
public isJsonMime(mime: string): boolean {
|
||||||
|
const jsonMime: RegExp = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
|
||||||
|
return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
|
||||||
|
}
|
||||||
|
}
|
||||||
57
plexjs/plextv/git_push.sh
Normal file
57
plexjs/plextv/git_push.sh
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
|
||||||
|
#
|
||||||
|
# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com"
|
||||||
|
|
||||||
|
git_user_id=$1
|
||||||
|
git_repo_id=$2
|
||||||
|
release_note=$3
|
||||||
|
git_host=$4
|
||||||
|
|
||||||
|
if [ "$git_host" = "" ]; then
|
||||||
|
git_host="github.com"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_host to $git_host"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$git_user_id" = "" ]; then
|
||||||
|
git_user_id="GIT_USER_ID"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$git_repo_id" = "" ]; then
|
||||||
|
git_repo_id="GIT_REPO_ID"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$release_note" = "" ]; then
|
||||||
|
release_note="Minor update"
|
||||||
|
echo "[INFO] No command line input provided. Set \$release_note to $release_note"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Initialize the local directory as a Git repository
|
||||||
|
git init
|
||||||
|
|
||||||
|
# Adds the files in the local repository and stages them for commit.
|
||||||
|
git add .
|
||||||
|
|
||||||
|
# Commits the tracked changes and prepares them to be pushed to a remote repository.
|
||||||
|
git commit -m "$release_note"
|
||||||
|
|
||||||
|
# Sets the new remote
|
||||||
|
git_remote=$(git remote)
|
||||||
|
if [ "$git_remote" = "" ]; then # git remote not defined
|
||||||
|
|
||||||
|
if [ "$GIT_TOKEN" = "" ]; then
|
||||||
|
echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
|
||||||
|
git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
|
||||||
|
else
|
||||||
|
git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
git pull origin master
|
||||||
|
|
||||||
|
# Pushes (Forces) the changes in the local repository up to the remote repository
|
||||||
|
echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
|
||||||
|
git push origin master 2>&1 | grep -v 'To https'
|
||||||
18
plexjs/plextv/index.ts
Normal file
18
plexjs/plextv/index.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
/**
|
||||||
|
* Plex-API
|
||||||
|
* An Open API Spec for interacting with Plex.tv
|
||||||
|
*
|
||||||
|
* The version of the OpenAPI document: 0.0.3
|
||||||
|
* Contact: Lukeslakemail@gmail.com
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
* https://openapi-generator.tech
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
export * from "./api";
|
||||||
|
export {Configuration, ConfigurationParameters} from "./configuration";
|
||||||
|
|
||||||
38
plexjs/plextv/package.json
Normal file
38
plexjs/plextv/package.json
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"name": "@lukehagar/plexjs",
|
||||||
|
"version": "0.0.25",
|
||||||
|
"description": "Community Made Plex JS/TS Module",
|
||||||
|
"author": "Luke Hagar",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/LukeHagar/plexjs.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"axios",
|
||||||
|
"typescript",
|
||||||
|
"openapi",
|
||||||
|
"api",
|
||||||
|
"plex",
|
||||||
|
"plex media server",
|
||||||
|
"pms",
|
||||||
|
"plexjs"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/LukeHagar/plexjs/issues"
|
||||||
|
},
|
||||||
|
"main": "./dist/index.js",
|
||||||
|
"typings": "./dist/index.d.ts",
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc --outDir ./dist",
|
||||||
|
"prepare": "npm run build"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^0.26.1",
|
||||||
|
"axios-retry": "^3.4.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^12.11.5",
|
||||||
|
"typescript": "^4.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
23
plexjs/plextv/tsconfig.json
Normal file
23
plexjs/plextv/tsconfig.json
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"declaration": true,
|
||||||
|
"target": "ES5",
|
||||||
|
"module": "CommonJS",
|
||||||
|
"noImplicitAny": true,
|
||||||
|
"outDir": "dist",
|
||||||
|
"rootDir": ".",
|
||||||
|
"lib": [
|
||||||
|
"es6",
|
||||||
|
"dom"
|
||||||
|
],
|
||||||
|
"typeRoots": [
|
||||||
|
"node_modules/@types"
|
||||||
|
],
|
||||||
|
"sourceMap": true
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"dist",
|
||||||
|
"node_modules",
|
||||||
|
"./dist/**/*"
|
||||||
|
]
|
||||||
|
}
|
||||||
4
plexjs/pms/.gitignore
vendored
Normal file
4
plexjs/pms/.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
wwwroot/*.js
|
||||||
|
node_modules
|
||||||
|
typings
|
||||||
|
dist
|
||||||
1
plexjs/pms/.npmignore
Normal file
1
plexjs/pms/.npmignore
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# empty npmignore to ensure all required files (e.g., in the dist folder) are published by npm
|
||||||
23
plexjs/pms/.openapi-generator-ignore
Normal file
23
plexjs/pms/.openapi-generator-ignore
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# OpenAPI Generator Ignore
|
||||||
|
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
|
||||||
|
|
||||||
|
# Use this file to prevent files from being overwritten by the generator.
|
||||||
|
# The patterns follow closely to .gitignore or .dockerignore.
|
||||||
|
|
||||||
|
# As an example, the C# client generator defines ApiClient.cs.
|
||||||
|
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
|
||||||
|
#ApiClient.cs
|
||||||
|
|
||||||
|
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
|
||||||
|
#foo/*/qux
|
||||||
|
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
|
||||||
|
|
||||||
|
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
|
||||||
|
#foo/**/qux
|
||||||
|
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
|
||||||
|
|
||||||
|
# You can also negate patterns with an exclamation (!).
|
||||||
|
# For example, you can ignore all files in a docs folder with the file extension .md:
|
||||||
|
#docs/*.md
|
||||||
|
# Then explicitly reverse the ignore rule for a single file:
|
||||||
|
#!docs/README.md
|
||||||
12
plexjs/pms/.openapi-generator/FILES
Normal file
12
plexjs/pms/.openapi-generator/FILES
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
.gitignore
|
||||||
|
.npmignore
|
||||||
|
.openapi-generator-ignore
|
||||||
|
README.md
|
||||||
|
api.ts
|
||||||
|
base.ts
|
||||||
|
common.ts
|
||||||
|
configuration.ts
|
||||||
|
git_push.sh
|
||||||
|
index.ts
|
||||||
|
package.json
|
||||||
|
tsconfig.json
|
||||||
1
plexjs/pms/.openapi-generator/VERSION
Normal file
1
plexjs/pms/.openapi-generator/VERSION
Normal file
@@ -0,0 +1 @@
|
|||||||
|
6.3.0
|
||||||
45
plexjs/pms/README.md
Normal file
45
plexjs/pms/README.md
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
## plexjs@0.0.25
|
||||||
|
|
||||||
|
This generator creates TypeScript/JavaScript client that utilizes [axios](https://github.com/axios/axios). The generated Node module can be used in the following environments:
|
||||||
|
|
||||||
|
Environment
|
||||||
|
* Node.js
|
||||||
|
* Webpack
|
||||||
|
* Browserify
|
||||||
|
|
||||||
|
Language level
|
||||||
|
* ES5 - you must have a Promises/A+ library installed
|
||||||
|
* ES6
|
||||||
|
|
||||||
|
Module system
|
||||||
|
* CommonJS
|
||||||
|
* ES6 module system
|
||||||
|
|
||||||
|
It can be used in both TypeScript and JavaScript. In TypeScript, the definition should be automatically resolved via `package.json`. ([Reference](http://www.typescriptlang.org/docs/handbook/typings-for-npm-packages.html))
|
||||||
|
|
||||||
|
### Building
|
||||||
|
|
||||||
|
To build and compile the typescript sources to javascript use:
|
||||||
|
```
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Publishing
|
||||||
|
|
||||||
|
First build the package then run ```npm publish```
|
||||||
|
|
||||||
|
### Consuming
|
||||||
|
|
||||||
|
navigate to the folder of your consuming project and run one of the following commands.
|
||||||
|
|
||||||
|
_published:_
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install plexjs@0.0.25 --save
|
||||||
|
```
|
||||||
|
|
||||||
|
_unPublished (not recommended):_
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install PATH_TO_GENERATED_PACKAGE --save
|
||||||
File diff suppressed because it is too large
Load Diff
187
plexjs/pms/configuration.ts
Normal file
187
plexjs/pms/configuration.ts
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
/**
|
||||||
|
* Plex-API
|
||||||
|
* An Open API Spec for interacting with Plex.tv and Plex Servers
|
||||||
|
*
|
||||||
|
* The version of the OpenAPI document: 0.0.3
|
||||||
|
* Contact: Lukeslakemail@gmail.com
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
* https://openapi-generator.tech
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { IAxiosRetryConfig } from "axios-retry";
|
||||||
|
|
||||||
|
export type ConfigurationParameters = {
|
||||||
|
plexToken?: string;
|
||||||
|
clientIdentifier?: string;
|
||||||
|
device?: string;
|
||||||
|
deviceName?: string;
|
||||||
|
platform?: string;
|
||||||
|
platformVersion?: string;
|
||||||
|
product?: string;
|
||||||
|
version?: string;
|
||||||
|
basePath?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Configuration {
|
||||||
|
/**
|
||||||
|
* Plex Media Server or Plex.TV Authentication token
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
plexToken?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UUID, serial number, or other number unique per device
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
clientIdentifier?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Device name and model number, eg iPhone3,2, Motorola XOOM™, LG5200TV
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
device?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Customized Device Name
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
deviceName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Platform name, eg iOS, MacOSX, Android, LG, etc
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
platform?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operating system version, eg 4.3.1, 10.6.7, 3.2
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
platformVersion?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plex application name, eg Laika, Plex Media Server, Media Link
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
product?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plex application version number
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
version?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parameter for apiKey security
|
||||||
|
* @param name security name
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* override base path
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
basePath?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* base options for axios calls
|
||||||
|
*
|
||||||
|
* @type {any}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
baseOptions?: any;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The FormData constructor that will be used to create multipart form data
|
||||||
|
* requests. You can inject this here so that execution environments that
|
||||||
|
* do not support the FormData class can still run the generated client.
|
||||||
|
*
|
||||||
|
* @type {new () => FormData}
|
||||||
|
*/
|
||||||
|
formDataCtor?: new () => any;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* axios retry configuration
|
||||||
|
*
|
||||||
|
* @type {IAxiosRetryConfig}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
retriesConfig?: IAxiosRetryConfig
|
||||||
|
|
||||||
|
constructor(param: ConfigurationParameters = {}) {
|
||||||
|
this.plexToken = param.plexToken || "";
|
||||||
|
this.clientIdentifier = param.clientIdentifier || "plexjs";
|
||||||
|
this.device = param.device || "plexjs";
|
||||||
|
this.deviceName = param.deviceName || "plexjs";
|
||||||
|
this.platform = param.platform || "plexjs";
|
||||||
|
this.platformVersion = param.platformVersion || "0.0.25";
|
||||||
|
this.product = param.product || "plexjs";
|
||||||
|
this.version = param.version || "0.0.25";
|
||||||
|
|
||||||
|
this.apiKey = (header: string) => {
|
||||||
|
switch (header) {
|
||||||
|
case "X-Plex-Token":
|
||||||
|
return this.plexToken
|
||||||
|
case "X-Plex-Client-Identifier":
|
||||||
|
return this.clientIdentifier
|
||||||
|
case "X-Plex-Device-Name":
|
||||||
|
return this.deviceName
|
||||||
|
case "X-Plex-Device":
|
||||||
|
return this.device
|
||||||
|
case "X-Plex-Platform-Version":
|
||||||
|
return this.platformVersion
|
||||||
|
case "X-Plex-Platform":
|
||||||
|
return this.platform
|
||||||
|
case "X-Plex-Product":
|
||||||
|
return this.product
|
||||||
|
case "X-Plex-Version":
|
||||||
|
return this.version
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.basePath = param.basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public setAuthToken(token: string) {
|
||||||
|
this.plexToken = token
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the given MIME is a JSON MIME.
|
||||||
|
* JSON MIME examples:
|
||||||
|
* application/json
|
||||||
|
* application/json; charset=UTF8
|
||||||
|
* APPLICATION/JSON
|
||||||
|
* application/vnd.company+json
|
||||||
|
* @param mime - MIME (Multipurpose Internet Mail Extensions)
|
||||||
|
* @return True if the given MIME is JSON, false otherwise.
|
||||||
|
*/
|
||||||
|
public isJsonMime(mime: string): boolean {
|
||||||
|
const jsonMime: RegExp = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
|
||||||
|
return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
|
||||||
|
}
|
||||||
|
}
|
||||||
57
plexjs/pms/git_push.sh
Normal file
57
plexjs/pms/git_push.sh
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
|
||||||
|
#
|
||||||
|
# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com"
|
||||||
|
|
||||||
|
git_user_id=$1
|
||||||
|
git_repo_id=$2
|
||||||
|
release_note=$3
|
||||||
|
git_host=$4
|
||||||
|
|
||||||
|
if [ "$git_host" = "" ]; then
|
||||||
|
git_host="github.com"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_host to $git_host"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$git_user_id" = "" ]; then
|
||||||
|
git_user_id="GIT_USER_ID"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$git_repo_id" = "" ]; then
|
||||||
|
git_repo_id="GIT_REPO_ID"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$release_note" = "" ]; then
|
||||||
|
release_note="Minor update"
|
||||||
|
echo "[INFO] No command line input provided. Set \$release_note to $release_note"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Initialize the local directory as a Git repository
|
||||||
|
git init
|
||||||
|
|
||||||
|
# Adds the files in the local repository and stages them for commit.
|
||||||
|
git add .
|
||||||
|
|
||||||
|
# Commits the tracked changes and prepares them to be pushed to a remote repository.
|
||||||
|
git commit -m "$release_note"
|
||||||
|
|
||||||
|
# Sets the new remote
|
||||||
|
git_remote=$(git remote)
|
||||||
|
if [ "$git_remote" = "" ]; then # git remote not defined
|
||||||
|
|
||||||
|
if [ "$GIT_TOKEN" = "" ]; then
|
||||||
|
echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
|
||||||
|
git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
|
||||||
|
else
|
||||||
|
git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
git pull origin master
|
||||||
|
|
||||||
|
# Pushes (Forces) the changes in the local repository up to the remote repository
|
||||||
|
echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
|
||||||
|
git push origin master 2>&1 | grep -v 'To https'
|
||||||
18
plexjs/pms/index.ts
Normal file
18
plexjs/pms/index.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
/**
|
||||||
|
* Plex-API
|
||||||
|
* An Open API Spec for interacting with Plex.tv and Plex Servers
|
||||||
|
*
|
||||||
|
* The version of the OpenAPI document: 0.0.3
|
||||||
|
* Contact: Lukeslakemail@gmail.com
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
* https://openapi-generator.tech
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
export * from "./api";
|
||||||
|
export {Configuration, ConfigurationParameters} from "./configuration";
|
||||||
|
|
||||||
38
plexjs/pms/package.json
Normal file
38
plexjs/pms/package.json
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"name": "@lukehagar/plexjs",
|
||||||
|
"version": "0.0.25",
|
||||||
|
"description": "Community Made Plex JS/TS Module",
|
||||||
|
"author": "Luke Hagar",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/LukeHagar/plexjs.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"axios",
|
||||||
|
"typescript",
|
||||||
|
"openapi",
|
||||||
|
"api",
|
||||||
|
"plex",
|
||||||
|
"plex media server",
|
||||||
|
"pms",
|
||||||
|
"plexjs"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/LukeHagar/plexjs/issues"
|
||||||
|
},
|
||||||
|
"main": "./dist/index.js",
|
||||||
|
"typings": "./dist/index.d.ts",
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc --outDir ./dist",
|
||||||
|
"prepare": "npm run build"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^0.26.1",
|
||||||
|
"axios-retry": "^3.4.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^12.11.5",
|
||||||
|
"typescript": "^4.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
23
plexjs/pms/tsconfig.json
Normal file
23
plexjs/pms/tsconfig.json
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"declaration": true,
|
||||||
|
"target": "ES5",
|
||||||
|
"module": "CommonJS",
|
||||||
|
"noImplicitAny": true,
|
||||||
|
"outDir": "dist",
|
||||||
|
"rootDir": ".",
|
||||||
|
"lib": [
|
||||||
|
"es6",
|
||||||
|
"dom"
|
||||||
|
],
|
||||||
|
"typeRoots": [
|
||||||
|
"node_modules/@types"
|
||||||
|
],
|
||||||
|
"sourceMap": true
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"dist",
|
||||||
|
"node_modules",
|
||||||
|
"./dist/**/*"
|
||||||
|
]
|
||||||
|
}
|
||||||
36
readme.md
36
readme.md
@@ -2,10 +2,42 @@
|
|||||||
|
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
A typescript sdk for accessing the Plex.tv and Plex Media Server REST API's.
|
A typescript sdk for interacting with Plex.tv and Plex Media Server REST API's.
|
||||||
|
|
||||||
|
Documentation for all of the available endpoints [can be found here](https://plexapi.dev/docs/plex)
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
npm
|
||||||
```bash
|
```bash
|
||||||
npm install plexjs
|
npm install @lukehagar/plexjs
|
||||||
|
```
|
||||||
|
|
||||||
|
yarn
|
||||||
|
```bash
|
||||||
|
yarn add @lukehagar/plexjs
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
import {
|
||||||
|
Configuration,
|
||||||
|
ServerApi,
|
||||||
|
DevicesApi,
|
||||||
|
UserApi,
|
||||||
|
} from "@lukehagar/plexjs";
|
||||||
|
import dotenv from "dotenv";
|
||||||
|
dotenv.config();
|
||||||
|
|
||||||
|
const config = new Configuration({
|
||||||
|
basePath: process.env.BASE_PATH,
|
||||||
|
plexToken: process.env.PLEX_TOKEN,
|
||||||
|
});
|
||||||
|
|
||||||
|
new ServerApi(config).getServerCapabilities().then((resp) => console.log(resp));
|
||||||
|
|
||||||
|
new DevicesApi(config).getDevices().then((resp) => console.log(resp));
|
||||||
|
|
||||||
|
new UserApi(config).getUserDetails().then((resp) => console.log(resp));
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -1,75 +0,0 @@
|
|||||||
/* tslint:disable */
|
|
||||||
/* eslint-disable */
|
|
||||||
{{>licenseInfo}}
|
|
||||||
import { IAxiosRetryConfig } from "axios-retry";
|
|
||||||
|
|
||||||
export interface ConfigurationParameters {
|
|
||||||
|
|
||||||
apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);
|
|
||||||
basePath?: string;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
export class Configuration {
|
|
||||||
/**
|
|
||||||
* parameter for apiKey security
|
|
||||||
* @param name security name
|
|
||||||
* @memberof Configuration
|
|
||||||
*/
|
|
||||||
apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* override base path
|
|
||||||
*
|
|
||||||
* @type {string}
|
|
||||||
* @memberof Configuration
|
|
||||||
*/
|
|
||||||
basePath?: string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* base options for axios calls
|
|
||||||
*
|
|
||||||
* @type {any}
|
|
||||||
* @memberof Configuration
|
|
||||||
*/
|
|
||||||
baseOptions?: any;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The FormData constructor that will be used to create multipart form data
|
|
||||||
* requests. You can inject this here so that execution environments that
|
|
||||||
* do not support the FormData class can still run the generated client.
|
|
||||||
*
|
|
||||||
* @type {new () => FormData}
|
|
||||||
*/
|
|
||||||
formDataCtor?: new () => any;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* axios retry configuration
|
|
||||||
*
|
|
||||||
* @type {IAxiosRetryConfig}
|
|
||||||
* @memberof Configuration
|
|
||||||
*/
|
|
||||||
retriesConfig?: IAxiosRetryConfig
|
|
||||||
|
|
||||||
constructor(param: ConfigurationParameters = {}) {
|
|
||||||
|
|
||||||
this.apiKey = param.apiKey;
|
|
||||||
this.basePath = param.basePath;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Check if the given MIME is a JSON MIME.
|
|
||||||
* JSON MIME examples:
|
|
||||||
* application/json
|
|
||||||
* application/json; charset=UTF8
|
|
||||||
* APPLICATION/JSON
|
|
||||||
* application/vnd.company+json
|
|
||||||
* @param mime - MIME (Multipurpose Internet Mail Extensions)
|
|
||||||
* @return True if the given MIME is JSON, false otherwise.
|
|
||||||
*/
|
|
||||||
public isJsonMime(mime: string): boolean {
|
|
||||||
const jsonMime: RegExp = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
|
|
||||||
return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
176
sdk-resources/plexjs-resources/configuration.mustache
Normal file
176
sdk-resources/plexjs-resources/configuration.mustache
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
{{>licenseInfo}}
|
||||||
|
import { IAxiosRetryConfig } from "axios-retry";
|
||||||
|
|
||||||
|
export type ConfigurationParameters = {
|
||||||
|
plexToken?: string;
|
||||||
|
clientIdentifier?: string;
|
||||||
|
device?: string;
|
||||||
|
deviceName?: string;
|
||||||
|
platform?: string;
|
||||||
|
platformVersion?: string;
|
||||||
|
product?: string;
|
||||||
|
version?: string;
|
||||||
|
basePath?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Configuration {
|
||||||
|
/**
|
||||||
|
* Plex Media Server or Plex.TV Authentication token
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
plexToken?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UUID, serial number, or other number unique per device
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
clientIdentifier?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Device name and model number, eg iPhone3,2, Motorola XOOM™, LG5200TV
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
device?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Customized Device Name
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
deviceName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Platform name, eg iOS, MacOSX, Android, LG, etc
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
platform?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operating system version, eg 4.3.1, 10.6.7, 3.2
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
platformVersion?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plex application name, eg Laika, Plex Media Server, Media Link
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
product?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plex application version number
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
version?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parameter for apiKey security
|
||||||
|
* @param name security name
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* override base path
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
basePath?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* base options for axios calls
|
||||||
|
*
|
||||||
|
* @type {any}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
baseOptions?: any;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The FormData constructor that will be used to create multipart form data
|
||||||
|
* requests. You can inject this here so that execution environments that
|
||||||
|
* do not support the FormData class can still run the generated client.
|
||||||
|
*
|
||||||
|
* @type {new () => FormData}
|
||||||
|
*/
|
||||||
|
formDataCtor?: new () => any;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* axios retry configuration
|
||||||
|
*
|
||||||
|
* @type {IAxiosRetryConfig}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
retriesConfig?: IAxiosRetryConfig
|
||||||
|
|
||||||
|
constructor(param: ConfigurationParameters = {}) {
|
||||||
|
this.plexToken = param.plexToken || "";
|
||||||
|
this.clientIdentifier = param.clientIdentifier || "{{npmName}}";
|
||||||
|
this.device = param.device || "{{npmName}}";
|
||||||
|
this.deviceName = param.deviceName || "{{npmName}}";
|
||||||
|
this.platform = param.platform || "{{npmName}}";
|
||||||
|
this.platformVersion = param.platformVersion || "{{npmVersion}}";
|
||||||
|
this.product = param.product || "{{npmName}}";
|
||||||
|
this.version = param.version || "{{npmVersion}}";
|
||||||
|
|
||||||
|
this.apiKey = (header: string) => {
|
||||||
|
switch (header) {
|
||||||
|
case "X-Plex-Token":
|
||||||
|
return this.plexToken
|
||||||
|
case "X-Plex-Client-Identifier":
|
||||||
|
return this.clientIdentifier
|
||||||
|
case "X-Plex-Device-Name":
|
||||||
|
return this.deviceName
|
||||||
|
case "X-Plex-Device":
|
||||||
|
return this.device
|
||||||
|
case "X-Plex-Platform-Version":
|
||||||
|
return this.platformVersion
|
||||||
|
case "X-Plex-Platform":
|
||||||
|
return this.platform
|
||||||
|
case "X-Plex-Product":
|
||||||
|
return this.product
|
||||||
|
case "X-Plex-Version":
|
||||||
|
return this.version
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.basePath = param.basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public setAuthToken(token: string) {
|
||||||
|
this.plexToken = token
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the given MIME is a JSON MIME.
|
||||||
|
* JSON MIME examples:
|
||||||
|
* application/json
|
||||||
|
* application/json; charset=UTF8
|
||||||
|
* APPLICATION/JSON
|
||||||
|
* application/vnd.company+json
|
||||||
|
* @param mime - MIME (Multipurpose Internet Mail Extensions)
|
||||||
|
* @return True if the given MIME is JSON, false otherwise.
|
||||||
|
*/
|
||||||
|
public isJsonMime(mime: string): boolean {
|
||||||
|
const jsonMime: RegExp = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
|
||||||
|
return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
|
||||||
|
}
|
||||||
|
}
|
||||||
4
sdk-resources/plexjs-resources/gitignore
Normal file
4
sdk-resources/plexjs-resources/gitignore
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
wwwroot/*.js
|
||||||
|
node_modules
|
||||||
|
typings
|
||||||
|
dist
|
||||||
1
sdk-resources/plexjs-resources/npmignore
Normal file
1
sdk-resources/plexjs-resources/npmignore
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# empty npmignore to ensure all required files (e.g., in the dist folder) are published by npm
|
||||||
@@ -3,7 +3,6 @@
|
|||||||
"version": "{{npmVersion}}",
|
"version": "{{npmVersion}}",
|
||||||
"description": "Community Made Plex JS/TS Module",
|
"description": "Community Made Plex JS/TS Module",
|
||||||
"author": "Luke Hagar",
|
"author": "Luke Hagar",
|
||||||
"type": "module",
|
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/LukeHagar/plexjs.git"
|
"url": "https://github.com/LukeHagar/plexjs.git"
|
||||||
@@ -1,11 +1,11 @@
|
|||||||
templateDir: ./sdk-resources
|
templateDir: ./sdk-resources/plextv-resources
|
||||||
files:
|
files:
|
||||||
package.mustache:
|
package.mustache:
|
||||||
templateType: SupportingFiles
|
templateType: SupportingFiles
|
||||||
destinationFilename: package.json
|
destinationFilename: package.json
|
||||||
npmName: plexjs
|
npmName: plexjs
|
||||||
npmRepository: lukehagar
|
npmRepository: lukehagar
|
||||||
npmVersion: 0.0.18
|
npmVersion: 0.0.25
|
||||||
useSingleRequestParameter: true
|
useSingleRequestParameter: true
|
||||||
sortParamsByRequiredFlag: true
|
sortParamsByRequiredFlag: true
|
||||||
gitUserID: lukehagar
|
gitUserID: lukehagar
|
||||||
45
sdk-resources/plextv-resources/README.mustache
Normal file
45
sdk-resources/plextv-resources/README.mustache
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
## {{npmName}}@{{npmVersion}}
|
||||||
|
|
||||||
|
This generator creates TypeScript/JavaScript client that utilizes [axios](https://github.com/axios/axios). The generated Node module can be used in the following environments:
|
||||||
|
|
||||||
|
Environment
|
||||||
|
* Node.js
|
||||||
|
* Webpack
|
||||||
|
* Browserify
|
||||||
|
|
||||||
|
Language level
|
||||||
|
* ES5 - you must have a Promises/A+ library installed
|
||||||
|
* ES6
|
||||||
|
|
||||||
|
Module system
|
||||||
|
* CommonJS
|
||||||
|
* ES6 module system
|
||||||
|
|
||||||
|
It can be used in both TypeScript and JavaScript. In TypeScript, the definition should be automatically resolved via `package.json`. ([Reference](http://www.typescriptlang.org/docs/handbook/typings-for-npm-packages.html))
|
||||||
|
|
||||||
|
### Building
|
||||||
|
|
||||||
|
To build and compile the typescript sources to javascript use:
|
||||||
|
```
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
### Publishing
|
||||||
|
|
||||||
|
First build the package then run ```npm publish```
|
||||||
|
|
||||||
|
### Consuming
|
||||||
|
|
||||||
|
navigate to the folder of your consuming project and run one of the following commands.
|
||||||
|
|
||||||
|
_published:_
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install {{npmName}}@{{npmVersion}} --save
|
||||||
|
```
|
||||||
|
|
||||||
|
_unPublished (not recommended):_
|
||||||
|
|
||||||
|
```
|
||||||
|
npm install PATH_TO_GENERATED_PACKAGE --save
|
||||||
31
sdk-resources/plextv-resources/api.mustache
Normal file
31
sdk-resources/plextv-resources/api.mustache
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
{{>licenseInfo}}
|
||||||
|
|
||||||
|
{{^withSeparateModelsAndApi}}
|
||||||
|
import { Configuration } from './configuration';
|
||||||
|
import globalAxios, { AxiosPromise, AxiosInstance, AxiosRequestConfig } from 'axios';
|
||||||
|
{{#withNodeImports}}
|
||||||
|
// URLSearchParams not necessarily used
|
||||||
|
// @ts-ignore
|
||||||
|
import { URL, URLSearchParams } from 'url';
|
||||||
|
{{#multipartFormData}}
|
||||||
|
import FormData from 'form-data'
|
||||||
|
{{/multipartFormData}}
|
||||||
|
{{/withNodeImports}}
|
||||||
|
// Some imports not used depending on template conditions
|
||||||
|
// @ts-ignore
|
||||||
|
import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from './common';
|
||||||
|
// @ts-ignore
|
||||||
|
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from './base';
|
||||||
|
|
||||||
|
{{#models}}
|
||||||
|
{{#model}}{{#isEnum}}{{>modelEnum}}{{/isEnum}}{{#oneOf}}{{#-first}}{{>modelOneOf}}{{/-first}}{{/oneOf}}{{^isEnum}}{{^oneOf}}{{>modelGeneric}}{{/oneOf}}{{/isEnum}}{{/model}}
|
||||||
|
{{/models}}
|
||||||
|
{{#apiInfo}}{{#apis}}
|
||||||
|
{{>apiInner}}
|
||||||
|
{{/apis}}{{/apiInfo}}
|
||||||
|
{{/withSeparateModelsAndApi}}{{#withSeparateModelsAndApi}}
|
||||||
|
{{#apiInfo}}{{#apis}}{{#operations}}export * from './{{tsApiPackage}}/{{classFilename}}';
|
||||||
|
{{/operations}}{{/apis}}{{/apiInfo}}
|
||||||
|
{{/withSeparateModelsAndApi}}
|
||||||
371
sdk-resources/plextv-resources/apiInner.mustache
Normal file
371
sdk-resources/plextv-resources/apiInner.mustache
Normal file
@@ -0,0 +1,371 @@
|
|||||||
|
{{#withSeparateModelsAndApi}}
|
||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
{{>licenseInfo}}
|
||||||
|
|
||||||
|
import globalAxios, { AxiosPromise, AxiosInstance, AxiosRequestConfig } from 'axios';
|
||||||
|
import { Configuration } from '{{apiRelativeToRoot}}configuration';
|
||||||
|
{{#withNodeImports}}
|
||||||
|
// URLSearchParams not necessarily used
|
||||||
|
// @ts-ignore
|
||||||
|
import { URL, URLSearchParams } from 'url';
|
||||||
|
{{#multipartFormData}}
|
||||||
|
import FormData from 'form-data'
|
||||||
|
{{/multipartFormData}}
|
||||||
|
{{/withNodeImports}}
|
||||||
|
// Some imports not used depending on template conditions
|
||||||
|
// @ts-ignore
|
||||||
|
import { DUMMY_BASE_URL, assertParamExists, setApiKeyToObject, setBasicAuthToObject, setBearerAuthToObject, setOAuthToObject, setSearchParams, serializeDataIfNeeded, toPathString, createRequestFunction } from '{{apiRelativeToRoot}}common';
|
||||||
|
// @ts-ignore
|
||||||
|
import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '{{apiRelativeToRoot}}base';
|
||||||
|
{{#imports}}
|
||||||
|
// @ts-ignore
|
||||||
|
import { {{classname}} } from '{{apiRelativeToRoot}}{{tsModelPackage}}';
|
||||||
|
{{/imports}}
|
||||||
|
{{/withSeparateModelsAndApi}}
|
||||||
|
{{^withSeparateModelsAndApi}}
|
||||||
|
{{/withSeparateModelsAndApi}}
|
||||||
|
{{#operations}}
|
||||||
|
/**
|
||||||
|
* {{classname}} - axios parameter creator{{#description}}
|
||||||
|
* {{&description}}{{/description}}
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const {{classname}}AxiosParamCreator = function (configuration?: Configuration) {
|
||||||
|
return {
|
||||||
|
{{#operation}}
|
||||||
|
/**
|
||||||
|
* {{¬es}}
|
||||||
|
{{#summary}}
|
||||||
|
* @summary {{&summary}}
|
||||||
|
{{/summary}}
|
||||||
|
{{#allParams}}
|
||||||
|
* @param {{=<% %>=}}{<%&dataType%>}<%={{ }}=%> {{^required}}[{{/required}}{{paramName}}{{^required}}]{{/required}} {{description}}
|
||||||
|
{{/allParams}}
|
||||||
|
* @param {*} [axiosOptions] Override http request option.{{#isDeprecated}}
|
||||||
|
* @deprecated{{/isDeprecated}}
|
||||||
|
* @throws {RequiredError}
|
||||||
|
*/
|
||||||
|
{{nickname}}: async ({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}axiosOptions: AxiosRequestConfig = {}): Promise<RequestArgs> => {
|
||||||
|
{{#allParams}}
|
||||||
|
{{#required}}
|
||||||
|
// verify required parameter '{{paramName}}' is not null or undefined
|
||||||
|
assertParamExists('{{nickname}}', '{{paramName}}', {{paramName}})
|
||||||
|
{{/required}}
|
||||||
|
{{/allParams}}
|
||||||
|
const localVarPath = `{{{path}}}`{{#pathParams}}
|
||||||
|
.replace(`{${"{{baseName}}"}}`, encodeURIComponent(String({{paramName}}))){{/pathParams}};
|
||||||
|
// use dummy base URL string because the URL constructor only accepts absolute URLs.
|
||||||
|
const localVarUrlObj = new URL(localVarPath, DUMMY_BASE_URL);
|
||||||
|
let baseOptions;
|
||||||
|
if (configuration) {
|
||||||
|
baseOptions = configuration.baseOptions;
|
||||||
|
}
|
||||||
|
|
||||||
|
const localVarRequestOptions = { method: '{{httpMethod}}', ...baseOptions, ...axiosOptions};
|
||||||
|
const localVarHeaderParameter = {} as any;
|
||||||
|
const localVarQueryParameter = {} as any;{{#vendorExtensions}}{{#hasFormParams}}
|
||||||
|
const localVarFormParams = new {{^multipartFormData}}URLSearchParams(){{/multipartFormData}}{{#multipartFormData}}((configuration && configuration.formDataCtor) || FormData)(){{/multipartFormData}};{{/hasFormParams}}{{/vendorExtensions}}
|
||||||
|
|
||||||
|
{{#authMethods}}
|
||||||
|
// authentication {{name}} required
|
||||||
|
{{#isApiKey}}
|
||||||
|
{{#isKeyInHeader}}
|
||||||
|
await setApiKeyToObject(localVarHeaderParameter, "{{keyParamName}}", configuration)
|
||||||
|
{{/isKeyInHeader}}
|
||||||
|
{{#isKeyInQuery}}
|
||||||
|
await setApiKeyToObject(localVarQueryParameter, "{{keyParamName}}", configuration)
|
||||||
|
{{/isKeyInQuery}}
|
||||||
|
{{/isApiKey}}
|
||||||
|
{{#isBasicBasic}}
|
||||||
|
// http basic authentication required
|
||||||
|
setBasicAuthToObject(localVarRequestOptions, configuration)
|
||||||
|
{{/isBasicBasic}}
|
||||||
|
{{#isBasicBearer}}
|
||||||
|
// http bearer authentication required
|
||||||
|
await setBearerAuthToObject(localVarHeaderParameter, configuration)
|
||||||
|
{{/isBasicBearer}}
|
||||||
|
{{#isOAuth}}
|
||||||
|
// oauth required
|
||||||
|
await setOAuthToObject(localVarHeaderParameter, "{{name}}", [{{#scopes}}"{{{scope}}}"{{^-last}}, {{/-last}}{{/scopes}}], configuration)
|
||||||
|
{{/isOAuth}}
|
||||||
|
|
||||||
|
{{/authMethods}}
|
||||||
|
{{#queryParams}}
|
||||||
|
{{#isArray}}
|
||||||
|
if ({{paramName}}) {
|
||||||
|
{{#isCollectionFormatMulti}}
|
||||||
|
{{#uniqueItems}}
|
||||||
|
localVarQueryParameter['{{baseName}}'] = Array.from({{paramName}});
|
||||||
|
{{/uniqueItems}}
|
||||||
|
{{^uniqueItems}}
|
||||||
|
localVarQueryParameter['{{baseName}}'] = {{paramName}};
|
||||||
|
{{/uniqueItems}}
|
||||||
|
{{/isCollectionFormatMulti}}
|
||||||
|
{{^isCollectionFormatMulti}}
|
||||||
|
{{#uniqueItems}}
|
||||||
|
localVarQueryParameter['{{baseName}}'] = Array.from({{paramName}}).join(COLLECTION_FORMATS.{{collectionFormat}});
|
||||||
|
{{/uniqueItems}}
|
||||||
|
{{^uniqueItems}}
|
||||||
|
localVarQueryParameter['{{baseName}}'] = {{paramName}}.join(COLLECTION_FORMATS.{{collectionFormat}});
|
||||||
|
{{/uniqueItems}}
|
||||||
|
{{/isCollectionFormatMulti}}
|
||||||
|
}
|
||||||
|
{{/isArray}}
|
||||||
|
{{^isArray}}
|
||||||
|
if ({{paramName}} !== undefined) {
|
||||||
|
{{#isDateTime}}
|
||||||
|
localVarQueryParameter['{{baseName}}'] = ({{paramName}} as any instanceof Date) ?
|
||||||
|
({{paramName}} as any).toISOString() :
|
||||||
|
{{paramName}};
|
||||||
|
{{/isDateTime}}
|
||||||
|
{{^isDateTime}}
|
||||||
|
{{#isDate}}
|
||||||
|
localVarQueryParameter['{{baseName}}'] = ({{paramName}} as any instanceof Date) ?
|
||||||
|
({{paramName}} as any).toISOString().substr(0,10) :
|
||||||
|
{{paramName}};
|
||||||
|
{{/isDate}}
|
||||||
|
{{^isDate}}
|
||||||
|
localVarQueryParameter['{{baseName}}'] = {{paramName}};
|
||||||
|
{{/isDate}}
|
||||||
|
{{/isDateTime}}
|
||||||
|
}
|
||||||
|
{{/isArray}}
|
||||||
|
|
||||||
|
{{/queryParams}}
|
||||||
|
{{#headerParams}}
|
||||||
|
{{#isArray}}
|
||||||
|
if ({{paramName}}) {
|
||||||
|
{{#uniqueItems}}
|
||||||
|
let mapped = Array.from({{paramName}}).map(value => (<any>"{{{dataType}}}" !== "Set<string>") ? JSON.stringify(value) : (value || ""));
|
||||||
|
{{/uniqueItems}}
|
||||||
|
{{^uniqueItems}}
|
||||||
|
let mapped = {{paramName}}.map(value => (<any>"{{{dataType}}}" !== "Array<string>") ? JSON.stringify(value) : (value || ""));
|
||||||
|
{{/uniqueItems}}
|
||||||
|
localVarHeaderParameter['{{baseName}}'] = mapped.join(COLLECTION_FORMATS["{{collectionFormat}}"]);
|
||||||
|
}
|
||||||
|
{{/isArray}}
|
||||||
|
{{^isArray}}
|
||||||
|
if ({{paramName}} !== undefined && {{paramName}} !== null) {
|
||||||
|
{{#isString}}
|
||||||
|
localVarHeaderParameter['{{baseName}}'] = String({{paramName}});
|
||||||
|
{{/isString}}
|
||||||
|
{{^isString}}
|
||||||
|
localVarHeaderParameter['{{baseName}}'] = String(JSON.stringify({{paramName}}));
|
||||||
|
{{/isString}}
|
||||||
|
}
|
||||||
|
{{/isArray}}
|
||||||
|
|
||||||
|
{{/headerParams}}
|
||||||
|
{{#vendorExtensions}}
|
||||||
|
{{#formParams}}
|
||||||
|
{{#isArray}}
|
||||||
|
if ({{paramName}}) {
|
||||||
|
{{#isCollectionFormatMulti}}
|
||||||
|
{{paramName}}.forEach((element) => {
|
||||||
|
localVarFormParams.{{#multipartFormData}}append{{/multipartFormData}}{{^multipartFormData}}set{{/multipartFormData}}('{{baseName}}', element as any);
|
||||||
|
})
|
||||||
|
{{/isCollectionFormatMulti}}
|
||||||
|
{{^isCollectionFormatMulti}}
|
||||||
|
localVarFormParams.{{#multipartFormData}}append{{/multipartFormData}}{{^multipartFormData}}set{{/multipartFormData}}('{{baseName}}', {{paramName}}.join(COLLECTION_FORMATS.{{collectionFormat}}));
|
||||||
|
{{/isCollectionFormatMulti}}
|
||||||
|
}{{/isArray}}
|
||||||
|
{{^isArray}}
|
||||||
|
if ({{paramName}} !== undefined) { {{^multipartFormData}}
|
||||||
|
localVarFormParams.set('{{baseName}}', {{paramName}} as any);{{/multipartFormData}}{{#multipartFormData}}{{#isPrimitiveType}}
|
||||||
|
localVarFormParams.append('{{baseName}}', {{paramName}} as any);{{/isPrimitiveType}}{{^isPrimitiveType}}
|
||||||
|
localVarFormParams.append('{{baseName}}', new Blob([JSON.stringify({{paramName}})], { type: "application/json", }));{{/isPrimitiveType}}{{/multipartFormData}}
|
||||||
|
}{{/isArray}}
|
||||||
|
{{/formParams}}{{/vendorExtensions}}
|
||||||
|
{{#vendorExtensions}}{{#hasFormParams}}{{^multipartFormData}}
|
||||||
|
localVarHeaderParameter['Content-Type'] = 'application/x-www-form-urlencoded';{{/multipartFormData}}{{#multipartFormData}}
|
||||||
|
localVarHeaderParameter['Content-Type'] = 'multipart/form-data';{{/multipartFormData}}
|
||||||
|
{{/hasFormParams}}{{/vendorExtensions}}
|
||||||
|
{{#bodyParam}}
|
||||||
|
{{^consumes}}
|
||||||
|
localVarHeaderParameter['Content-Type'] = 'application/json';
|
||||||
|
{{/consumes}}
|
||||||
|
{{#consumes.0}}
|
||||||
|
localVarHeaderParameter['Content-Type'] = '{{{mediaType}}}';
|
||||||
|
{{/consumes.0}}
|
||||||
|
|
||||||
|
{{/bodyParam}}
|
||||||
|
setSearchParams(localVarUrlObj, localVarQueryParameter);
|
||||||
|
let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
|
||||||
|
localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions,{{#hasFormParams}}{{#multipartFormData}} ...(localVarFormParams as any).getHeaders?.(),{{/multipartFormData}}{{/hasFormParams}} ...axiosOptions.headers};
|
||||||
|
{{#hasFormParams}}
|
||||||
|
localVarRequestOptions.data = localVarFormParams{{#vendorExtensions}}{{^multipartFormData}}.toString(){{/multipartFormData}}{{/vendorExtensions}};
|
||||||
|
{{/hasFormParams}}
|
||||||
|
{{#bodyParam}}
|
||||||
|
localVarRequestOptions.data = serializeDataIfNeeded({{paramName}}, localVarRequestOptions, configuration)
|
||||||
|
{{/bodyParam}}
|
||||||
|
|
||||||
|
return {
|
||||||
|
url: toPathString(localVarUrlObj),
|
||||||
|
axiosOptions: localVarRequestOptions,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
{{/operation}}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {{classname}} - functional programming interface{{#description}}
|
||||||
|
* {{{.}}}{{/description}}
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const {{classname}}Fp = function(configuration?: Configuration) {
|
||||||
|
const localVarAxiosParamCreator = {{classname}}AxiosParamCreator(configuration)
|
||||||
|
return {
|
||||||
|
{{#operation}}
|
||||||
|
/**
|
||||||
|
* {{¬es}}
|
||||||
|
{{#summary}}
|
||||||
|
* @summary {{&summary}}
|
||||||
|
{{/summary}}
|
||||||
|
{{#allParams}}
|
||||||
|
* @param {{=<% %>=}}{<%&dataType%>}<%={{ }}=%> {{^required}}[{{/required}}{{paramName}}{{^required}}]{{/required}} {{description}}
|
||||||
|
{{/allParams}}
|
||||||
|
* @param {*} [axiosOptions] Override http request option.{{#isDeprecated}}
|
||||||
|
* @deprecated{{/isDeprecated}}
|
||||||
|
* @throws {RequiredError}
|
||||||
|
*/
|
||||||
|
async {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}axiosOptions?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<{{{returnType}}}{{^returnType}}void{{/returnType}}>> {
|
||||||
|
const localVarAxiosArgs = await localVarAxiosParamCreator.{{nickname}}({{#allParams}}{{paramName}}, {{/allParams}}axiosOptions);
|
||||||
|
return createRequestFunction(localVarAxiosArgs, globalAxios, BASE_PATH, configuration);
|
||||||
|
},
|
||||||
|
{{/operation}}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {{classname}} - factory interface{{#description}}
|
||||||
|
* {{&description}}{{/description}}
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const {{classname}}Factory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
|
||||||
|
const localVarFp = {{classname}}Fp(configuration)
|
||||||
|
return {
|
||||||
|
{{#operation}}
|
||||||
|
/**
|
||||||
|
* {{¬es}}
|
||||||
|
{{#summary}}
|
||||||
|
* @summary {{&summary}}
|
||||||
|
{{/summary}}
|
||||||
|
{{#allParams}}
|
||||||
|
* @param {{=<% %>=}}{<%&dataType%>}<%={{ }}=%> {{^required}}[{{/required}}{{paramName}}{{^required}}]{{/required}} {{description}}
|
||||||
|
{{/allParams}}
|
||||||
|
* @param {*} [axiosOptions] Override http request option.{{#isDeprecated}}
|
||||||
|
* @deprecated{{/isDeprecated}}
|
||||||
|
* @throws {RequiredError}
|
||||||
|
*/
|
||||||
|
{{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}axiosOptions?: any): AxiosPromise<{{{returnType}}}{{^returnType}}void{{/returnType}}> {
|
||||||
|
return localVarFp.{{nickname}}({{#allParams}}{{paramName}}, {{/allParams}}axiosOptions).then((request) => request(axios, basePath));
|
||||||
|
},
|
||||||
|
{{/operation}}
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
{{#withInterfaces}}
|
||||||
|
/**
|
||||||
|
* {{classname}} - interface{{#description}}
|
||||||
|
* {{&description}}{{/description}}
|
||||||
|
* @export
|
||||||
|
* @interface {{classname}}
|
||||||
|
*/
|
||||||
|
export interface {{classname}}Interface {
|
||||||
|
{{#operation}}
|
||||||
|
/**
|
||||||
|
* {{¬es}}
|
||||||
|
{{#summary}}
|
||||||
|
* @summary {{&summary}}
|
||||||
|
{{/summary}}
|
||||||
|
{{#allParams}}
|
||||||
|
* @param {{=<% %>=}}{<%&dataType%>}<%={{ }}=%> {{^required}}[{{/required}}{{paramName}}{{^required}}]{{/required}} {{description}}
|
||||||
|
{{/allParams}}
|
||||||
|
* @param {*} [axiosOptions] Override http request option.{{#isDeprecated}}
|
||||||
|
* @deprecated{{/isDeprecated}}
|
||||||
|
* @throws {RequiredError}
|
||||||
|
* @memberof {{classname}}Interface
|
||||||
|
*/
|
||||||
|
{{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}axiosOptions?: AxiosRequestConfig): AxiosPromise<{{{returnType}}}{{^returnType}}void{{/returnType}}>;
|
||||||
|
|
||||||
|
{{/operation}}
|
||||||
|
}
|
||||||
|
|
||||||
|
{{/withInterfaces}}
|
||||||
|
{{#useSingleRequestParameter}}
|
||||||
|
{{#operation}}
|
||||||
|
{{#allParams.0}}
|
||||||
|
/**
|
||||||
|
* Request parameters for {{nickname}} operation in {{classname}}.
|
||||||
|
* @export
|
||||||
|
* @interface {{classname}}{{operationIdCamelCase}}Request
|
||||||
|
*/
|
||||||
|
export interface {{classname}}{{operationIdCamelCase}}Request {
|
||||||
|
{{#allParams}}
|
||||||
|
/**
|
||||||
|
* {{description}}
|
||||||
|
* @type {{=<% %>=}}{<%&dataType%>}<%={{ }}=%>
|
||||||
|
* @memberof {{classname}}{{operationIdCamelCase}}
|
||||||
|
*/
|
||||||
|
readonly {{paramName}}{{^required}}?{{/required}}: {{{dataType}}}
|
||||||
|
{{^-last}}
|
||||||
|
|
||||||
|
{{/-last}}
|
||||||
|
{{/allParams}}
|
||||||
|
}
|
||||||
|
|
||||||
|
{{/allParams.0}}
|
||||||
|
{{/operation}}
|
||||||
|
{{/useSingleRequestParameter}}
|
||||||
|
/**
|
||||||
|
* {{classname}} - object-oriented interface{{#description}}
|
||||||
|
* {{{.}}}{{/description}}
|
||||||
|
* @export
|
||||||
|
* @class {{classname}}
|
||||||
|
* @extends {BaseAPI}
|
||||||
|
*/
|
||||||
|
{{#withInterfaces}}
|
||||||
|
export class {{classname}} extends BaseAPI implements {{classname}}Interface {
|
||||||
|
{{/withInterfaces}}
|
||||||
|
{{^withInterfaces}}
|
||||||
|
export class {{classname}} extends BaseAPI {
|
||||||
|
{{/withInterfaces}}
|
||||||
|
{{#operation}}
|
||||||
|
/**
|
||||||
|
* {{¬es}}
|
||||||
|
{{#summary}}
|
||||||
|
* @summary {{&summary}}
|
||||||
|
{{/summary}}
|
||||||
|
{{#useSingleRequestParameter}}
|
||||||
|
{{#allParams.0}}
|
||||||
|
* @param {{=<% %>=}}{<%& classname %><%& operationIdCamelCase %>Request}<%={{ }}=%> requestParameters Request parameters.
|
||||||
|
{{/allParams.0}}
|
||||||
|
{{/useSingleRequestParameter}}
|
||||||
|
{{^useSingleRequestParameter}}
|
||||||
|
{{#allParams}}
|
||||||
|
* @param {{=<% %>=}}{<%&dataType%>}<%={{ }}=%> {{^required}}[{{/required}}{{paramName}}{{^required}}]{{/required}} {{description}}
|
||||||
|
{{/allParams}}
|
||||||
|
{{/useSingleRequestParameter}}
|
||||||
|
* @param {*} [axiosOptions] Override http request option.{{#isDeprecated}}
|
||||||
|
* @deprecated{{/isDeprecated}}
|
||||||
|
* @throws {RequiredError}
|
||||||
|
* @memberof {{classname}}
|
||||||
|
*/
|
||||||
|
{{#useSingleRequestParameter}}
|
||||||
|
public {{nickname}}({{#allParams.0}}requestParameters: {{classname}}{{operationIdCamelCase}}Request{{^hasRequiredParams}} = {}{{/hasRequiredParams}}, {{/allParams.0}}axiosOptions?: AxiosRequestConfig) {
|
||||||
|
return {{classname}}Fp(this.configuration).{{nickname}}({{#allParams.0}}{{#allParams}}requestParameters.{{paramName}}, {{/allParams}}{{/allParams.0}}axiosOptions).then((request) => request(this.axios, this.basePath));
|
||||||
|
}
|
||||||
|
{{/useSingleRequestParameter}}
|
||||||
|
{{^useSingleRequestParameter}}
|
||||||
|
public {{nickname}}({{#allParams}}{{paramName}}{{^required}}?{{/required}}: {{{dataType}}}, {{/allParams}}axiosOptions?: AxiosRequestConfig) {
|
||||||
|
return {{classname}}Fp(this.configuration).{{nickname}}({{#allParams}}{{paramName}}, {{/allParams}}axiosOptions).then((request) => request(this.axios, this.basePath));
|
||||||
|
}
|
||||||
|
{{/useSingleRequestParameter}}
|
||||||
|
{{^-last}}
|
||||||
|
|
||||||
|
{{/-last}}
|
||||||
|
{{/operation}}
|
||||||
|
}
|
||||||
|
{{/operations}}
|
||||||
60
sdk-resources/plextv-resources/baseApi.mustache
Normal file
60
sdk-resources/plextv-resources/baseApi.mustache
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
{{>licenseInfo}}
|
||||||
|
|
||||||
|
import { Configuration } from "./configuration";
|
||||||
|
// Some imports not used depending on template conditions
|
||||||
|
// @ts-ignore
|
||||||
|
import globalAxios, { AxiosPromise, AxiosInstance, AxiosRequestConfig } from 'axios';
|
||||||
|
|
||||||
|
export const BASE_PATH = "{{{basePath}}}".replace(/\/+$/, "");
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const COLLECTION_FORMATS = {
|
||||||
|
csv: ",",
|
||||||
|
ssv: " ",
|
||||||
|
tsv: "\t",
|
||||||
|
pipes: "|",
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
* @interface RequestArgs
|
||||||
|
*/
|
||||||
|
export interface RequestArgs {
|
||||||
|
url: string;
|
||||||
|
axiosOptions: AxiosRequestConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
* @class BaseAPI
|
||||||
|
*/
|
||||||
|
export class BaseAPI {
|
||||||
|
protected configuration: Configuration | undefined;
|
||||||
|
|
||||||
|
constructor(configuration?: Configuration, protected basePath: string = BASE_PATH, protected axios: AxiosInstance = globalAxios) {
|
||||||
|
if (configuration) {
|
||||||
|
this.configuration = configuration;
|
||||||
|
this.basePath = configuration.basePath || this.basePath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
* @class RequiredError
|
||||||
|
* @extends {Error}
|
||||||
|
*/
|
||||||
|
export class RequiredError extends Error {
|
||||||
|
name: "RequiredError" = "RequiredError";
|
||||||
|
constructor(public field: string, msg?: string) {
|
||||||
|
super(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
97
sdk-resources/plextv-resources/common.mustache
Normal file
97
sdk-resources/plextv-resources/common.mustache
Normal file
@@ -0,0 +1,97 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
{{>licenseInfo}}
|
||||||
|
|
||||||
|
import { Configuration } from "./configuration";
|
||||||
|
import { RequiredError, RequestArgs } from "./base";
|
||||||
|
import { AxiosInstance, AxiosResponse } from 'axios';
|
||||||
|
import axiosRetry from "axios-retry";
|
||||||
|
{{#withNodeImports}}
|
||||||
|
import { URL, URLSearchParams } from 'url';
|
||||||
|
{{/withNodeImports}}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const DUMMY_BASE_URL = 'https://example.com'
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @throws {RequiredError}
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const assertParamExists = function (functionName: string, paramName: string, paramValue: unknown) {
|
||||||
|
if (paramValue === null || paramValue === undefined) {
|
||||||
|
throw new RequiredError(paramName, `Required parameter ${paramName} was null or undefined when calling ${functionName}.`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const setApiKeyToObject = async function (object: any, keyParamName: string, configuration?: Configuration) {
|
||||||
|
if (configuration && configuration.apiKey) {
|
||||||
|
const localVarApiKeyValue = typeof configuration.apiKey === 'function'
|
||||||
|
? await configuration.apiKey(keyParamName)
|
||||||
|
: await configuration.apiKey;
|
||||||
|
object[keyParamName] = localVarApiKeyValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const setSearchParams = function (url: URL, ...objects: any[]) {
|
||||||
|
const searchParams = new URLSearchParams(url.search);
|
||||||
|
for (const object of objects) {
|
||||||
|
for (const key in object) {
|
||||||
|
if (Array.isArray(object[key])) {
|
||||||
|
searchParams.delete(key);
|
||||||
|
for (const item of object[key]) {
|
||||||
|
searchParams.append(key, item);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
searchParams.set(key, object[key]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
url.search = searchParams.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const serializeDataIfNeeded = function (value: any, requestOptions: any, configuration?: Configuration) {
|
||||||
|
const nonString = typeof value !== 'string';
|
||||||
|
const needsSerialization = nonString && configuration && configuration.isJsonMime
|
||||||
|
? configuration.isJsonMime(requestOptions.headers['Content-Type'])
|
||||||
|
: nonString;
|
||||||
|
return needsSerialization
|
||||||
|
? JSON.stringify(value !== undefined ? value : {})
|
||||||
|
: (value || "");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const toPathString = function (url: URL) {
|
||||||
|
return url.pathname + url.search + url.hash
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export const createRequestFunction = function (axiosArgs: RequestArgs, globalAxios: AxiosInstance, BASE_PATH: string, configuration?: Configuration) {
|
||||||
|
return <T = unknown, R = AxiosResponse<T>>(axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
|
||||||
|
axiosRetry(globalAxios, configuration.retriesConfig)
|
||||||
|
const axiosRequestArgs = {...axiosArgs.axiosOptions, url: (configuration?.basePath || basePath) + axiosArgs.url};
|
||||||
|
return axios.request<T, R>(axiosRequestArgs);
|
||||||
|
};
|
||||||
|
}
|
||||||
176
sdk-resources/plextv-resources/configuration.mustache
Normal file
176
sdk-resources/plextv-resources/configuration.mustache
Normal file
@@ -0,0 +1,176 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
{{>licenseInfo}}
|
||||||
|
import { IAxiosRetryConfig } from "axios-retry";
|
||||||
|
|
||||||
|
export type ConfigurationParameters = {
|
||||||
|
plexToken?: string;
|
||||||
|
clientIdentifier?: string;
|
||||||
|
device?: string;
|
||||||
|
deviceName?: string;
|
||||||
|
platform?: string;
|
||||||
|
platformVersion?: string;
|
||||||
|
product?: string;
|
||||||
|
version?: string;
|
||||||
|
basePath?: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class Configuration {
|
||||||
|
/**
|
||||||
|
* Plex Media Server or Plex.TV Authentication token
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
plexToken?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UUID, serial number, or other number unique per device
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
clientIdentifier?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Device name and model number, eg iPhone3,2, Motorola XOOM™, LG5200TV
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
device?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Customized Device Name
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
deviceName?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Platform name, eg iOS, MacOSX, Android, LG, etc
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
platform?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Operating system version, eg 4.3.1, 10.6.7, 3.2
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
platformVersion?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plex application name, eg Laika, Plex Media Server, Media Link
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
product?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plex application version number
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
version?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* parameter for apiKey security
|
||||||
|
* @param name security name
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* override base path
|
||||||
|
*
|
||||||
|
* @type {string}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
basePath?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* base options for axios calls
|
||||||
|
*
|
||||||
|
* @type {any}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
baseOptions?: any;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The FormData constructor that will be used to create multipart form data
|
||||||
|
* requests. You can inject this here so that execution environments that
|
||||||
|
* do not support the FormData class can still run the generated client.
|
||||||
|
*
|
||||||
|
* @type {new () => FormData}
|
||||||
|
*/
|
||||||
|
formDataCtor?: new () => any;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* axios retry configuration
|
||||||
|
*
|
||||||
|
* @type {IAxiosRetryConfig}
|
||||||
|
* @memberof Configuration
|
||||||
|
*/
|
||||||
|
retriesConfig?: IAxiosRetryConfig
|
||||||
|
|
||||||
|
constructor(param: ConfigurationParameters = {}) {
|
||||||
|
this.plexToken = param.plexToken || "";
|
||||||
|
this.clientIdentifier = param.clientIdentifier || "{{npmName}}";
|
||||||
|
this.device = param.device || "{{npmName}}";
|
||||||
|
this.deviceName = param.deviceName || "{{npmName}}";
|
||||||
|
this.platform = param.platform || "{{npmName}}";
|
||||||
|
this.platformVersion = param.platformVersion || "{{npmVersion}}";
|
||||||
|
this.product = param.product || "{{npmName}}";
|
||||||
|
this.version = param.version || "{{npmVersion}}";
|
||||||
|
|
||||||
|
this.apiKey = (header: string) => {
|
||||||
|
switch (header) {
|
||||||
|
case "X-Plex-Token":
|
||||||
|
return this.plexToken
|
||||||
|
case "X-Plex-Client-Identifier":
|
||||||
|
return this.clientIdentifier
|
||||||
|
case "X-Plex-Device-Name":
|
||||||
|
return this.deviceName
|
||||||
|
case "X-Plex-Device":
|
||||||
|
return this.device
|
||||||
|
case "X-Plex-Platform-Version":
|
||||||
|
return this.platformVersion
|
||||||
|
case "X-Plex-Platform":
|
||||||
|
return this.platform
|
||||||
|
case "X-Plex-Product":
|
||||||
|
return this.product
|
||||||
|
case "X-Plex-Version":
|
||||||
|
return this.version
|
||||||
|
default:
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.basePath = param.basePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
public setAuthToken(token: string) {
|
||||||
|
this.plexToken = token
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if the given MIME is a JSON MIME.
|
||||||
|
* JSON MIME examples:
|
||||||
|
* application/json
|
||||||
|
* application/json; charset=UTF8
|
||||||
|
* APPLICATION/JSON
|
||||||
|
* application/vnd.company+json
|
||||||
|
* @param mime - MIME (Multipurpose Internet Mail Extensions)
|
||||||
|
* @return True if the given MIME is JSON, false otherwise.
|
||||||
|
*/
|
||||||
|
public isJsonMime(mime: string): boolean {
|
||||||
|
const jsonMime: RegExp = new RegExp('^(application\/json|[^;/ \t]+\/[^;/ \t]+[+]json)[ \t]*(;.*)?$', 'i');
|
||||||
|
return mime !== null && (jsonMime.test(mime) || mime.toLowerCase() === 'application/json-patch+json');
|
||||||
|
}
|
||||||
|
}
|
||||||
57
sdk-resources/plextv-resources/git_push.sh.mustache
Normal file
57
sdk-resources/plextv-resources/git_push.sh.mustache
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
|
||||||
|
#
|
||||||
|
# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com"
|
||||||
|
|
||||||
|
git_user_id=$1
|
||||||
|
git_repo_id=$2
|
||||||
|
release_note=$3
|
||||||
|
git_host=$4
|
||||||
|
|
||||||
|
if [ "$git_host" = "" ]; then
|
||||||
|
git_host="{{{gitHost}}}"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_host to $git_host"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$git_user_id" = "" ]; then
|
||||||
|
git_user_id="{{{gitUserId}}}"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$git_repo_id" = "" ]; then
|
||||||
|
git_repo_id="{{{gitRepoId}}}"
|
||||||
|
echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$release_note" = "" ]; then
|
||||||
|
release_note="{{{releaseNote}}}"
|
||||||
|
echo "[INFO] No command line input provided. Set \$release_note to $release_note"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Initialize the local directory as a Git repository
|
||||||
|
git init
|
||||||
|
|
||||||
|
# Adds the files in the local repository and stages them for commit.
|
||||||
|
git add .
|
||||||
|
|
||||||
|
# Commits the tracked changes and prepares them to be pushed to a remote repository.
|
||||||
|
git commit -m "$release_note"
|
||||||
|
|
||||||
|
# Sets the new remote
|
||||||
|
git_remote=$(git remote)
|
||||||
|
if [ "$git_remote" = "" ]; then # git remote not defined
|
||||||
|
|
||||||
|
if [ "$GIT_TOKEN" = "" ]; then
|
||||||
|
echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
|
||||||
|
git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
|
||||||
|
else
|
||||||
|
git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
|
||||||
|
fi
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
git pull origin master
|
||||||
|
|
||||||
|
# Pushes (Forces) the changes in the local repository up to the remote repository
|
||||||
|
echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
|
||||||
|
git push origin master 2>&1 | grep -v 'To https'
|
||||||
4
sdk-resources/plextv-resources/gitignore
Normal file
4
sdk-resources/plextv-resources/gitignore
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
wwwroot/*.js
|
||||||
|
node_modules
|
||||||
|
typings
|
||||||
|
dist
|
||||||
7
sdk-resources/plextv-resources/index.mustache
Normal file
7
sdk-resources/plextv-resources/index.mustache
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
{{>licenseInfo}}
|
||||||
|
|
||||||
|
export * from "./api";
|
||||||
|
export {Configuration, ConfigurationParameters} from "./configuration";
|
||||||
|
{{#withSeparateModelsAndApi}}export * from "./{{tsModelPackage}}";{{/withSeparateModelsAndApi}}
|
||||||
11
sdk-resources/plextv-resources/licenseInfo.mustache
Normal file
11
sdk-resources/plextv-resources/licenseInfo.mustache
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
/**
|
||||||
|
* {{{appName}}}
|
||||||
|
* {{{appDescription}}}
|
||||||
|
*
|
||||||
|
* {{#version}}The version of the OpenAPI document: {{{.}}}{{/version}}
|
||||||
|
* {{#infoEmail}}Contact: {{{.}}}{{/infoEmail}}
|
||||||
|
*
|
||||||
|
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
|
||||||
|
* https://openapi-generator.tech
|
||||||
|
* Do not edit the class manually.
|
||||||
|
*/
|
||||||
10
sdk-resources/plextv-resources/model.mustache
Normal file
10
sdk-resources/plextv-resources/model.mustache
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
/* tslint:disable */
|
||||||
|
/* eslint-disable */
|
||||||
|
{{>licenseInfo}}
|
||||||
|
{{#withSeparateModelsAndApi}}{{#hasAllOf}}{{#allOf}}
|
||||||
|
import { {{class}} } from './{{filename}}';{{/allOf}}{{/hasAllOf}}{{#hasOneOf}}{{#oneOf}}
|
||||||
|
import { {{class}} } from './{{filename}}';{{/oneOf}}{{/hasOneOf}}{{^hasAllOf}}{{^hasOneOf}}{{#imports}}
|
||||||
|
import { {{class}} } from './{{filename}}';{{/imports}}{{/hasOneOf}}{{/hasAllOf}}{{/withSeparateModelsAndApi}}
|
||||||
|
{{#models}}{{#model}}
|
||||||
|
{{#isEnum}}{{>modelEnum}}{{/isEnum}}{{#oneOf}}{{#-first}}{{>modelOneOf}}{{/-first}}{{/oneOf}}{{#allOf}}{{#-first}}{{>modelAllOf}}{{/-first}}{{/allOf}}{{^isEnum}}{{^oneOf}}{{^allOf}}{{>modelGeneric}}{{/allOf}}{{/oneOf}}{{/isEnum}}
|
||||||
|
{{/model}}{{/models}}
|
||||||
6
sdk-resources/plextv-resources/modelAllOf.mustache
Normal file
6
sdk-resources/plextv-resources/modelAllOf.mustache
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
/**
|
||||||
|
* @type {{classname}}{{#description}}
|
||||||
|
* {{{.}}}{{/description}}
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export type {{classname}} = {{#allOf}}{{{.}}}{{^-last}} & {{/-last}}{{/allOf}};
|
||||||
17
sdk-resources/plextv-resources/modelEnum.mustache
Normal file
17
sdk-resources/plextv-resources/modelEnum.mustache
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
/**
|
||||||
|
* {{{description}}}
|
||||||
|
* @export
|
||||||
|
* @enum {string}
|
||||||
|
*/
|
||||||
|
{{#isBoolean}}
|
||||||
|
export type {{classname}} = {{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}} | {{/-last}}{{/enumVars}}{{/allowableValues}}
|
||||||
|
{{/isBoolean}}
|
||||||
|
|
||||||
|
{{^isBoolean}}
|
||||||
|
{{^stringEnums}}
|
||||||
|
{{>modelObjectEnum}}
|
||||||
|
{{/stringEnums}}
|
||||||
|
{{#stringEnums}}
|
||||||
|
{{>modelStringEnum}}
|
||||||
|
{{/stringEnums}}
|
||||||
|
{{/isBoolean}}
|
||||||
62
sdk-resources/plextv-resources/modelGeneric.mustache
Normal file
62
sdk-resources/plextv-resources/modelGeneric.mustache
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
/**
|
||||||
|
* {{{description}}}
|
||||||
|
* @export
|
||||||
|
* @interface {{classname}}
|
||||||
|
*/
|
||||||
|
export interface {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{
|
||||||
|
{{#additionalPropertiesType}}
|
||||||
|
[key: string]: {{{additionalPropertiesType}}}{{^additionalPropertiesIsAnyType}}{{#hasVars}} | any{{/hasVars}}{{/additionalPropertiesIsAnyType}};
|
||||||
|
|
||||||
|
{{/additionalPropertiesType}}
|
||||||
|
{{#vars}}
|
||||||
|
/**
|
||||||
|
* {{{description}}}
|
||||||
|
* @type {{=<% %>=}}{<%&datatype%>}<%={{ }}=%>
|
||||||
|
* @memberof {{classname}}
|
||||||
|
{{#deprecated}}
|
||||||
|
* @deprecated
|
||||||
|
{{/deprecated}}
|
||||||
|
*/
|
||||||
|
'{{baseName}}'{{^required}}?{{/required}}: {{#isEnum}}{{{datatypeWithEnum}}}{{/isEnum}}{{^isEnum}}{{{dataType}}}{{#isNullable}} | null{{/isNullable}}{{/isEnum}};
|
||||||
|
{{/vars}}
|
||||||
|
}{{#hasEnums}}
|
||||||
|
|
||||||
|
{{#vars}}
|
||||||
|
{{#isEnum}}
|
||||||
|
{{#stringEnums}}
|
||||||
|
/**
|
||||||
|
* @export
|
||||||
|
* @enum {string}
|
||||||
|
*/
|
||||||
|
export enum {{enumName}} {
|
||||||
|
{{#allowableValues}}
|
||||||
|
{{#enumVars}}
|
||||||
|
{{#enumDescription}}
|
||||||
|
/**
|
||||||
|
* {{.}}
|
||||||
|
*/
|
||||||
|
{{/enumDescription}}
|
||||||
|
{{{name}}} = {{{value}}}{{^-last}},{{/-last}}
|
||||||
|
{{/enumVars}}
|
||||||
|
{{/allowableValues}}
|
||||||
|
}
|
||||||
|
{{/stringEnums}}
|
||||||
|
{{^stringEnums}}
|
||||||
|
export const {{enumName}} = {
|
||||||
|
{{#allowableValues}}
|
||||||
|
{{#enumVars}}
|
||||||
|
{{#enumDescription}}
|
||||||
|
/**
|
||||||
|
* {{.}}
|
||||||
|
*/
|
||||||
|
{{/enumDescription}}
|
||||||
|
{{{name}}}: {{{value}}}{{^-last}},{{/-last}}
|
||||||
|
{{/enumVars}}
|
||||||
|
{{/allowableValues}}
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
export type {{enumName}} = typeof {{enumName}}[keyof typeof {{enumName}}];
|
||||||
|
{{/stringEnums}}
|
||||||
|
{{/isEnum}}
|
||||||
|
{{/vars}}
|
||||||
|
{{/hasEnums}}
|
||||||
2
sdk-resources/plextv-resources/modelIndex.mustache
Normal file
2
sdk-resources/plextv-resources/modelIndex.mustache
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
{{#models}}{{#model}}export * from './{{classFilename}}';{{/model}}
|
||||||
|
{{/models}}
|
||||||
14
sdk-resources/plextv-resources/modelObjectEnum.mustache
Normal file
14
sdk-resources/plextv-resources/modelObjectEnum.mustache
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
export const {{classname}} = {
|
||||||
|
{{#allowableValues}}
|
||||||
|
{{#enumVars}}
|
||||||
|
{{#enumDescription}}
|
||||||
|
/**
|
||||||
|
* {{.}}
|
||||||
|
*/
|
||||||
|
{{/enumDescription}}
|
||||||
|
{{{name}}}: {{{value}}}{{^-last}},{{/-last}}
|
||||||
|
{{/enumVars}}
|
||||||
|
{{/allowableValues}}
|
||||||
|
} as const;
|
||||||
|
|
||||||
|
export type {{classname}} = typeof {{classname}}[keyof typeof {{classname}}];
|
||||||
6
sdk-resources/plextv-resources/modelOneOf.mustache
Normal file
6
sdk-resources/plextv-resources/modelOneOf.mustache
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
/**
|
||||||
|
* @type {{classname}}{{#description}}
|
||||||
|
* {{{.}}}{{/description}}
|
||||||
|
* @export
|
||||||
|
*/
|
||||||
|
export type {{classname}} = {{#oneOf}}{{{.}}}{{^-last}} | {{/-last}}{{/oneOf}};
|
||||||
12
sdk-resources/plextv-resources/modelStringEnum.mustache
Normal file
12
sdk-resources/plextv-resources/modelStringEnum.mustache
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
export enum {{classname}} {
|
||||||
|
{{#allowableValues}}
|
||||||
|
{{#enumVars}}
|
||||||
|
{{#enumDescription}}
|
||||||
|
/**
|
||||||
|
* {{.}}
|
||||||
|
*/
|
||||||
|
{{/enumDescription}}
|
||||||
|
{{{name}}} = {{{value}}}{{^-last}},{{/-last}}
|
||||||
|
{{/enumVars}}
|
||||||
|
{{/allowableValues}}
|
||||||
|
}
|
||||||
1
sdk-resources/plextv-resources/npmignore
Normal file
1
sdk-resources/plextv-resources/npmignore
Normal file
@@ -0,0 +1 @@
|
|||||||
|
# empty npmignore to ensure all required files (e.g., in the dist folder) are published by npm
|
||||||
38
sdk-resources/plextv-resources/package.mustache
Normal file
38
sdk-resources/plextv-resources/package.mustache
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"name": "@lukehagar/plexjs",
|
||||||
|
"version": "{{npmVersion}}",
|
||||||
|
"description": "Community Made Plex JS/TS Module",
|
||||||
|
"author": "Luke Hagar",
|
||||||
|
"repository": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/LukeHagar/plexjs.git"
|
||||||
|
},
|
||||||
|
"keywords": [
|
||||||
|
"axios",
|
||||||
|
"typescript",
|
||||||
|
"openapi",
|
||||||
|
"api",
|
||||||
|
"plex",
|
||||||
|
"plex media server",
|
||||||
|
"pms",
|
||||||
|
"{{npmName}}"
|
||||||
|
],
|
||||||
|
"license": "MIT",
|
||||||
|
"bugs": {
|
||||||
|
"url": "https://github.com/LukeHagar/plexjs/issues"
|
||||||
|
},
|
||||||
|
"main": "./dist/index.js",
|
||||||
|
"typings": "./dist/index.d.ts",
|
||||||
|
"scripts": {
|
||||||
|
"build": "tsc --outDir ./dist",
|
||||||
|
"prepare": "npm run build"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"axios": "^0.26.1",
|
||||||
|
"axios-retry": "^3.4.0"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^12.11.5",
|
||||||
|
"typescript": "^4.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
25
sdk-resources/plextv-resources/tsconfig.mustache
Normal file
25
sdk-resources/plextv-resources/tsconfig.mustache
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"declaration": true,
|
||||||
|
"target": "{{#supportsES6}}ES6{{/supportsES6}}{{^supportsES6}}ES5{{/supportsES6}}",
|
||||||
|
"module": "{{#supportsES6}}ES6{{/supportsES6}}{{^supportsES6}}CommonJS{{/supportsES6}}",
|
||||||
|
"noImplicitAny": true,
|
||||||
|
"outDir": "dist",
|
||||||
|
"rootDir": ".",
|
||||||
|
{{^supportsES6}}
|
||||||
|
"lib": [
|
||||||
|
"es6",
|
||||||
|
"dom"
|
||||||
|
],
|
||||||
|
{{/supportsES6}}
|
||||||
|
"typeRoots": [
|
||||||
|
"node_modules/@types"
|
||||||
|
],
|
||||||
|
"sourceMap": true
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"dist",
|
||||||
|
"node_modules",
|
||||||
|
"./dist/**/*"
|
||||||
|
]
|
||||||
|
}
|
||||||
12
sdk-resources/pms-config.yaml
Normal file
12
sdk-resources/pms-config.yaml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
templateDir: ./sdk-resources/plexjs-resources
|
||||||
|
files:
|
||||||
|
package.mustache:
|
||||||
|
templateType: SupportingFiles
|
||||||
|
destinationFilename: package.json
|
||||||
|
npmName: plexjs
|
||||||
|
npmRepository: lukehagar
|
||||||
|
npmVersion: 0.0.25
|
||||||
|
useSingleRequestParameter: true
|
||||||
|
sortParamsByRequiredFlag: true
|
||||||
|
gitUserID: lukehagar
|
||||||
|
gitRepoID: plexjs
|
||||||
Reference in New Issue
Block a user