Compare commits

...

37 Commits

Author SHA1 Message Date
LukeHagar
3db513ac7d Bump version to 0.0.26 2023-04-25 02:19:26 +00:00
GitHub Action Bot
fe8f8f571b Automated build 'Merge branch 'main' of https://github.com/LukeHagar/plex-api-spec' typescript-axios sdk: 4792974837 2023-04-25 02:17:43 +00:00
Luke Hagar
e65a0f1719 Merge branch 'main' of https://github.com/LukeHagar/plexjs 2023-04-19 22:48:04 -05:00
Luke Hagar
29ea6c0d75 Plex.tv works!!!! 2023-04-19 22:47:57 -05:00
LukeHagar
c5d773bf41 Bump version to 0.0.25 2023-04-20 03:43:31 +00:00
Luke Hagar
35cf322f7b Merge branch 'main' of https://github.com/LukeHagar/plexjs 2023-04-19 22:42:35 -05:00
Luke Hagar
1d03f750b9 Updated Plex.tv package template 2023-04-19 22:42:29 -05:00
LukeHagar
00eaf93095 Bump version to 0.0.24 2023-04-20 03:39:24 +00:00
Luke Hagar
d3a82b8467 Update bump_version.yml 2023-04-19 22:38:23 -05:00
Luke Hagar
85ce11cadc Merge branch 'main' of https://github.com/LukeHagar/plexjs 2023-04-19 22:27:20 -05:00
Luke Hagar
1b4f9dbf96 Update bump_version.yml 2023-04-19 22:27:13 -05:00
GitHub Action Bot
2f0a7b96d4 Automated build '' typescript-axios sdk: 4750195473 2023-04-20 03:25:13 +00:00
Luke Hagar
fa3519f1bb template files 2023-04-19 22:10:16 -05:00
Luke Hagar
8afc3f323d updated configs 2023-04-19 21:59:53 -05:00
Luke Hagar
7fd2b4ceda separated packages 2023-04-19 21:48:19 -05:00
Luke Hagar
87bb486f1f adjusting for parallel project structure 2023-04-19 21:26:38 -05:00
LukeHagar
18c735a920 Bump version to 0.0.22 2023-04-19 15:29:30 +00:00
GitHub Action Bot
331618b77a Automated build '' typescript-axios sdk: 4745116974 2023-04-19 15:28:00 +00:00
Luke Hagar
5f601ecf65 Update configuration.mustache 2023-04-19 10:27:12 -05:00
Luke Hagar
8eeef06c9c adjusting header defaults 2023-04-19 10:26:41 -05:00
LukeHagar
bc9335abcf Bump version to 0.0.21 2023-04-19 15:21:42 +00:00
GitHub Action Bot
792fedc759 Automated build 'Merge branch 'main' of https://github.com/LukeHagar/plex-api-spec' typescript-axios sdk: 4744818290 2023-04-19 14:59:37 +00:00
GitHub Action Bot
e343455e77 Automated build 'added geoip, adjusted tags' typescript-axios sdk: 4744665738 2023-04-19 14:43:35 +00:00
GitHub Action Bot
7a7931b0d0 Automated build 'Merge branch 'main' of https://github.com/LukeHagar/plex-api-spec' typescript-axios sdk: 4744587370 2023-04-19 14:35:42 +00:00
GitHub Action Bot
b3c26fd1a7 Automated build 'Added Photo, myPlex, and search endpoints' typescript-axios sdk: 4744497330 2023-04-19 14:27:18 +00:00
GitHub Action Bot
26fa0aef86 Automated build 'Added Schemas, Edited endpoint order in referenced spec' typescript-axios sdk: 4744017438 2023-04-19 13:40:37 +00:00
GitHub Action Bot
74ecefac8b Automated build 'Added new endpoints' typescript-axios sdk: 4738906190 2023-04-19 02:29:00 +00:00
Luke Hagar
8855195c09 Update readme.md 2023-04-18 20:27:16 -05:00
Luke Hagar
227636620e Update readme.md 2023-04-18 20:26:37 -05:00
Luke Hagar
5866739942 Merge branch 'main' of https://github.com/LukeHagar/plexjs 2023-04-18 20:24:40 -05:00
Luke Hagar
0eacb0e7c4 Improving examples and intellisense 2023-04-18 20:24:34 -05:00
Luke Hagar
c0efb9a732 Update readme.md 2023-04-18 20:19:53 -05:00
Luke Hagar
71484de76e Update readme.md 2023-04-18 20:19:28 -05:00
Luke Hagar
be73efff0b Update readme.md 2023-04-18 20:12:26 -05:00
Luke Hagar
a00c394526 Update readme.md 2023-04-18 20:11:06 -05:00
Luke Hagar
3d57b22b26 Update readme.md 2023-04-18 20:10:37 -05:00
Luke Hagar
995bbedbb6 Update readme.md 2023-04-18 20:09:24 -05:00
83 changed files with 4957 additions and 1723 deletions

View File

@@ -53,17 +53,34 @@ jobs:
- name: Update config files with new version
id: updateVersion
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
id: buildTS
## Update package.json file with new version
- name: Update package.json version
id: updatePackageJsonVersion
if: steps.updateVersion.outcome == 'success'
run: |
rm -rf plexjs/
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
LATEST_TAG=$(git describe --tags `git rev-list --tags --max-count=1`)
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
id: buildSDK
if: steps.buildTS.outcome == 'success'
if: steps.buildPTV.outcome == 'success'
run: |
cd plexjs
npm install

View File

@@ -1,5 +0,0 @@
{
"trailingComma": "all",
"singleQuote": true,
"printWidth": 80
}

View File

@@ -5,25 +5,21 @@
"main": "index.js",
"scripts": {
"build": "rimraf ./build && tsc",
"start:dev": "npx nodemon",
"dev": "npx nodemon",
"start": "npm run build && node build/index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@lukehagar/plexjs": "^0.0.19",
"@types/jest": "^29.5.0",
"@types/node": "^18.6.1",
"@lukehagar/plexjs": "^0.0.25",
"@types/jest": "^29.5.1",
"@types/node": "^18.15.12",
"@typescript-eslint/eslint-plugin": "^5.31.0",
"@typescript-eslint/parser": "^5.31.0",
"eslint": "^8.20.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-jest": "^27.2.1",
"eslint-plugin-prettier": "^4.2.1",
"dotenv": "^16.0.3",
"nodemon": "^2.0.19",
"onchange": "^7.1.0",
"prettier": "^2.7.1",
"rimraf": "^5.0.0",
"run-script-os": "^1.1.6",
"ts-node": "^10.9.1",

View File

@@ -1,9 +1,14 @@
// eslint-disable-next-line no-console
import { Configuration, ServerApi } from '@lukehagar/plexjs';
import { Configuration, ServerApi, PlexTvApi } from "@lukehagar/plexjs";
import dotenv from "dotenv";
dotenv.config();
const config = new Configuration({ basePath: 'http://10.10.10.47:32400' });
const api = new ServerApi(config);
const config = new Configuration({
basePath: process.env.BASE_PATH,
plexToken: process.env.PLEX_TOKEN,
});
api.getServerCapabilities();
new ServerApi(config).getServerCapabilities().then((resp) => console.log(resp));
console.log('Hello world!');
new PlexTvApi(config).getDevices().then((resp) => console.log(resp));
new PlexTvApi(config).getUserDetails().then((resp) => console.log(resp));

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
## plexjs@0.0.20
## 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:
@@ -36,7 +36,7 @@ navigate to the folder of your consuming project and run one of the following co
_published:_
```
npm install plexjs@0.0.20 --save
npm install plexjs@0.0.22 --save
```
_unPublished (not recommended):_

View File

@@ -14,7 +14,7 @@
import { IAxiosRetryConfig } from "axios-retry";
export interface ConfigurationParameters {
export type ConfigurationParameters = {
plexToken?: string;
clientIdentifier?: string;
device?: string;
@@ -132,14 +132,14 @@ export class Configuration {
retriesConfig?: IAxiosRetryConfig
constructor(param: ConfigurationParameters = {}) {
this.plexToken = param.plexToken;
this.clientIdentifier = param.clientIdentifier || "Plexjs";
this.device = param.device || "Unspecified";
this.deviceName = param.deviceName || "Unspecified";
this.platform = param.platform || "Plexjs";
this.platformVersion = param.platformVersion || process.env.npm_package_version;
this.product = param.product || "Plexjs";
this.version = param.version || process.env.npm_package_version;
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 = (header: string) => {
switch (header) {

View File

@@ -12,7 +12,6 @@
* Do not edit the class manually.
*/
export * from "./api";
export * from "./plextv/api";
export * from "./pms/api";
export { Configuration, ConfigurationParameters } from "./configuration";

View File

@@ -1,12 +1,12 @@
{
"name": "@lukehagar/plexjs",
"version": "0.0.20",
"version": "0.0.26",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "@lukehagar/plexjs",
"version": "0.0.20",
"version": "0.0.26",
"license": "MIT",
"dependencies": {
"axios": "^0.26.1",

View File

@@ -1,6 +1,6 @@
{
"name": "@lukehagar/plexjs",
"version": "0.0.20",
"version": "0.0.26",
"description": "Community Made Plex JS/TS Module",
"author": "Luke Hagar",
"repository": {

View 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

View 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

View File

@@ -0,0 +1 @@
6.3.0

45
plexjs/plextv/README.md Normal file
View File

@@ -0,0 +1,45 @@
## plexjs@0.0.26
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.26 --save
```
_unPublished (not recommended):_
```
npm install PATH_TO_GENERATED_PACKAGE --save

1127
plexjs/plextv/api.ts Normal file

File diff suppressed because it is too large Load Diff

71
plexjs/plextv/base.ts Normal file
View 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 = "https://plex.tv/api/v2" || 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
View 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);
};
}

View 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.26";
this.product = param.product || "plexjs";
this.version = param.version || "0.0.26";
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
View 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
View 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";

View File

@@ -0,0 +1,38 @@
{
"name": "@lukehagar/plexjs",
"version": "0.0.26",
"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"
}
}

View 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
View File

@@ -0,0 +1,4 @@
wwwroot/*.js
node_modules
typings
dist

1
plexjs/pms/.npmignore Normal file
View File

@@ -0,0 +1 @@
# empty npmignore to ensure all required files (e.g., in the dist folder) are published by npm

View 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

View 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

View File

@@ -0,0 +1 @@
6.3.0

45
plexjs/pms/README.md Normal file
View File

@@ -0,0 +1,45 @@
## plexjs@0.0.26
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.26 --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
View 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.26";
this.product = param.product || "plexjs";
this.version = param.version || "0.0.26";
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
View 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
View 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
View File

@@ -0,0 +1,38 @@
{
"name": "@lukehagar/plexjs",
"version": "0.0.26",
"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
View 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/**/*"
]
}

View File

@@ -2,10 +2,42 @@
## 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
npm
```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));
```

View File

@@ -3,7 +3,7 @@
{{>licenseInfo}}
import { IAxiosRetryConfig } from "axios-retry";
export interface ConfigurationParameters {
export type ConfigurationParameters = {
plexToken?: string;
clientIdentifier?: string;
device?: string;
@@ -121,14 +121,14 @@ export class Configuration {
retriesConfig?: IAxiosRetryConfig
constructor(param: ConfigurationParameters = {}) {
this.plexToken = param.plexToken;
this.clientIdentifier = param.clientIdentifier || "Plexjs";
this.device = param.device || "Unspecified";
this.deviceName = param.deviceName || "Unspecified";
this.platform = param.platform || "Plexjs";
this.platformVersion = param.platformVersion || process.env.npm_package_version;
this.product = param.product || "Plexjs";
this.version = param.version || process.env.npm_package_version;
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) {

View File

@@ -0,0 +1,4 @@
wwwroot/*.js
node_modules
typings
dist

View File

@@ -0,0 +1 @@
# empty npmignore to ensure all required files (e.g., in the dist folder) are published by npm

View File

@@ -1,11 +1,11 @@
templateDir: ./sdk-resources
templateDir: ./sdk-resources/plextv-resources
files:
package.mustache:
templateType: SupportingFiles
destinationFilename: package.json
npmName: plexjs
npmRepository: lukehagar
npmVersion: 0.0.20
npmVersion: 0.0.26
useSingleRequestParameter: true
sortParamsByRequiredFlag: true
gitUserID: lukehagar

View 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

View 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}}

View 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}}
/**
* {{&notes}}
{{#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}}
/**
* {{&notes}}
{{#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}}
/**
* {{&notes}}
{{#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}}
/**
* {{&notes}}
{{#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}}
/**
* {{&notes}}
{{#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}}

View 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 = "https://plex.tv/api/v2" || this.basePath;
}
}
};
/**
*
* @export
* @class RequiredError
* @extends {Error}
*/
export class RequiredError extends Error {
name: "RequiredError" = "RequiredError";
constructor(public field: string, msg?: string) {
super(msg);
}
}

View 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);
};
}

View 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');
}
}

View 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'

View File

@@ -0,0 +1,4 @@
wwwroot/*.js
node_modules
typings
dist

View File

@@ -0,0 +1,7 @@
/* tslint:disable */
/* eslint-disable */
{{>licenseInfo}}
export * from "./api";
export {Configuration, ConfigurationParameters} from "./configuration";
{{#withSeparateModelsAndApi}}export * from "./{{tsModelPackage}}";{{/withSeparateModelsAndApi}}

View 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.
*/

View 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}}

View File

@@ -0,0 +1,6 @@
/**
* @type {{classname}}{{#description}}
* {{{.}}}{{/description}}
* @export
*/
export type {{classname}} = {{#allOf}}{{{.}}}{{^-last}} & {{/-last}}{{/allOf}};

View 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}}

View 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}}

View File

@@ -0,0 +1,2 @@
{{#models}}{{#model}}export * from './{{classFilename}}';{{/model}}
{{/models}}

View 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}}];

View File

@@ -0,0 +1,6 @@
/**
* @type {{classname}}{{#description}}
* {{{.}}}{{/description}}
* @export
*/
export type {{classname}} = {{#oneOf}}{{{.}}}{{^-last}} | {{/-last}}{{/oneOf}};

View File

@@ -0,0 +1,12 @@
export enum {{classname}} {
{{#allowableValues}}
{{#enumVars}}
{{#enumDescription}}
/**
* {{.}}
*/
{{/enumDescription}}
{{{name}}} = {{{value}}}{{^-last}},{{/-last}}
{{/enumVars}}
{{/allowableValues}}
}

View File

@@ -0,0 +1 @@
# empty npmignore to ensure all required files (e.g., in the dist folder) are published by npm

View 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"
}
}

View 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/**/*"
]
}

View 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.26
useSingleRequestParameter: true
sortParamsByRequiredFlag: true
gitUserID: lukehagar
gitRepoID: plexjs