Adding Servers Methods

This commit is contained in:
luke-hagar-sp
2022-07-20 19:44:54 -05:00
parent 3775654fd4
commit dccce95059
6 changed files with 1018 additions and 207 deletions

484
package-lock.json generated
View File

@@ -9,7 +9,6 @@
"dependencies": {
"@emotion/react": "^11.9.3",
"@emotion/styled": "^11.9.3",
"@heroicons/react": "^1.0.6",
"@mui/base": "^5.0.0-alpha.89",
"@mui/icons-material": "^5.8.4",
"@mui/material": "^5.9.0",
@@ -21,20 +20,25 @@
"bowser": "^2.11.0",
"electron-debug": "^3.2.0",
"electron-log": "^4.4.7",
"electron-store": "^8.0.2",
"electron-updater": "^5.0.3",
"electron-util": "^0.17.2",
"fs": "^0.0.1-security",
"http-browserify": "^1.7.0",
"https-browserify": "^1.0.0",
"ipaddr.js": "^2.0.1",
"login-with-plex": "^1.1.1",
"path": "^0.12.7",
"plex-api": "^5.3.2",
"plex-api-credentials": "^4.0.1",
"plex-oauth": "^2.0.2",
"qs": "^6.11.0",
"react": "^18.2.0",
"react-dom": "^18.1.0",
"react-intl": "^6.0.5",
"react-jinke-music-player": "^4.24.2",
"react-router-dom": "^6.3.0",
"react-xml-parser": "^1.1.8",
"stream": "^0.0.2",
"uuid": "^8.3.2"
},
@@ -1136,14 +1140,6 @@
"integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
"dev": true
},
"node_modules/@heroicons/react": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@heroicons/react/-/react-1.0.6.tgz",
"integrity": "sha512-JJCXydOFWMDpCP4q13iEplA503MQO3xLoZiKum+955ZCtHINWnx26CUxVxxFQu/uLb4LW3ge15ZpzIkXKkJ8oQ==",
"peerDependencies": {
"react": ">= 16"
}
},
"node_modules/@humanwhocodes/config-array": {
"version": "0.9.5",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
@@ -3666,7 +3662,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
"dev": true,
"dependencies": {
"ajv": "^8.0.0"
},
@@ -3683,7 +3678,6 @@
"version": "8.11.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
"integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
"dev": true,
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@@ -3698,8 +3692,7 @@
"node_modules/ajv-formats/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
},
"node_modules/ajv-keywords": {
"version": "3.5.2",
@@ -4240,6 +4233,14 @@
"node": ">= 4.5.0"
}
},
"node_modules/atomically": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz",
"integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==",
"engines": {
"node": ">=10.12.0"
}
},
"node_modules/aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -4548,6 +4549,18 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"node_modules/body-parser/node_modules/qs": {
"version": "6.9.7",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==",
"dev": true,
"engines": {
"node": ">=0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/bonjour-service": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.11.tgz",
@@ -4946,7 +4959,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
@@ -5478,6 +5490,63 @@
"url": "https://github.com/chalk/supports-color?sponsor=1"
}
},
"node_modules/conf": {
"version": "10.1.2",
"resolved": "https://registry.npmjs.org/conf/-/conf-10.1.2.tgz",
"integrity": "sha512-o9Fv1Mv+6A0JpoayQ8JleNp3hhkbOJP/Re/Q+QqxMPHPkABVsRjQGWZn9A5GcqLiTNC6d89p2PB5ZhHVDSMwyg==",
"dependencies": {
"ajv": "^8.6.3",
"ajv-formats": "^2.1.1",
"atomically": "^1.7.0",
"debounce-fn": "^4.0.0",
"dot-prop": "^6.0.1",
"env-paths": "^2.2.1",
"json-schema-typed": "^7.0.3",
"onetime": "^5.1.2",
"pkg-up": "^3.1.0",
"semver": "^7.3.5"
},
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/conf/node_modules/ajv": {
"version": "8.11.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
"integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/epoberezkin"
}
},
"node_modules/conf/node_modules/dot-prop": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
"integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
"dependencies": {
"is-obj": "^2.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/conf/node_modules/json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
},
"node_modules/config-chain": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
@@ -6103,6 +6172,28 @@
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz",
"integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A=="
},
"node_modules/debounce-fn": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz",
"integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==",
"dependencies": {
"mimic-fn": "^3.0.0"
},
"engines": {
"node": ">=10"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/debounce-fn/node_modules/mimic-fn": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz",
"integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==",
"engines": {
"node": ">=8"
}
},
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -7265,6 +7356,29 @@
"node": ">=12"
}
},
"node_modules/electron-store": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/electron-store/-/electron-store-8.0.2.tgz",
"integrity": "sha512-9GwUMv51w8ydbkaG7X0HrPlElXLApg63zYy1/VZ/a08ndl0gfm4iCoD3f0E1JvP3V16a+7KxqriCI0c122stiA==",
"dependencies": {
"conf": "^10.1.2",
"type-fest": "^2.12.2"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/electron-store/node_modules/type-fest": {
"version": "2.17.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.17.0.tgz",
"integrity": "sha512-U+g3/JVXnOki1kLSc+xZGPRll3Ah9u2VIG6Sn9iH9YX6UkPERmt6O/0fIyTgsd2/whV0+gAaHAg8fz6sG1QzMA==",
"engines": {
"node": ">=12.20"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/electron-to-chromium": {
"version": "1.4.106",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz",
@@ -7329,6 +7443,18 @@
"node": ">= 10.0.0"
}
},
"node_modules/electron-util": {
"version": "0.17.2",
"resolved": "https://registry.npmjs.org/electron-util/-/electron-util-0.17.2.tgz",
"integrity": "sha512-4Kg/aZxJ2BZklgyfH86px/D2GyROPyIcnAZar+7KiNmKI2I5l09pwQTP7V95zM3FVhgDQwV9iuJta5dyEvuWAw==",
"dependencies": {
"electron-is-dev": "^1.1.0",
"new-github-issue-url": "^0.2.1"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/electron/node_modules/@types/node": {
"version": "16.11.26",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.26.tgz",
@@ -7462,7 +7588,6 @@
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
"integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
"dev": true,
"engines": {
"node": ">=6"
}
@@ -8907,6 +9032,18 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"node_modules/express/node_modules/qs": {
"version": "6.9.7",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==",
"dev": true,
"engines": {
"node": ">=0.6"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/express/node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -9359,7 +9496,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
"integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
"dev": true,
"dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
@@ -9675,7 +9811,6 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -10288,7 +10423,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz",
"integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==",
"dev": true,
"engines": {
"node": ">= 10"
}
@@ -10530,7 +10664,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
"dev": true,
"engines": {
"node": ">=8"
}
@@ -11996,6 +12129,11 @@
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
},
"node_modules/json-schema-typed": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz",
"integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A=="
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
@@ -12873,7 +13011,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true,
"engines": {
"node": ">=6"
}
@@ -13162,6 +13299,14 @@
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
"node_modules/new-github-issue-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/new-github-issue-url/-/new-github-issue-url-0.2.1.tgz",
"integrity": "sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA==",
"engines": {
"node": ">=10"
}
},
"node_modules/no-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
@@ -13367,7 +13512,6 @@
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
"integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
"dev": true,
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
@@ -13500,7 +13644,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
"dependencies": {
"mimic-fn": "^2.1.0"
},
@@ -13657,7 +13800,6 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true,
"engines": {
"node": ">=6"
}
@@ -13933,6 +14075,73 @@
"node": ">=8"
}
},
"node_modules/pkg-up": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
"integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
"dependencies": {
"find-up": "^3.0.0"
},
"engines": {
"node": ">=8"
}
},
"node_modules/pkg-up/node_modules/find-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"dependencies": {
"locate-path": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/pkg-up/node_modules/locate-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"dependencies": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/pkg-up/node_modules/p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dependencies": {
"p-try": "^2.0.0"
},
"engines": {
"node": ">=6"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/pkg-up/node_modules/p-locate": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"dependencies": {
"p-limit": "^2.0.0"
},
"engines": {
"node": ">=6"
}
},
"node_modules/pkg-up/node_modules/path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
"integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==",
"engines": {
"node": ">=4"
}
},
"node_modules/plex-api": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/plex-api/-/plex-api-5.3.2.tgz",
@@ -14799,10 +15008,12 @@
}
},
"node_modules/qs": {
"version": "6.9.7",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==",
"dev": true,
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"dependencies": {
"side-channel": "^1.0.4"
},
"engines": {
"node": ">=0.6"
},
@@ -15694,6 +15905,11 @@
"react-dom": ">=16.6.0"
}
},
"node_modules/react-xml-parser": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/react-xml-parser/-/react-xml-parser-1.1.8.tgz",
"integrity": "sha512-yX9k9LNCRzzNnFWoyo9cWEjtor6n6VD0Uh7z1ww5rIP6h5vdhJKEmowsm9RumEJMRdr7akcT4mMBScpsz573qQ=="
},
"node_modules/read-config-file": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz",
@@ -15977,7 +16193,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -16620,7 +16835,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"dev": true,
"dependencies": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",
@@ -19740,12 +19954,6 @@
"integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
"dev": true
},
"@heroicons/react": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@heroicons/react/-/react-1.0.6.tgz",
"integrity": "sha512-JJCXydOFWMDpCP4q13iEplA503MQO3xLoZiKum+955ZCtHINWnx26CUxVxxFQu/uLb4LW3ge15ZpzIkXKkJ8oQ==",
"requires": {}
},
"@humanwhocodes/config-array": {
"version": "0.9.5",
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz",
@@ -21701,7 +21909,6 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz",
"integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==",
"dev": true,
"requires": {
"ajv": "^8.0.0"
},
@@ -21710,7 +21917,6 @@
"version": "8.11.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
"integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
"dev": true,
"requires": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
@@ -21721,8 +21927,7 @@
"json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
"dev": true
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
}
}
},
@@ -22151,6 +22356,11 @@
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"dev": true
},
"atomically": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz",
"integrity": "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w=="
},
"aws-sign2": {
"version": "0.7.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -22395,6 +22605,12 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"qs": {
"version": "6.9.7",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==",
"dev": true
}
}
},
@@ -22710,7 +22926,6 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
"integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
"get-intrinsic": "^1.0.2"
@@ -23119,6 +23334,49 @@
}
}
},
"conf": {
"version": "10.1.2",
"resolved": "https://registry.npmjs.org/conf/-/conf-10.1.2.tgz",
"integrity": "sha512-o9Fv1Mv+6A0JpoayQ8JleNp3hhkbOJP/Re/Q+QqxMPHPkABVsRjQGWZn9A5GcqLiTNC6d89p2PB5ZhHVDSMwyg==",
"requires": {
"ajv": "^8.6.3",
"ajv-formats": "^2.1.1",
"atomically": "^1.7.0",
"debounce-fn": "^4.0.0",
"dot-prop": "^6.0.1",
"env-paths": "^2.2.1",
"json-schema-typed": "^7.0.3",
"onetime": "^5.1.2",
"pkg-up": "^3.1.0",
"semver": "^7.3.5"
},
"dependencies": {
"ajv": {
"version": "8.11.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz",
"integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==",
"requires": {
"fast-deep-equal": "^3.1.1",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
"uri-js": "^4.2.2"
}
},
"dot-prop": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz",
"integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==",
"requires": {
"is-obj": "^2.0.0"
}
},
"json-schema-traverse": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
}
}
},
"config-chain": {
"version": "1.1.13",
"resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz",
@@ -23576,6 +23834,21 @@
"resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz",
"integrity": "sha512-xxwlswWOlGhzgQ4TKzASQkUhqERI3egRNqgV4ScR8wlANA/A9tZ7miXa44vTTKEq5l7vWoL5G57bG3zA+Kow0A=="
},
"debounce-fn": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz",
"integrity": "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==",
"requires": {
"mimic-fn": "^3.0.0"
},
"dependencies": {
"mimic-fn": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz",
"integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ=="
}
}
},
"debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -24490,6 +24763,22 @@
}
}
},
"electron-store": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/electron-store/-/electron-store-8.0.2.tgz",
"integrity": "sha512-9GwUMv51w8ydbkaG7X0HrPlElXLApg63zYy1/VZ/a08ndl0gfm4iCoD3f0E1JvP3V16a+7KxqriCI0c122stiA==",
"requires": {
"conf": "^10.1.2",
"type-fest": "^2.12.2"
},
"dependencies": {
"type-fest": {
"version": "2.17.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.17.0.tgz",
"integrity": "sha512-U+g3/JVXnOki1kLSc+xZGPRll3Ah9u2VIG6Sn9iH9YX6UkPERmt6O/0fIyTgsd2/whV0+gAaHAg8fz6sG1QzMA=="
}
}
},
"electron-to-chromium": {
"version": "1.4.106",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz",
@@ -24545,6 +24834,15 @@
}
}
},
"electron-util": {
"version": "0.17.2",
"resolved": "https://registry.npmjs.org/electron-util/-/electron-util-0.17.2.tgz",
"integrity": "sha512-4Kg/aZxJ2BZklgyfH86px/D2GyROPyIcnAZar+7KiNmKI2I5l09pwQTP7V95zM3FVhgDQwV9iuJta5dyEvuWAw==",
"requires": {
"electron-is-dev": "^1.1.0",
"new-github-issue-url": "^0.2.1"
}
},
"electronmon": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/electronmon/-/electronmon-2.0.2.tgz",
@@ -24645,8 +24943,7 @@
"env-paths": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
"integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
"dev": true
"integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="
},
"envinfo": {
"version": "7.8.1",
@@ -25700,6 +25997,12 @@
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"dev": true
},
"qs": {
"version": "6.9.7",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==",
"dev": true
},
"safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@@ -26055,7 +26358,6 @@
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
"integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
"dev": true,
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
@@ -26290,8 +26592,7 @@
"has-symbols": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"dev": true
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
},
"has-tostringtag": {
"version": "1.0.0",
@@ -26747,8 +27048,7 @@
"ipaddr.js": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz",
"integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==",
"dev": true
"integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng=="
},
"is-arrayish": {
"version": "0.2.1",
@@ -26905,8 +27205,7 @@
"is-obj": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz",
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==",
"dev": true
"integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w=="
},
"is-path-inside": {
"version": "3.0.3",
@@ -28028,6 +28327,11 @@
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
},
"json-schema-typed": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz",
"integrity": "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A=="
},
"json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
@@ -28702,8 +29006,7 @@
"mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
},
"mimic-response": {
"version": "1.0.1",
@@ -28914,6 +29217,11 @@
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
"new-github-issue-url": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/new-github-issue-url/-/new-github-issue-url-0.2.1.tgz",
"integrity": "sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA=="
},
"no-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
@@ -29071,8 +29379,7 @@
"object-inspect": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
"integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
"dev": true
"integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g=="
},
"object-keys": {
"version": "1.1.1",
@@ -29169,7 +29476,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
"requires": {
"mimic-fn": "^2.1.0"
}
@@ -29276,8 +29582,7 @@
"p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
},
"package-json": {
"version": "6.5.0",
@@ -29488,6 +29793,54 @@
}
}
},
"pkg-up": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz",
"integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==",
"requires": {
"find-up": "^3.0.0"
},
"dependencies": {
"find-up": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
"integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
"requires": {
"locate-path": "^3.0.0"
}
},
"locate-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
"integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
"requires": {
"p-locate": "^3.0.0",
"path-exists": "^3.0.0"
}
},
"p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"requires": {
"p-try": "^2.0.0"
}
},
"p-locate": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
"integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
"requires": {
"p-limit": "^2.0.0"
}
},
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
"integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ=="
}
}
},
"plex-api": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/plex-api/-/plex-api-5.3.2.tgz",
@@ -30094,10 +30447,12 @@
}
},
"qs": {
"version": "6.9.7",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz",
"integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==",
"dev": true
"version": "6.11.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
"integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
"requires": {
"side-channel": "^1.0.4"
}
},
"queue-microtask": {
"version": "1.2.3",
@@ -30725,6 +31080,11 @@
"prop-types": "^15.6.2"
}
},
"react-xml-parser": {
"version": "1.1.8",
"resolved": "https://registry.npmjs.org/react-xml-parser/-/react-xml-parser-1.1.8.tgz",
"integrity": "sha512-yX9k9LNCRzzNnFWoyo9cWEjtor6n6VD0Uh7z1ww5rIP6h5vdhJKEmowsm9RumEJMRdr7akcT4mMBScpsz573qQ=="
},
"read-config-file": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz",
@@ -30942,8 +31302,7 @@
"require-from-string": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
"dev": true
"integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="
},
"requires-port": {
"version": "1.0.0",
@@ -31432,7 +31791,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
"integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
"dev": true,
"requires": {
"call-bind": "^1.0.0",
"get-intrinsic": "^1.0.2",

View File

@@ -110,7 +110,6 @@
"dependencies": {
"@emotion/react": "^11.9.3",
"@emotion/styled": "^11.9.3",
"@heroicons/react": "^1.0.6",
"@mui/base": "^5.0.0-alpha.89",
"@mui/icons-material": "^5.8.4",
"@mui/material": "^5.9.0",
@@ -122,20 +121,25 @@
"bowser": "^2.11.0",
"electron-debug": "^3.2.0",
"electron-log": "^4.4.7",
"electron-store": "^8.0.2",
"electron-updater": "^5.0.3",
"electron-util": "^0.17.2",
"fs": "^0.0.1-security",
"http-browserify": "^1.7.0",
"https-browserify": "^1.0.0",
"ipaddr.js": "^2.0.1",
"login-with-plex": "^1.1.1",
"path": "^0.12.7",
"plex-api": "^5.3.2",
"plex-api-credentials": "^4.0.1",
"plex-oauth": "^2.0.2",
"qs": "^6.11.0",
"react": "^18.2.0",
"react-dom": "^18.1.0",
"react-intl": "^6.0.5",
"react-jinke-music-player": "^4.24.2",
"react-router-dom": "^6.3.0",
"react-xml-parser": "^1.1.8",
"stream": "^0.0.2",
"uuid": "^8.3.2"
},

View File

@@ -9,29 +9,12 @@
* `./src/main.js` using webpack. This gives us some performance wins.
*/
import path from 'path';
import {
app,
BrowserWindow,
shell,
ipcMain,
nativeTheme,
dialog,
} from 'electron';
import { app, BrowserWindow, shell, ipcMain, dialog } from 'electron';
import { autoUpdater } from 'electron-updater';
import log from 'electron-log';
import MenuBuilder from './menu';
import { resolveHtmlPath } from './util';
if (process.defaultApp) {
if (process.argv.length >= 2) {
app.setAsDefaultProtocolClient('warden-ap', process.execPath, [
path.resolve(process.argv[1]),
]);
}
} else {
app.setAsDefaultProtocolClient('warden-ap');
}
class AppUpdater {
constructor() {
log.transports.file.level = 'info';
@@ -92,7 +75,6 @@ const createWindow = async () => {
height: 728,
icon: getAssetPath('icon.png'),
webPreferences: {
nodeIntegration: true,
contextIsolation: true,
preload: app.isPackaged
? path.join(__dirname, 'preload.js')
@@ -102,23 +84,6 @@ const createWindow = async () => {
mainWindow.loadURL(resolveHtmlPath('index.html'));
ipcMain.handle('dark-mode:toggle', () => {
if (nativeTheme.shouldUseDarkColors) {
nativeTheme.themeSource = 'light';
} else {
nativeTheme.themeSource = 'dark';
}
return nativeTheme.shouldUseDarkColors;
});
ipcMain.handle('dark-mode:system', () => {
nativeTheme.themeSource = 'system';
});
ipcMain.handle('plex:login', () => {
window.open('https://github.com', '_blank', 'top=500,left=200,frame=false,nodeIntegration=no')
});
mainWindow.on('ready-to-show', () => {
if (!mainWindow) {
throw new Error('"mainWindow" is not defined');
@@ -148,40 +113,51 @@ const createWindow = async () => {
new AppUpdater();
};
const gotTheLock = app.requestSingleInstanceLock();
app.on('second-instance', (event, commandLine, workingDirectory) => {
// Someone tried to run a second instance, we should focus our window.
if (mainWindow) {
if (mainWindow.isMinimized()) mainWindow.restore();
mainWindow.focus();
}
});
if (!gotTheLock) {
app.quit();
} else {
app.on('open-url', (event, url) => {
dialog.showErrorBox('Welcome Back', `You arrived from: ${url}`);
});
app.on('second-instance', (event, commandLine, workingDirectory) => {
// Someone tried to run a second instance, we should focus our window.
if (mainWindow) {
if (mainWindow.isMinimized()) mainWindow.restore();
mainWindow.focus();
// Create mainWindow, load the rest of the app, etc...
app
.whenReady()
.then(() => {
createWindow();
if (process.defaultApp) {
if (process.argv.length >= 2) {
app.setAsDefaultProtocolClient('warden-ap', process.execPath, [
path.resolve(process.argv[1]),
]);
}
} else {
app.setAsDefaultProtocolClient('warden-ap');
}
});
app.on('activate', () => {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (mainWindow === null) createWindow();
});
})
.catch(console.log);
app.on('window-all-closed', () => {
// Respect the OSX convention of having the application in memory even
// after all windows have been closed
if (process.platform !== 'darwin') {
app.quit();
}
});
app.on('open-url', (event, url) => {
dialog.showErrorBox('Welcome Back', `You arrived from: ${url}`);
});
app
.whenReady()
.then(() => {
createWindow();
app.on('activate', () => {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (mainWindow === null) createWindow();
});
})
.catch(console.log);
}
app.on('window-all-closed', () => {
// Respect the OSX convention of having the application in memory even
// after all windows have been closed
if (process.platform !== 'darwin') {
app.quit();
}
});
// Handle window controls via IPC
ipcMain.on('shell:open', () => {
const pageDirectory = __dirname.replace('app.asar', 'app.asar.unpacked');
const pagePath = path.join('file://', pageDirectory, 'index.html');
shell.openExternal(pagePath);
});

View File

@@ -27,4 +27,4 @@ contextBridge.exposeInMainWorld('darkMode', {
contextBridge.exposeInMainWorld('plex', {
login: () => ipcRenderer.invoke('plex:login'),
});
});

View File

@@ -24,13 +24,29 @@ import KeyIcon from '@mui/icons-material/Key';
import LockOpenIcon from '@mui/icons-material/LockOpen';
import DarkModeIcon from '@mui/icons-material/DarkMode';
import FormatColorResetIcon from '@mui/icons-material/FormatColorReset';
import { Button, Grid, IconButton, TextField } from '@mui/material';
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
import {
Accordion,
AccordionActions,
AccordionDetails,
AccordionSummary,
Avatar,
Button,
Card,
CardContent,
CardHeader,
Grid,
Icon,
IconButton,
TextField,
} from '@mui/material';
import { v4 as uuidv4 } from 'uuid';
import axios from 'axios';
import ReactJkMusicPlayer from 'react-jinke-music-player';
import { PlexOauth, IPlexClientDetails } from 'plex-oauth';
import { shell } from 'electron';
import XMLParser from 'react-xml-parser';
import ipaddr from 'ipaddr.js';
const drawerWidth = 240;
@@ -70,57 +86,224 @@ function App() {
console.log('Theme');
console.log(activeTheme);
let clientId = localStorage.getItem('plex-client-id');
if (!clientId) {
const uuid = uuidv4();
localStorage.setItem('plex-client-id', uuid);
clientId = uuid;
function openInNewTab(url) {
var win = window.open(url, '_blank');
win?.focus;
}
const redirectURL = 'warden-ap://';
const [clientId, setClientID] = useState(
localStorage.getItem('plex-client-id')
);
if (clientId === null) {
const uuid = uuidv4();
localStorage.setItem('plex-client-id', uuid);
setClientID(uuid);
}
const [plexAuthToken, setPlexAuthToken] = useState(
localStorage.getItem('plex-authToken')
);
const [plexUserData, setPlexUserData] = useState(
localStorage.getItem('plex-userData')
);
const [plexServers, setPlexServers] = useState(
localStorage.getItem('plex-servers')
);
console.log('Auth Token At Creation:');
console.log(plexAuthToken);
console.log('Plex User Data At Creation:');
console.log(plexUserData);
console.log('Plex Servers At Creation:');
console.log(plexServers);
let clientInformation = {
clientIdentifier: clientId, // This is a unique identifier used to identify your app with Plex.
product: 'Warden', // Name of your application
device: 'darwin', // The type of device your application is running on
device: '', // The type of device your application is running on
version: '1', // Version of your application
forwardUrl: 'http://127.0.0.1:1212', // Url to forward back to after signing in.
platform: 'Web', // Optional - Platform your application runs on - Defaults to 'Web'
forwardUrl: '', // Url to forward back to after signing in. // Optional - Platform your application runs on - Defaults to 'Web'
};
let plexOauth = new PlexOauth(clientInformation);
function plexLogin() {
let plexOauth = new PlexOauth(clientInformation);
// Get hosted UI URL and Pin Id
// Get hosted UI URL and Pin Id
plexOauth
.requestHostedLoginURL()
.then((data) => {
let [hostedUILink, pinId] = data;
plexOauth
.requestHostedLoginURL()
.then((data) => {
let [hostedUILink, pinId] = data;
console.log(hostedUILink); // UI URL used to log into Plex
openInNewTab(hostedUILink);
shell.openExternal(hostedUILink);
/*
* You can now navigate the user's browser to the 'hostedUILink'. This will include the forward URL
* for your application, so when they have finished signing into Plex, they will be redirected back
* to the specified URL. From there, you just need to perform a query to check for the auth token.
* (See Below)
*/
console.log('Plex Auth URL:');
console.log(hostedUILink); // UI URL used to log into Plex
console.log('Plex Pin ID:');
console.log(pinId);
/*
* You can now navigate the user's browser to the 'hostedUILink'. This will include the forward URL
* for your application, so when they have finished signing into Plex, they will be redirected back
* to the specified URL. From there, you just need to perform a query to check for the auth token.
* (See Below)
*/
// Check for the auth token, once returning to the application
plexOauth
.checkForAuthToken(pinId)
.then((authToken) => {
console.log(authToken); // Returns the auth token if set, otherwise returns null
// Check for the auth token, once returning to the application
// An auth token will only be null if the user never signs into the hosted UI, or you stop checking for a new one before they can log in
})
.catch((err) => {
throw err;
});
plexOauth
.checkForAuthToken(pinId, 1000, 10)
.then((authToken) => {
console.log('Plex Auth Token:');
console.log(authToken); // Returns the auth token if set, otherwise returns null
if (authToken !== null) {
if (validatePlexAuthToken(authToken)) {
console.log('Plex Auth Token Validated');
} else {
console.log('Plex Auth Token failed validation');
}
}
// An auth token will only be null if the user never signs into the hosted UI, or you stop checking for a new one before they can log in
})
.catch((err) => {
throw err;
});
})
.catch((err) => {
throw err;
});
}
function validatePlexAuthToken(authToken) {
axios({
method: 'GET',
url:
'https://plex.tv/api/v2/user?' +
require('qs').stringify({
'X-Plex-Product': clientInformation.product,
'X-Plex-Client-Identifier': clientId,
'X-Plex-Token': authToken,
}),
headers: { accept: 'application/json' },
})
.catch((err) => {
throw err;
.then((response) => {
console.log(response);
console.log(response.status);
if (response.status === 200) {
localStorage.setItem('plex-userData', response.data);
localStorage.setItem('plex-authToken', authToken);
setPlexUserData(response.data);
setPlexAuthToken(authToken);
return true;
}
if (response.status === 401) {
return false;
}
})
.catch(function (error) {
if (error.response) {
// The request was made and the server responded with a status code
// that falls out of the range of 2xx
console.log(error.response.data);
console.log(error.response.status);
console.log(error.response.headers);
} else if (error.request) {
// The request was made but no response was received
// `error.request` is an instance of XMLHttpRequest in the browser and an instance of
// http.ClientRequest in node.js
console.log(error.request);
} else {
// Something happened in setting up the request that triggered an Error
console.log('Error', error.message);
}
console.log(error.config);
});
}
function plexLogout() {
localStorage.setItem('plex-authToken', null);
localStorage.setItem('plex-userData', null);
localStorage.setItem('plex-servers', null);
setPlexAuthToken(null);
setPlexUserData(null);
setPlexServers([]);
}
console.log(
'https://plex.tv/api/v2/resources?' +
require('qs').stringify({
'X-Plex-Product': clientInformation.product,
'X-Plex-Client-Identifier': clientId,
'X-Plex-Token': plexAuthToken,
})
);
function getPlexServers() {
axios({
method: 'GET',
url:
'https://plex.tv/api/v2/resources?' +
require('qs').stringify({
includeHttps: 1,
includeRelay: 1,
includeIPv6: 1,
'X-Plex-Product': clientInformation.product,
'X-Plex-Client-Identifier': clientId,
'X-Plex-Token': plexAuthToken,
}),
headers: { accept: 'application/json' },
}).then((response) => {
// var xml = new XMLParser().parseFromString(response.data);
console.log('Plex Devices XML');
console.log(response);
localStorage.setItem(
'plex-servers',
response?.data.filter((obj) =>
obj.product.includes('Plex Media Server')
)
);
setPlexServers(
response?.data.filter((obj) =>
obj.product.includes('Plex Media Server')
)
);
});
}
useEffect(() => {
if (plexAuthToken !== null) {
getPlexServers();
}
}, [plexAuthToken]);
// if (!authToken) {
// plexLogin();
// }
// if (!plexUserData) {
// validatePlexAuthToken();
// }
// if (!plexServers) {
// getPlexServers();
// }
console.log('Main Body');
console.log('clientId:');
console.log(clientId);
console.log('Plex Auth Token:');
console.log(plexAuthToken);
console.log('Plex User Data:');
console.log(plexUserData);
console.log('Plex Servers:');
console.log(plexServers);
function isHidden(id) {
if (activePage === id) {
@@ -132,6 +315,7 @@ function App() {
function loginHidden() {
return false;
}
return (
<ThemeProvider theme={activeTheme}>
<Box sx={{ display: 'flex', bgcolor: 'primary.main' }}>
@@ -216,37 +400,202 @@ function App() {
label="Settings"
>
<Toolbar />
<Typography sx={{ flexGrow: 1 }} component="div">
Warden Unique Client ID:{clientId}
</Typography>
<Divider />
<Box hidden={loginHidden()}>
<Grid container spacing={1}>
<Grid item xs={12}>
<Divider />
</Grid>
<Grid item xs={12}>
<TextField
id="plexUsername"
label="Plex Username"
variant="outlined"
/>
</Grid>
<Grid item xs={12}>
<TextField
id="plexPassword"
variant="outlined"
label="Plex Password"
type="password"
></TextField>
</Grid>
<Grid item xs={12}>
<Button onClick={() => window.plex.login()} variant="outlined">
Login to Plex
</Button>
<Grid container spacing={1}>
<Grid item xs={12}>
<Typography sx={{ flexGrow: 1 }} component="div">
Warden
</Typography>
</Grid>
<Grid item xs={12}>
<Typography sx={{ flexGrow: 1 }} component="div">
Local App Data:
</Typography>
</Grid>
<Grid item xs={12}>
<Typography sx={{ flexGrow: 1 }} component="div">
UUID:{clientId}
</Typography>
</Grid>
<Grid item xs={12}>
<Divider />
</Grid>
<Grid item xs={12}>
<Typography sx={{ flexGrow: 1 }} component="div">
Accounts:
</Typography>
</Grid>
<Grid item xs={12}>
<Grid container spacing={1}>
<Grid item xs={12}>
<Grid item xs={12}>
<Card variant="outlined">
<CardHeader
avatar={
<Avatar
alt={plexUserData?.friendlyName}
src={plexUserData?.thumb}
sx={{ width: 56, height: 56 }}
/>
}
action={
<Grid container spacing={2}>
<Grid item xs={5}>
<Button
onClick={() => plexLogin()}
variant="outlined"
>
Login
</Button>
</Grid>
<Grid item xs={5}>
<Button
onClick={() => plexLogout()}
variant="outlined"
>
Logout
</Button>
</Grid>
</Grid>
}
title="Plex Account"
subheader={
'Username: ' + plexUserData?.username
? plexUserData?.username
: null
}
/>
<CardContent>
<Accordion variant="dense">
<AccordionSummary expandIcon={<ExpandMoreIcon />}>
<Typography
sx={{ flexGrow: 1 }}
component="div"
variant="h7"
>
Account Details
</Typography>
</AccordionSummary>
<AccordionDetails>
<Grid container spacing={1}>
<Grid item xs={12}>
<Typography
sx={{ flexGrow: 1 }}
component="div"
>
Username: {plexUserData?.username}
</Typography>
</Grid>
<Grid item xs={12}>
<Typography
sx={{ flexGrow: 1 }}
component="div"
>
Email: {plexUserData?.email}
</Typography>
</Grid>
<Grid item xs={12}>
<Typography
sx={{ flexGrow: 1 }}
component="div"
>
Account Status:{' '}
{plexUserData?.subscriptionDescription}
</Typography>
</Grid>
<Grid item xs={12}>
<Typography
sx={{ flexGrow: 1 }}
component="div"
>
Plex Auth Token:{' '}
{plexAuthToken ? plexAuthToken : null}
</Typography>
</Grid>
<Grid item xs={12}>
<Typography
sx={{ flexGrow: 1 }}
component="div"
>
{' '}
</Typography>
</Grid>
<Grid item xs={12}>
<Typography
sx={{ flexGrow: 1 }}
component="div"
>
Servers:
</Typography>
</Grid>
{/* {plexServers
? [...plexServers]?.map((entry) => (
<Grid item xs={12}>
<Typography
key={entry.name}
sx={{ flexGrow: 1 }}
component="div"
>
{entry.attributes?.name +
' - ' +
entry.attributes?.platform +
' - Internal:(' +
' ' +
entry.children
?.filter((obj) =>
ipaddr
.parse(
obj.attributes.uri
.replace('http://', '')
.replace(':32400', '')
)
.range()
.includes('private')
)
?.map(
(entry) =>
' ' +
entry.attributes.uri
.replace('http://', '')
.replace(':32400', '')
) +
' ) ' +
' - External:(' +
' ' +
entry.children
?.filter((obj) =>
ipaddr
.parse(
obj.attributes.uri
.replace('http://', '')
.replace(':32400', '')
)
.range()
.includes('unicast')
)
?.map(
(entry) =>
' ' +
entry.attributes.uri
.replace('http://', '')
.replace(':32400', '') +
' ) '
)}
</Typography>
</Grid>
))
: null} */}
</Grid>
</AccordionDetails>
<AccordionActions></AccordionActions>
</Accordion>
</CardContent>
</Card>
</Grid>
</Grid>
</Grid>
</Grid>
</Box>
</Grid>
</Box>
</Box>
</ThemeProvider>

138
yarn.lock
View File

@@ -604,11 +604,6 @@
"resolved" "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz"
"version" "1.1.3"
"@heroicons/react@^1.0.6":
"integrity" "sha512-JJCXydOFWMDpCP4q13iEplA503MQO3xLoZiKum+955ZCtHINWnx26CUxVxxFQu/uLb4LW3ge15ZpzIkXKkJ8oQ=="
"resolved" "https://registry.npmjs.org/@heroicons/react/-/react-1.0.6.tgz"
"version" "1.0.6"
"@humanwhocodes/config-array@^0.9.2":
"integrity" "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw=="
"resolved" "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz"
@@ -2127,6 +2122,16 @@
"require-from-string" "^2.0.2"
"uri-js" "^4.2.2"
"ajv@^8.6.3":
"integrity" "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg=="
"resolved" "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz"
"version" "8.11.0"
dependencies:
"fast-deep-equal" "^3.1.1"
"json-schema-traverse" "^1.0.0"
"require-from-string" "^2.0.2"
"uri-js" "^4.2.2"
"ajv@^8.8.0", "ajv@^8.8.2":
"integrity" "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg=="
"resolved" "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz"
@@ -2483,6 +2488,11 @@
"resolved" "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz"
"version" "2.1.2"
"atomically@^1.7.0":
"integrity" "sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w=="
"resolved" "https://registry.npmjs.org/atomically/-/atomically-1.7.0.tgz"
"version" "1.7.0"
"aws-sign2@~0.7.0":
"integrity" "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="
"resolved" "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz"
@@ -3281,6 +3291,22 @@
"tree-kill" "^1.2.2"
"yargs" "^16.2.0"
"conf@^10.1.2":
"integrity" "sha512-o9Fv1Mv+6A0JpoayQ8JleNp3hhkbOJP/Re/Q+QqxMPHPkABVsRjQGWZn9A5GcqLiTNC6d89p2PB5ZhHVDSMwyg=="
"resolved" "https://registry.npmjs.org/conf/-/conf-10.1.2.tgz"
"version" "10.1.2"
dependencies:
"ajv" "^8.6.3"
"ajv-formats" "^2.1.1"
"atomically" "^1.7.0"
"debounce-fn" "^4.0.0"
"dot-prop" "^6.0.1"
"env-paths" "^2.2.1"
"json-schema-typed" "^7.0.3"
"onetime" "^5.1.2"
"pkg-up" "^3.1.0"
"semver" "^7.3.5"
"config-chain@^1.1.11":
"integrity" "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ=="
"resolved" "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz"
@@ -3599,6 +3625,13 @@
"resolved" "https://registry.npmjs.org/dayjs/-/dayjs-1.11.3.tgz"
"version" "1.11.3"
"debounce-fn@^4.0.0":
"integrity" "sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ=="
"resolved" "https://registry.npmjs.org/debounce-fn/-/debounce-fn-4.0.0.tgz"
"version" "4.0.0"
dependencies:
"mimic-fn" "^3.0.0"
"debug@^2.6.0":
"integrity" "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="
"resolved" "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
@@ -3927,6 +3960,13 @@
dependencies:
"is-obj" "^2.0.0"
"dot-prop@^6.0.1":
"integrity" "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA=="
"resolved" "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz"
"version" "6.0.1"
dependencies:
"is-obj" "^2.0.0"
"dotenv-expand@^5.1.0":
"integrity" "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA=="
"resolved" "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz"
@@ -4091,6 +4131,14 @@
"tar" "^6.0.5"
"yargs" "^17.0.1"
"electron-store@^8.0.2":
"integrity" "sha512-9GwUMv51w8ydbkaG7X0HrPlElXLApg63zYy1/VZ/a08ndl0gfm4iCoD3f0E1JvP3V16a+7KxqriCI0c122stiA=="
"resolved" "https://registry.npmjs.org/electron-store/-/electron-store-8.0.2.tgz"
"version" "8.0.2"
dependencies:
"conf" "^10.1.2"
"type-fest" "^2.12.2"
"electron-to-chromium@^1.4.84":
"integrity" "sha512-ZYfpVLULm67K7CaaGP7DmjyeMY4naxsbTy+syVVxT6QHI1Ww8XbJjmr9fDckrhq44WzCrcC5kH3zGpdusxwwqg=="
"resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz"
@@ -4110,6 +4158,14 @@
"lodash.isequal" "^4.5.0"
"semver" "^7.3.5"
"electron-util@^0.17.2":
"integrity" "sha512-4Kg/aZxJ2BZklgyfH86px/D2GyROPyIcnAZar+7KiNmKI2I5l09pwQTP7V95zM3FVhgDQwV9iuJta5dyEvuWAw=="
"resolved" "https://registry.npmjs.org/electron-util/-/electron-util-0.17.2.tgz"
"version" "0.17.2"
dependencies:
"electron-is-dev" "^1.1.0"
"new-github-issue-url" "^0.2.1"
"electron@^18.2.3", "electron@>=12.0.0":
"integrity" "sha512-DJWX03hCRKTscsfXxmW4gmgFuseop+g+m4ml7NfOMfankD8uYyr2Xyi3Ui02inL9qZOlbLMeLVCu6jKCKs8p/w=="
"resolved" "https://registry.npmjs.org/electron/-/electron-18.2.3.tgz"
@@ -4208,7 +4264,7 @@
"resolved" "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz"
"version" "2.2.0"
"env-paths@^2.2.0":
"env-paths@^2.2.0", "env-paths@^2.2.1":
"integrity" "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A=="
"resolved" "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz"
"version" "2.2.1"
@@ -4906,6 +4962,13 @@
dependencies:
"locate-path" "^2.0.0"
"find-up@^3.0.0":
"integrity" "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg=="
"resolved" "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz"
"version" "3.0.0"
dependencies:
"locate-path" "^3.0.0"
"find-up@^4.0.0":
"integrity" "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="
"resolved" "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz"
@@ -6548,6 +6611,11 @@
"resolved" "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz"
"version" "1.0.0"
"json-schema-typed@^7.0.3":
"integrity" "sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A=="
"resolved" "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-7.0.3.tgz"
"version" "7.0.3"
"json-schema@0.4.0":
"integrity" "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
"resolved" "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz"
@@ -6798,6 +6866,14 @@
"p-locate" "^2.0.0"
"path-exists" "^3.0.0"
"locate-path@^3.0.0":
"integrity" "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A=="
"resolved" "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz"
"version" "3.0.0"
dependencies:
"p-locate" "^3.0.0"
"path-exists" "^3.0.0"
"locate-path@^5.0.0":
"integrity" "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="
"resolved" "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz"
@@ -7050,6 +7126,11 @@
"resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz"
"version" "2.1.0"
"mimic-fn@^3.0.0":
"integrity" "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ=="
"resolved" "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz"
"version" "3.1.0"
"mimic-response@^1.0.0", "mimic-response@^1.0.1":
"integrity" "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
"resolved" "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz"
@@ -7220,6 +7301,11 @@
"resolved" "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz"
"version" "2.6.2"
"new-github-issue-url@^0.2.1":
"integrity" "sha512-md4cGoxuT4T4d/HDOXbrUHkTKrp/vp+m3aOA7XXVYwNsUNMK49g3SQicTSeV5GIz/5QVGAeYRAOlyp9OvlgsYA=="
"resolved" "https://registry.npmjs.org/new-github-issue-url/-/new-github-issue-url-0.2.1.tgz"
"version" "0.2.1"
"no-case@^3.0.4":
"integrity" "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg=="
"resolved" "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz"
@@ -7520,6 +7606,13 @@
dependencies:
"p-try" "^1.0.0"
"p-limit@^2.0.0":
"integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="
"resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz"
"version" "2.3.0"
dependencies:
"p-try" "^2.0.0"
"p-limit@^2.2.0":
"integrity" "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="
"resolved" "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz"
@@ -7541,6 +7634,13 @@
dependencies:
"p-limit" "^1.1.0"
"p-locate@^3.0.0":
"integrity" "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ=="
"resolved" "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz"
"version" "3.0.0"
dependencies:
"p-limit" "^2.0.0"
"p-locate@^4.1.0":
"integrity" "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="
"resolved" "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz"
@@ -7728,6 +7828,13 @@
dependencies:
"find-up" "^4.0.0"
"pkg-up@^3.1.0":
"integrity" "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA=="
"resolved" "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz"
"version" "3.1.0"
dependencies:
"find-up" "^3.0.0"
"plex-api-credentials@^4.0.1":
"integrity" "sha512-hxf7L5uBDXP7dS2cAk3PogVm07k0i9BBHfiOavWb64vhp4vhZHkuWV+9btzvEy0YlS47zyGeHB5m6V1DgCgxJA=="
"resolved" "https://registry.npmjs.org/plex-api-credentials/-/plex-api-credentials-4.0.1.tgz"
@@ -8162,6 +8269,13 @@
dependencies:
"escape-goat" "^2.0.0"
"qs@^6.11.0":
"integrity" "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q=="
"resolved" "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz"
"version" "6.11.0"
dependencies:
"side-channel" "^1.0.4"
"qs@~6.5.2":
"integrity" "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
"resolved" "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz"
@@ -8729,7 +8843,12 @@
"loose-envify" "^1.4.0"
"prop-types" "^15.6.2"
"react@*", "react@^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.6.0 || 17 || 18", "react@^16.8.0 || >=17.0.0 || >=18.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^17.0.0 || ^18.0.0", "react@^18.0.0", "react@^18.1.0", "react@^18.2.0", "react@>= 16", "react@>= 16.3.0", "react@>= 16.8.0", "react@>=16.0.0", "react@>=16.11.0", "react@>=16.13.1", "react@>=16.6.0", "react@>=16.8", "react@>=16.8.0", "react@>=16.9.0":
"react-xml-parser@^1.1.8":
"integrity" "sha512-yX9k9LNCRzzNnFWoyo9cWEjtor6n6VD0Uh7z1ww5rIP6h5vdhJKEmowsm9RumEJMRdr7akcT4mMBScpsz573qQ=="
"resolved" "https://registry.npmjs.org/react-xml-parser/-/react-xml-parser-1.1.8.tgz"
"version" "1.1.8"
"react@*", "react@^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.6.0 || 17 || 18", "react@^16.8.0 || >=17.0.0 || >=18.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^17.0.0 || ^18.0.0", "react@^18.0.0", "react@^18.1.0", "react@^18.2.0", "react@>= 16.3.0", "react@>= 16.8.0", "react@>=16.0.0", "react@>=16.11.0", "react@>=16.13.1", "react@>=16.6.0", "react@>=16.8", "react@>=16.8.0", "react@>=16.9.0":
"integrity" "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ=="
"resolved" "https://registry.npmjs.org/react/-/react-18.2.0.tgz"
"version" "18.2.0"
@@ -10087,6 +10206,11 @@
"resolved" "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz"
"version" "0.21.3"
"type-fest@^2.12.2":
"integrity" "sha512-U+g3/JVXnOki1kLSc+xZGPRll3Ah9u2VIG6Sn9iH9YX6UkPERmt6O/0fIyTgsd2/whV0+gAaHAg8fz6sG1QzMA=="
"resolved" "https://registry.npmjs.org/type-fest/-/type-fest-2.17.0.tgz"
"version" "2.17.0"
"type-is@~1.6.18":
"integrity" "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g=="
"resolved" "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"