mirror of
https://github.com/Sarsoo/Spotify.NET.git
synced 2024-12-22 22:26:27 +00:00
Compare commits
13 Commits
8f84d3530c
...
91b9fc9190
Author | SHA1 | Date | |
---|---|---|---|
|
91b9fc9190 | ||
|
4d577bccf0 | ||
|
842217e24b | ||
|
7364581251 | ||
|
be740ad565 | ||
|
290a0d1eb0 | ||
|
424e8109dc | ||
|
ae55ddb39b | ||
|
dfcd8a182b | ||
|
3fe87ef3bb | ||
|
c024602ada | ||
|
294b82a49c | ||
|
1399fff5f7 |
9
.github/workflows/cicd.yaml
vendored
9
.github/workflows/cicd.yaml
vendored
@ -12,16 +12,13 @@ jobs:
|
||||
uses: actions/checkout@v2
|
||||
- uses: actions/setup-dotnet@v1
|
||||
with:
|
||||
dotnet-version: "3.1.x"
|
||||
dotnet-version: "5.x"
|
||||
- uses: actions/setup-dotnet@v1
|
||||
with:
|
||||
dotnet-version: "5.0.x"
|
||||
dotnet-version: "6.x"
|
||||
- uses: actions/setup-dotnet@v1
|
||||
with:
|
||||
dotnet-version: "6.0.x"
|
||||
- uses: actions/setup-dotnet@v1
|
||||
with:
|
||||
dotnet-version: "7.0.x"
|
||||
dotnet-version: "7.0.203"
|
||||
- name: Set RELEASE_VERSION
|
||||
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
|
||||
- name: Restore Packages
|
||||
|
27
.vscode/launch.json
vendored
27
.vscode/launch.json
vendored
@ -1,27 +0,0 @@
|
||||
{
|
||||
// Use IntelliSense to find out which attributes exist for C# debugging
|
||||
// Use hover for the description of the existing attributes
|
||||
// For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Launch Example.ASP",
|
||||
"type": "coreclr",
|
||||
"request": "launch",
|
||||
"preLaunchTask": "Example.ASP-build",
|
||||
"program": "${workspaceFolder}/SpotifyAPI.Web.Examples/Example.ASP/bin/Debug/netcoreapp3.1/Example.ASP.dll",
|
||||
"args": [],
|
||||
"cwd": "${workspaceFolder}/SpotifyAPI.Web.Examples/Example.ASP",
|
||||
"stopAtEntry": false,
|
||||
// "serverReadyAction": {
|
||||
// "pattern": "^\\s*Now listening on:\\s+(https?://\\S+)"
|
||||
// },
|
||||
"env": {
|
||||
"ASPNETCORE_ENVIRONMENT": "Development"
|
||||
},
|
||||
"sourceFileMap": {
|
||||
"/Views": "${workspaceFolder}/Views"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
17
.vscode/tasks.json
vendored
17
.vscode/tasks.json
vendored
@ -1,17 +0,0 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Example.ASP-build",
|
||||
"command": "dotnet",
|
||||
"type": "process",
|
||||
"args": [
|
||||
"build",
|
||||
"${workspaceFolder}/SpotifyAPI.Web.Examples/Example.ASP/Example.ASP.csproj",
|
||||
"/property:GenerateFullPaths=true",
|
||||
"/consoleloggerparameters:NoSummary"
|
||||
],
|
||||
"problemMatcher": "$msCompile"
|
||||
}
|
||||
]
|
||||
}
|
@ -132,7 +132,7 @@ private static async void AuthOnAuthReceived(object sender, AuthorizationCode pa
|
||||
|
||||
// NEW
|
||||
var config = SpotifyClientConfig.CreateDefault();
|
||||
var server = new EmbedIOAuthServer(new Uri("http://localhost:5000/callback"), 5000);
|
||||
var server = new EmbedIOAuthServer(new Uri("http://localhost:5543/callback"), 5543);
|
||||
server.AuthorizationCodeReceived += async (sender, response) =>
|
||||
{
|
||||
await server.Stop();
|
||||
|
@ -10,9 +10,9 @@ title: Authorization Code
|
||||
If you are already in control of a Web-Server (like `ASP.NET`), you can start the flow by generating a login uri:
|
||||
|
||||
```csharp
|
||||
// Make sure "http://localhost:5000" is in your applications redirect URIs!
|
||||
// Make sure "http://localhost:5543" is in your applications redirect URIs!
|
||||
var loginRequest = new LoginRequest(
|
||||
new Uri("http://localhost:5000"),
|
||||
new Uri("http://localhost:5543"),
|
||||
"ClientId",
|
||||
LoginRequest.ResponseType.Code
|
||||
)
|
||||
@ -23,14 +23,14 @@ var uri = loginRequest.ToUri();
|
||||
// Redirect user to uri via your favorite web-server
|
||||
```
|
||||
|
||||
When the user is redirected to the generated uri, they will have to login with their Spotify account and confirm that your application wants to access their user data. Once confirmed, they will be redirected to `http://localhost:5000` and a `code` parameter is attached to the query. This `code` has to be exchanged for an `access_token` and `refresh_token`:
|
||||
When the user is redirected to the generated uri, they will have to login with their Spotify account and confirm that your application wants to access their user data. Once confirmed, they will be redirected to `http://localhost:5543` and a `code` parameter is attached to the query. This `code` has to be exchanged for an `access_token` and `refresh_token`:
|
||||
|
||||
```csharp
|
||||
// This method should be called from your web-server when the user visits "http://localhost:5000"
|
||||
// This method should be called from your web-server when the user visits "http://localhost:5543"
|
||||
public Task GetCallback(string code)
|
||||
{
|
||||
var response = await new OAuthClient().RequestToken(
|
||||
new AuthorizationCodeTokenRequest("ClientId", "ClientSecret", code, "http://localhost:5000")
|
||||
new AuthorizationCodeTokenRequest("ClientId", "ClientSecret", code, "http://localhost:5543")
|
||||
);
|
||||
|
||||
var spotify = new SpotifyClient(response.AccessToken);
|
||||
@ -52,7 +52,7 @@ You can also let the `AuthorizationCodeAuthenticator` take care of the refresh p
|
||||
|
||||
```csharp
|
||||
var response = await new OAuthClient().RequestToken(
|
||||
new AuthorizationCodeTokenRequest("ClientId", "ClientSecret", code, "http://localhost:5000")
|
||||
new AuthorizationCodeTokenRequest("ClientId", "ClientSecret", code, "http://localhost:5543")
|
||||
);
|
||||
var config = SpotifyClientConfig
|
||||
.CreateDefault()
|
||||
@ -76,8 +76,8 @@ private static EmbedIOAuthServer _server;
|
||||
|
||||
public static async Task Main()
|
||||
{
|
||||
// Make sure "http://localhost:5000/callback" is in your spotify application as redirect uri!
|
||||
_server = new EmbedIOAuthServer(new Uri("http://localhost:5000/callback"), 5000);
|
||||
// Make sure "http://localhost:5543/callback" is in your spotify application as redirect uri!
|
||||
_server = new EmbedIOAuthServer(new Uri("http://localhost:5543/callback"), 5543);
|
||||
await _server.Start();
|
||||
|
||||
_server.AuthorizationCodeReceived += OnAuthorizationCodeReceived;
|
||||
@ -97,7 +97,7 @@ private static async Task OnAuthorizationCodeReceived(object sender, Authorizati
|
||||
var config = SpotifyClientConfig.CreateDefault();
|
||||
var tokenResponse = await new OAuthClient(config).RequestToken(
|
||||
new AuthorizationCodeTokenRequest(
|
||||
"ClientId", "ClientSecret", response.Code, new Uri("http://localhost:5000/callback")
|
||||
"ClientId", "ClientSecret", response.Code, new Uri("http://localhost:5543/callback")
|
||||
)
|
||||
);
|
||||
|
||||
|
@ -17,7 +17,7 @@ This example is based on ASP .NET Core. It uses `Authorization Code` under the h
|
||||
|
||||
## Run it
|
||||
|
||||
Before running it, make sure you created an app in your [spotify dashboard](https://developer.spotify.com/dashboard/) and `https://localhost:5001` is a redirect uri of it.
|
||||
Before running it, make sure you created an app in your [spotify dashboard](https://developer.spotify.com/dashboard/) and `https://localhost:5543` is a redirect uri of it.
|
||||
|
||||
```bash
|
||||
# Assumes linux and current working directory is the cloned repository
|
||||
@ -26,5 +26,5 @@ dotnet restore
|
||||
|
||||
SPOTIFY_CLIENT_ID=YourClientId SPOTIFY_CLIENT_SECRET=YourClientSecret dotnet run
|
||||
|
||||
# Visit https://localhost:5001
|
||||
# Visit https://localhost:5543
|
||||
```
|
||||
|
@ -13,7 +13,7 @@ Very similar to the [Blazor WASM Example](example_blazor_wasm.md), but runs code
|
||||
|
||||
## Run it
|
||||
|
||||
Before running it, make sure you created an app in your [spotify dashboard](https://developer.spotify.com/dashboard/) and `https://localhost:5001` is a redirect uri of it.
|
||||
Before running it, make sure you created an app in your [spotify dashboard](https://developer.spotify.com/dashboard/) and `https://localhost:5543` is a redirect uri of it.
|
||||
|
||||
```bash
|
||||
# Assumes linux and current working directory is the cloned repository
|
||||
@ -22,5 +22,5 @@ dotnet restore
|
||||
|
||||
SPOTIFY_CLIENT_ID=YourClientId SPOTIFY_CLIENT_SECRET=YourClientSecret dotnet run
|
||||
|
||||
# Visit https://localhost:5001
|
||||
# Visit https://localhost:5543
|
||||
```
|
||||
|
@ -16,7 +16,7 @@ Since this library is compatible with `.NET Standard 2.1`, you can use all featu
|
||||
|
||||
## Run it
|
||||
|
||||
Before running it, make sure you created an app in your [spotify dashboard](https://developer.spotify.com/dashboard/) and `https://localhost:5001` is a redirect uri of it.
|
||||
Before running it, make sure you created an app in your [spotify dashboard](https://developer.spotify.com/dashboard/) and `https://localhost:5543` is a redirect uri of it.
|
||||
|
||||
```bash
|
||||
# Assumes linux and current working directory is the cloned repository
|
||||
@ -26,5 +26,5 @@ dotnet restore
|
||||
echo "{ \"SPOTIFY_CLIENT_ID\": \"YourSpotifyClientId\" }" > wwwroot/appsettings.json
|
||||
dotnet run
|
||||
|
||||
# Visit https://localhost:5001
|
||||
# Visit https://localhost:5543
|
||||
```
|
||||
|
@ -13,7 +13,7 @@ An example to show how you can display your own HTML resource after the user wen
|
||||
|
||||
## Run it
|
||||
|
||||
Before running it, make sure you created an app in your [spotify dashboard](https://developer.spotify.com/dashboard/) and `https://localhost:5001` is a redirect uri of it.
|
||||
Before running it, make sure you created an app in your [spotify dashboard](https://developer.spotify.com/dashboard/) and `https://localhost:5543` is a redirect uri of it.
|
||||
|
||||
```bash
|
||||
# Assumes linux and current working directory is the cloned repository
|
||||
|
@ -11,7 +11,7 @@ The access and refresh token is saved in a `credentials.json` file of the curren
|
||||
|
||||
## Run it
|
||||
|
||||
Before running it, make sure you created an app in your [spotify dashboard](https://developer.spotify.com/dashboard/) and `https://localhost:5000` is a redirect uri of it.
|
||||
Before running it, make sure you created an app in your [spotify dashboard](https://developer.spotify.com/dashboard/) and `https://localhost:5543` is a redirect uri of it.
|
||||
|
||||
```bash
|
||||
# Assumes linux and current working directory is the cloned repository
|
||||
|
@ -14,9 +14,9 @@ This flow is useful for getting a user access token for a short timespan.
|
||||
If you are already in control of a Web-Server (like `ASP.NET`), you can start the flow by generating a login uri:
|
||||
|
||||
```csharp
|
||||
// Make sure "http://localhost:5000" is in your applications redirect URIs!
|
||||
// Make sure "http://localhost:5543" is in your applications redirect URIs!
|
||||
var loginRequest = new LoginRequest(
|
||||
new Uri("http://localhost:5000"),
|
||||
new Uri("http://localhost:5543"),
|
||||
"ClientId",
|
||||
LoginRequest.ResponseType.Token
|
||||
)
|
||||
@ -27,7 +27,7 @@ var uri = loginRequest.ToUri();
|
||||
// Redirect user to uri via your favorite web-server
|
||||
```
|
||||
|
||||
When the user is redirected to the generated uri, they will have to login with their Spotify account and confirm that your application wants to access their user data. Once confirmed, they will be redirected to `http://localhost:5000` and the fragment identifier (`#` part of URI) will contain an access token.
|
||||
When the user is redirected to the generated uri, they will have to login with their Spotify account and confirm that your application wants to access their user data. Once confirmed, they will be redirected to `http://localhost:5543` and the fragment identifier (`#` part of URI) will contain an access token.
|
||||
|
||||
:::warning
|
||||
Note, this parameter is not sent to the server! You need JavaScript to access it.
|
||||
@ -77,15 +77,15 @@ For a real example, have a look at the [Example.UWP](https://github.com/JohnnyCr
|
||||
|
||||
# Using Spotify.Web.Auth
|
||||
|
||||
For cross-platform CLI and desktop apps (non `UWP` apps), custom protocol handlers are sometimes not an option. The fallback here is a small cross-platform embedded web server running on `http://localhost:5000` serving JavaScript. The JavaScript will parse the fragment part of the URI and sends a request to the web server in the background. The web server then notifies your appliciation via an event.
|
||||
For cross-platform CLI and desktop apps (non `UWP` apps), custom protocol handlers are sometimes not an option. The fallback here is a small cross-platform embedded web server running on `http://localhost:5543` serving JavaScript. The JavaScript will parse the fragment part of the URI and sends a request to the web server in the background. The web server then notifies your appliciation via an event.
|
||||
|
||||
```csharp
|
||||
private static EmbedIOAuthServer _server;
|
||||
|
||||
public static async Task Main()
|
||||
{
|
||||
// Make sure "http://localhost:5000/callback" is in your spotify application as redirect uri!
|
||||
_server = new EmbedIOAuthServer(new Uri("http://localhost:5000/callback"), 5000);
|
||||
// Make sure "http://localhost:5543/callback" is in your spotify application as redirect uri!
|
||||
_server = new EmbedIOAuthServer(new Uri("http://localhost:5543/callback"), 5543);
|
||||
await _server.Start();
|
||||
|
||||
_server.ImplictGrantReceived += OnImplicitGrantReceived;
|
||||
|
@ -25,9 +25,9 @@ var (verifier, challenge) = PKCEUtil.GenerateCodes("YourSecureRandomString");
|
||||
Like most auth flows, you'll need to redirect your user to Spotify's servers so they are able to grant access to your application:
|
||||
|
||||
```csharp
|
||||
// Make sure "http://localhost:5000/callback" is in your applications redirect URIs!
|
||||
// Make sure "http://localhost:5543/callback" is in your applications redirect URIs!
|
||||
var loginRequest = new LoginRequest(
|
||||
new Uri("http://localhost:5000/callback"),
|
||||
new Uri("http://localhost:5543/callback"),
|
||||
"YourClientId",
|
||||
LoginRequest.ResponseType.Code
|
||||
)
|
||||
@ -40,15 +40,15 @@ var uri = loginRequest.ToUri();
|
||||
// Redirect user to uri via your favorite web-server or open a local browser window
|
||||
```
|
||||
|
||||
When the user is redirected to the generated uri, they will have to login with their Spotify account and confirm that your application wants to access their user data. Once confirmed, they will be redirected to `http://localhost:5000/callback` and a `code` parameter is attached to the query. The redirect URI can also contain a custom protocol paired with UWP App Custom Protocol handler. This received `code` has to be exchanged for an `access_token` and `refresh_token`:
|
||||
When the user is redirected to the generated uri, they will have to login with their Spotify account and confirm that your application wants to access their user data. Once confirmed, they will be redirected to `http://localhost:5543/callback` and a `code` parameter is attached to the query. The redirect URI can also contain a custom protocol paired with UWP App Custom Protocol handler. This received `code` has to be exchanged for an `access_token` and `refresh_token`:
|
||||
|
||||
```csharp
|
||||
// This method should be called from your web-server when the user visits "http://localhost:5000/callback"
|
||||
// This method should be called from your web-server when the user visits "http://localhost:5543/callback"
|
||||
public Task GetCallback(string code)
|
||||
{
|
||||
// Note that we use the verifier calculated above!
|
||||
var initialResponse = await new OAuthClient().RequestToken(
|
||||
new PKCETokenRequest("ClientId", code, "http://localhost:5000", verifier)
|
||||
new PKCETokenRequest("ClientId", code, "http://localhost:5543", verifier)
|
||||
);
|
||||
|
||||
var spotify = new SpotifyClient(initialResponse.AccessToken);
|
||||
|
@ -14,8 +14,8 @@
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@docusaurus/core": "^2.0.0-beta.4",
|
||||
"@docusaurus/preset-classic": "^2.0.0-beta.4",
|
||||
"@docusaurus/core": "^2.4.1",
|
||||
"@docusaurus/preset-classic": "^2.4.1",
|
||||
"classnames": "^2.3.1",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2",
|
||||
@ -35,7 +35,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"import-sort-style-module": "^6.0.0",
|
||||
"prettier": "^2.3.2",
|
||||
"prettier": "^2.8.8",
|
||||
"prettier-plugin-import-sort": "^0.0.7"
|
||||
}
|
||||
}
|
||||
|
@ -1353,10 +1353,10 @@
|
||||
"@docsearch/css" "3.3.0"
|
||||
algoliasearch "^4.0.0"
|
||||
|
||||
"@docusaurus/core@2.2.0", "@docusaurus/core@^2.0.0-beta.4":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.2.0.tgz#64c9ee31502c23b93c869f8188f73afaf5fd4867"
|
||||
integrity sha512-Vd6XOluKQqzG12fEs9prJgDtyn6DPok9vmUWDR2E6/nV5Fl9SVkhEQOBxwObjk3kQh7OY7vguFaLh0jqdApWsA==
|
||||
"@docusaurus/core@2.4.1", "@docusaurus/core@^2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.4.1.tgz#4b8ff5766131ce3fbccaad0b1daf2ad4dc76f62d"
|
||||
integrity sha512-SNsY7PshK3Ri7vtsLXVeAJGS50nJN3RgF836zkyUfAD01Fq+sAk5EwWgLw+nnm5KVNGDu7PRR2kRGDsWvqpo0g==
|
||||
dependencies:
|
||||
"@babel/core" "^7.18.6"
|
||||
"@babel/generator" "^7.18.7"
|
||||
@ -1368,13 +1368,13 @@
|
||||
"@babel/runtime" "^7.18.6"
|
||||
"@babel/runtime-corejs3" "^7.18.6"
|
||||
"@babel/traverse" "^7.18.8"
|
||||
"@docusaurus/cssnano-preset" "2.2.0"
|
||||
"@docusaurus/logger" "2.2.0"
|
||||
"@docusaurus/mdx-loader" "2.2.0"
|
||||
"@docusaurus/cssnano-preset" "2.4.1"
|
||||
"@docusaurus/logger" "2.4.1"
|
||||
"@docusaurus/mdx-loader" "2.4.1"
|
||||
"@docusaurus/react-loadable" "5.5.2"
|
||||
"@docusaurus/utils" "2.2.0"
|
||||
"@docusaurus/utils-common" "2.2.0"
|
||||
"@docusaurus/utils-validation" "2.2.0"
|
||||
"@docusaurus/utils" "2.4.1"
|
||||
"@docusaurus/utils-common" "2.4.1"
|
||||
"@docusaurus/utils-validation" "2.4.1"
|
||||
"@slorber/static-site-generator-webpack-plugin" "^4.0.7"
|
||||
"@svgr/webpack" "^6.2.1"
|
||||
autoprefixer "^10.4.7"
|
||||
@ -1395,7 +1395,7 @@
|
||||
del "^6.1.1"
|
||||
detect-port "^1.3.0"
|
||||
escape-html "^1.0.3"
|
||||
eta "^1.12.3"
|
||||
eta "^2.0.0"
|
||||
file-loader "^6.2.0"
|
||||
fs-extra "^10.1.0"
|
||||
html-minifier-terser "^6.1.0"
|
||||
@ -1430,33 +1430,33 @@
|
||||
webpack-merge "^5.8.0"
|
||||
webpackbar "^5.0.2"
|
||||
|
||||
"@docusaurus/cssnano-preset@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz#fc05044659051ae74ab4482afcf4a9936e81d523"
|
||||
integrity sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==
|
||||
"@docusaurus/cssnano-preset@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.1.tgz#eacadefb1e2e0f59df3467a0fe83e4ff79eed163"
|
||||
integrity sha512-ka+vqXwtcW1NbXxWsh6yA1Ckii1klY9E53cJ4O9J09nkMBgrNX3iEFED1fWdv8wf4mJjvGi5RLZ2p9hJNjsLyQ==
|
||||
dependencies:
|
||||
cssnano-preset-advanced "^5.3.8"
|
||||
postcss "^8.4.14"
|
||||
postcss-sort-media-queries "^4.2.1"
|
||||
tslib "^2.4.0"
|
||||
|
||||
"@docusaurus/logger@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.2.0.tgz#ea2f7feda7b8675485933b87f06d9c976d17423f"
|
||||
integrity sha512-DF3j1cA5y2nNsu/vk8AG7xwpZu6f5MKkPPMaaIbgXLnWGfm6+wkOeW7kNrxnM95YOhKUkJUophX69nGUnLsm0A==
|
||||
"@docusaurus/logger@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.4.1.tgz#4d2c0626b40752641f9fdd93ad9b5a7a0792f767"
|
||||
integrity sha512-5h5ysIIWYIDHyTVd8BjheZmQZmEgWDR54aQ1BX9pjFfpyzFo5puKXKYrYJXbjEHGyVhEzmB9UXwbxGfaZhOjcg==
|
||||
dependencies:
|
||||
chalk "^4.1.2"
|
||||
tslib "^2.4.0"
|
||||
|
||||
"@docusaurus/mdx-loader@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz#fd558f429e5d9403d284bd4214e54d9768b041a0"
|
||||
integrity sha512-X2bzo3T0jW0VhUU+XdQofcEeozXOTmKQMvc8tUnWRdTnCvj4XEcBVdC3g+/jftceluiwSTNRAX4VBOJdNt18jA==
|
||||
"@docusaurus/mdx-loader@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.4.1.tgz#6425075d7fc136dbfdc121349060cedd64118393"
|
||||
integrity sha512-4KhUhEavteIAmbBj7LVFnrVYDiU51H5YWW1zY6SmBSte/YLhDutztLTBE0PQl1Grux1jzUJeaSvAzHpTn6JJDQ==
|
||||
dependencies:
|
||||
"@babel/parser" "^7.18.8"
|
||||
"@babel/traverse" "^7.18.8"
|
||||
"@docusaurus/logger" "2.2.0"
|
||||
"@docusaurus/utils" "2.2.0"
|
||||
"@docusaurus/logger" "2.4.1"
|
||||
"@docusaurus/utils" "2.4.1"
|
||||
"@mdx-js/mdx" "^1.6.22"
|
||||
escape-html "^1.0.3"
|
||||
file-loader "^6.2.0"
|
||||
@ -1471,13 +1471,13 @@
|
||||
url-loader "^4.1.1"
|
||||
webpack "^5.73.0"
|
||||
|
||||
"@docusaurus/module-type-aliases@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.2.0.tgz#1e23e54a1bbb6fde1961e4fa395b1b69f4803ba5"
|
||||
integrity sha512-wDGW4IHKoOr9YuJgy7uYuKWrDrSpsUSDHLZnWQYM9fN7D5EpSmYHjFruUpKWVyxLpD/Wh0rW8hYZwdjJIQUQCQ==
|
||||
"@docusaurus/module-type-aliases@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.1.tgz#38b3c2d2ae44bea6d57506eccd84280216f0171c"
|
||||
integrity sha512-gLBuIFM8Dp2XOCWffUDSjtxY7jQgKvYujt7Mx5s4FCTfoL5dN1EVbnrn+O2Wvh8b0a77D57qoIDY7ghgmatR1A==
|
||||
dependencies:
|
||||
"@docusaurus/react-loadable" "5.5.2"
|
||||
"@docusaurus/types" "2.2.0"
|
||||
"@docusaurus/types" "2.4.1"
|
||||
"@types/history" "^4.7.11"
|
||||
"@types/react" "*"
|
||||
"@types/react-router-config" "*"
|
||||
@ -1485,18 +1485,18 @@
|
||||
react-helmet-async "*"
|
||||
react-loadable "npm:@docusaurus/react-loadable@5.5.2"
|
||||
|
||||
"@docusaurus/plugin-content-blog@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz#dc55982e76771f4e678ac10e26d10e1da2011dc1"
|
||||
integrity sha512-0mWBinEh0a5J2+8ZJXJXbrCk1tSTNf7Nm4tYAl5h2/xx+PvH/Bnu0V+7mMljYm/1QlDYALNIIaT/JcoZQFUN3w==
|
||||
"@docusaurus/plugin-content-blog@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.1.tgz#c705a8b1a36a34f181dcf43b7770532e4dcdc4a3"
|
||||
integrity sha512-E2i7Knz5YIbE1XELI6RlTnZnGgS52cUO4BlCiCUCvQHbR+s1xeIWz4C6BtaVnlug0Ccz7nFSksfwDpVlkujg5Q==
|
||||
dependencies:
|
||||
"@docusaurus/core" "2.2.0"
|
||||
"@docusaurus/logger" "2.2.0"
|
||||
"@docusaurus/mdx-loader" "2.2.0"
|
||||
"@docusaurus/types" "2.2.0"
|
||||
"@docusaurus/utils" "2.2.0"
|
||||
"@docusaurus/utils-common" "2.2.0"
|
||||
"@docusaurus/utils-validation" "2.2.0"
|
||||
"@docusaurus/core" "2.4.1"
|
||||
"@docusaurus/logger" "2.4.1"
|
||||
"@docusaurus/mdx-loader" "2.4.1"
|
||||
"@docusaurus/types" "2.4.1"
|
||||
"@docusaurus/utils" "2.4.1"
|
||||
"@docusaurus/utils-common" "2.4.1"
|
||||
"@docusaurus/utils-validation" "2.4.1"
|
||||
cheerio "^1.0.0-rc.12"
|
||||
feed "^4.2.2"
|
||||
fs-extra "^10.1.0"
|
||||
@ -1507,18 +1507,18 @@
|
||||
utility-types "^3.10.0"
|
||||
webpack "^5.73.0"
|
||||
|
||||
"@docusaurus/plugin-content-docs@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz#0fcb85226fcdb80dc1e2d4a36ef442a650dcc84d"
|
||||
integrity sha512-BOazBR0XjzsHE+2K1wpNxz5QZmrJgmm3+0Re0EVPYFGW8qndCWGNtXW/0lGKhecVPML8yyFeAmnUCIs7xM2wPw==
|
||||
"@docusaurus/plugin-content-docs@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.1.tgz#ed94d9721b5ce7a956fb01cc06c40d8eee8dfca7"
|
||||
integrity sha512-Lo7lSIcpswa2Kv4HEeUcGYqaasMUQNpjTXpV0N8G6jXgZaQurqp7E8NGYeGbDXnb48czmHWbzDL4S3+BbK0VzA==
|
||||
dependencies:
|
||||
"@docusaurus/core" "2.2.0"
|
||||
"@docusaurus/logger" "2.2.0"
|
||||
"@docusaurus/mdx-loader" "2.2.0"
|
||||
"@docusaurus/module-type-aliases" "2.2.0"
|
||||
"@docusaurus/types" "2.2.0"
|
||||
"@docusaurus/utils" "2.2.0"
|
||||
"@docusaurus/utils-validation" "2.2.0"
|
||||
"@docusaurus/core" "2.4.1"
|
||||
"@docusaurus/logger" "2.4.1"
|
||||
"@docusaurus/mdx-loader" "2.4.1"
|
||||
"@docusaurus/module-type-aliases" "2.4.1"
|
||||
"@docusaurus/types" "2.4.1"
|
||||
"@docusaurus/utils" "2.4.1"
|
||||
"@docusaurus/utils-validation" "2.4.1"
|
||||
"@types/react-router-config" "^5.0.6"
|
||||
combine-promises "^1.1.0"
|
||||
fs-extra "^10.1.0"
|
||||
@ -1529,84 +1529,95 @@
|
||||
utility-types "^3.10.0"
|
||||
webpack "^5.73.0"
|
||||
|
||||
"@docusaurus/plugin-content-pages@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz#e3f40408787bbe229545dd50595f87e1393bc3ae"
|
||||
integrity sha512-+OTK3FQHk5WMvdelz8v19PbEbx+CNT6VSpx7nVOvMNs5yJCKvmqBJBQ2ZSxROxhVDYn+CZOlmyrC56NSXzHf6g==
|
||||
"@docusaurus/plugin-content-pages@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.1.tgz#c534f7e49967699a45bbe67050d1605ebbf3d285"
|
||||
integrity sha512-/UjuH/76KLaUlL+o1OvyORynv6FURzjurSjvn2lbWTFc4tpYY2qLYTlKpTCBVPhlLUQsfyFnshEJDLmPneq2oA==
|
||||
dependencies:
|
||||
"@docusaurus/core" "2.2.0"
|
||||
"@docusaurus/mdx-loader" "2.2.0"
|
||||
"@docusaurus/types" "2.2.0"
|
||||
"@docusaurus/utils" "2.2.0"
|
||||
"@docusaurus/utils-validation" "2.2.0"
|
||||
"@docusaurus/core" "2.4.1"
|
||||
"@docusaurus/mdx-loader" "2.4.1"
|
||||
"@docusaurus/types" "2.4.1"
|
||||
"@docusaurus/utils" "2.4.1"
|
||||
"@docusaurus/utils-validation" "2.4.1"
|
||||
fs-extra "^10.1.0"
|
||||
tslib "^2.4.0"
|
||||
webpack "^5.73.0"
|
||||
|
||||
"@docusaurus/plugin-debug@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz#b38741d2c492f405fee01ee0ef2e0029cedb689a"
|
||||
integrity sha512-p9vOep8+7OVl6r/NREEYxf4HMAjV8JMYJ7Bos5fCFO0Wyi9AZEo0sCTliRd7R8+dlJXZEgcngSdxAUo/Q+CJow==
|
||||
"@docusaurus/plugin-debug@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.4.1.tgz#461a2c77b0c5a91b2c05257c8f9585412aaa59dc"
|
||||
integrity sha512-7Yu9UPzRShlrH/G8btOpR0e6INFZr0EegWplMjOqelIwAcx3PKyR8mgPTxGTxcqiYj6hxSCRN0D8R7YrzImwNA==
|
||||
dependencies:
|
||||
"@docusaurus/core" "2.2.0"
|
||||
"@docusaurus/types" "2.2.0"
|
||||
"@docusaurus/utils" "2.2.0"
|
||||
"@docusaurus/core" "2.4.1"
|
||||
"@docusaurus/types" "2.4.1"
|
||||
"@docusaurus/utils" "2.4.1"
|
||||
fs-extra "^10.1.0"
|
||||
react-json-view "^1.21.3"
|
||||
tslib "^2.4.0"
|
||||
|
||||
"@docusaurus/plugin-google-analytics@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz#63c7137eff5a1208d2059fea04b5207c037d7954"
|
||||
integrity sha512-+eZVVxVeEnV5nVQJdey9ZsfyEVMls6VyWTIj8SmX0k5EbqGvnIfET+J2pYEuKQnDIHxy+syRMoRM6AHXdHYGIg==
|
||||
"@docusaurus/plugin-google-analytics@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.1.tgz#30de1c35773bf9d52bb2d79b201b23eb98022613"
|
||||
integrity sha512-dyZJdJiCoL+rcfnm0RPkLt/o732HvLiEwmtoNzOoz9MSZz117UH2J6U2vUDtzUzwtFLIf32KkeyzisbwUCgcaQ==
|
||||
dependencies:
|
||||
"@docusaurus/core" "2.2.0"
|
||||
"@docusaurus/types" "2.2.0"
|
||||
"@docusaurus/utils-validation" "2.2.0"
|
||||
"@docusaurus/core" "2.4.1"
|
||||
"@docusaurus/types" "2.4.1"
|
||||
"@docusaurus/utils-validation" "2.4.1"
|
||||
tslib "^2.4.0"
|
||||
|
||||
"@docusaurus/plugin-google-gtag@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz#7b086d169ac5fe9a88aca10ab0fd2bf00c6c6b12"
|
||||
integrity sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==
|
||||
"@docusaurus/plugin-google-gtag@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.1.tgz#6a3eb91022714735e625c7ca70ef5188fa7bd0dc"
|
||||
integrity sha512-mKIefK+2kGTQBYvloNEKtDmnRD7bxHLsBcxgnbt4oZwzi2nxCGjPX6+9SQO2KCN5HZbNrYmGo5GJfMgoRvy6uA==
|
||||
dependencies:
|
||||
"@docusaurus/core" "2.2.0"
|
||||
"@docusaurus/types" "2.2.0"
|
||||
"@docusaurus/utils-validation" "2.2.0"
|
||||
"@docusaurus/core" "2.4.1"
|
||||
"@docusaurus/types" "2.4.1"
|
||||
"@docusaurus/utils-validation" "2.4.1"
|
||||
tslib "^2.4.0"
|
||||
|
||||
"@docusaurus/plugin-sitemap@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz#876da60937886032d63143253d420db6a4b34773"
|
||||
integrity sha512-0jAmyRDN/aI265CbWZNZuQpFqiZuo+5otk2MylU9iVrz/4J7gSc+ZJ9cy4EHrEsW7PV8s1w18hIEsmcA1YgkKg==
|
||||
"@docusaurus/plugin-google-tag-manager@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.1.tgz#b99f71aec00b112bbf509ef2416e404a95eb607e"
|
||||
integrity sha512-Zg4Ii9CMOLfpeV2nG74lVTWNtisFaH9QNtEw48R5QE1KIwDBdTVaiSA18G1EujZjrzJJzXN79VhINSbOJO/r3g==
|
||||
dependencies:
|
||||
"@docusaurus/core" "2.2.0"
|
||||
"@docusaurus/logger" "2.2.0"
|
||||
"@docusaurus/types" "2.2.0"
|
||||
"@docusaurus/utils" "2.2.0"
|
||||
"@docusaurus/utils-common" "2.2.0"
|
||||
"@docusaurus/utils-validation" "2.2.0"
|
||||
"@docusaurus/core" "2.4.1"
|
||||
"@docusaurus/types" "2.4.1"
|
||||
"@docusaurus/utils-validation" "2.4.1"
|
||||
tslib "^2.4.0"
|
||||
|
||||
"@docusaurus/plugin-sitemap@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.1.tgz#8a7a76ed69dc3e6b4474b6abb10bb03336a9de6d"
|
||||
integrity sha512-lZx+ijt/+atQ3FVE8FOHV/+X3kuok688OydDXrqKRJyXBJZKgGjA2Qa8RjQ4f27V2woaXhtnyrdPop/+OjVMRg==
|
||||
dependencies:
|
||||
"@docusaurus/core" "2.4.1"
|
||||
"@docusaurus/logger" "2.4.1"
|
||||
"@docusaurus/types" "2.4.1"
|
||||
"@docusaurus/utils" "2.4.1"
|
||||
"@docusaurus/utils-common" "2.4.1"
|
||||
"@docusaurus/utils-validation" "2.4.1"
|
||||
fs-extra "^10.1.0"
|
||||
sitemap "^7.1.1"
|
||||
tslib "^2.4.0"
|
||||
|
||||
"@docusaurus/preset-classic@^2.0.0-beta.4":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz#bece5a043eeb74430f7c6c7510000b9c43669eb7"
|
||||
integrity sha512-yKIWPGNx7BT8v2wjFIWvYrS+nvN04W+UameSFf8lEiJk6pss0kL6SG2MRvyULiI3BDxH+tj6qe02ncpSPGwumg==
|
||||
"@docusaurus/preset-classic@^2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.4.1.tgz#072f22d0332588e9c5f512d4bded8d7c99f91497"
|
||||
integrity sha512-P4//+I4zDqQJ+UDgoFrjIFaQ1MeS9UD1cvxVQaI6O7iBmiHQm0MGROP1TbE7HlxlDPXFJjZUK3x3cAoK63smGQ==
|
||||
dependencies:
|
||||
"@docusaurus/core" "2.2.0"
|
||||
"@docusaurus/plugin-content-blog" "2.2.0"
|
||||
"@docusaurus/plugin-content-docs" "2.2.0"
|
||||
"@docusaurus/plugin-content-pages" "2.2.0"
|
||||
"@docusaurus/plugin-debug" "2.2.0"
|
||||
"@docusaurus/plugin-google-analytics" "2.2.0"
|
||||
"@docusaurus/plugin-google-gtag" "2.2.0"
|
||||
"@docusaurus/plugin-sitemap" "2.2.0"
|
||||
"@docusaurus/theme-classic" "2.2.0"
|
||||
"@docusaurus/theme-common" "2.2.0"
|
||||
"@docusaurus/theme-search-algolia" "2.2.0"
|
||||
"@docusaurus/types" "2.2.0"
|
||||
"@docusaurus/core" "2.4.1"
|
||||
"@docusaurus/plugin-content-blog" "2.4.1"
|
||||
"@docusaurus/plugin-content-docs" "2.4.1"
|
||||
"@docusaurus/plugin-content-pages" "2.4.1"
|
||||
"@docusaurus/plugin-debug" "2.4.1"
|
||||
"@docusaurus/plugin-google-analytics" "2.4.1"
|
||||
"@docusaurus/plugin-google-gtag" "2.4.1"
|
||||
"@docusaurus/plugin-google-tag-manager" "2.4.1"
|
||||
"@docusaurus/plugin-sitemap" "2.4.1"
|
||||
"@docusaurus/theme-classic" "2.4.1"
|
||||
"@docusaurus/theme-common" "2.4.1"
|
||||
"@docusaurus/theme-search-algolia" "2.4.1"
|
||||
"@docusaurus/types" "2.4.1"
|
||||
|
||||
"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2":
|
||||
version "5.5.2"
|
||||
@ -1616,27 +1627,27 @@
|
||||
"@types/react" "*"
|
||||
prop-types "^15.6.2"
|
||||
|
||||
"@docusaurus/theme-classic@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz#a048bb1bc077dee74b28bec25f4b84b481863742"
|
||||
integrity sha512-kjbg/qJPwZ6H1CU/i9d4l/LcFgnuzeiGgMQlt6yPqKo0SOJIBMPuz7Rnu3r/WWbZFPi//o8acclacOzmXdUUEg==
|
||||
"@docusaurus/theme-classic@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.4.1.tgz#0060cb263c1a73a33ac33f79bb6bc2a12a56ad9e"
|
||||
integrity sha512-Rz0wKUa+LTW1PLXmwnf8mn85EBzaGSt6qamqtmnh9Hflkc+EqiYMhtUJeLdV+wsgYq4aG0ANc+bpUDpsUhdnwg==
|
||||
dependencies:
|
||||
"@docusaurus/core" "2.2.0"
|
||||
"@docusaurus/mdx-loader" "2.2.0"
|
||||
"@docusaurus/module-type-aliases" "2.2.0"
|
||||
"@docusaurus/plugin-content-blog" "2.2.0"
|
||||
"@docusaurus/plugin-content-docs" "2.2.0"
|
||||
"@docusaurus/plugin-content-pages" "2.2.0"
|
||||
"@docusaurus/theme-common" "2.2.0"
|
||||
"@docusaurus/theme-translations" "2.2.0"
|
||||
"@docusaurus/types" "2.2.0"
|
||||
"@docusaurus/utils" "2.2.0"
|
||||
"@docusaurus/utils-common" "2.2.0"
|
||||
"@docusaurus/utils-validation" "2.2.0"
|
||||
"@docusaurus/core" "2.4.1"
|
||||
"@docusaurus/mdx-loader" "2.4.1"
|
||||
"@docusaurus/module-type-aliases" "2.4.1"
|
||||
"@docusaurus/plugin-content-blog" "2.4.1"
|
||||
"@docusaurus/plugin-content-docs" "2.4.1"
|
||||
"@docusaurus/plugin-content-pages" "2.4.1"
|
||||
"@docusaurus/theme-common" "2.4.1"
|
||||
"@docusaurus/theme-translations" "2.4.1"
|
||||
"@docusaurus/types" "2.4.1"
|
||||
"@docusaurus/utils" "2.4.1"
|
||||
"@docusaurus/utils-common" "2.4.1"
|
||||
"@docusaurus/utils-validation" "2.4.1"
|
||||
"@mdx-js/react" "^1.6.22"
|
||||
clsx "^1.2.1"
|
||||
copy-text-to-clipboard "^3.0.1"
|
||||
infima "0.2.0-alpha.42"
|
||||
infima "0.2.0-alpha.43"
|
||||
lodash "^4.17.21"
|
||||
nprogress "^0.2.0"
|
||||
postcss "^8.4.14"
|
||||
@ -1647,17 +1658,18 @@
|
||||
tslib "^2.4.0"
|
||||
utility-types "^3.10.0"
|
||||
|
||||
"@docusaurus/theme-common@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.2.0.tgz#2303498d80448aafdd588b597ce9d6f4cfa930e4"
|
||||
integrity sha512-R8BnDjYoN90DCL75gP7qYQfSjyitXuP9TdzgsKDmSFPNyrdE3twtPNa2dIN+h+p/pr+PagfxwWbd6dn722A1Dw==
|
||||
"@docusaurus/theme-common@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.4.1.tgz#03e16f7aa96455e952f3243ac99757b01a3c83d4"
|
||||
integrity sha512-G7Zau1W5rQTaFFB3x3soQoZpkgMbl/SYNG8PfMFIjKa3M3q8n0m/GRf5/H/e5BqOvt8c+ZWIXGCiz+kUCSHovA==
|
||||
dependencies:
|
||||
"@docusaurus/mdx-loader" "2.2.0"
|
||||
"@docusaurus/module-type-aliases" "2.2.0"
|
||||
"@docusaurus/plugin-content-blog" "2.2.0"
|
||||
"@docusaurus/plugin-content-docs" "2.2.0"
|
||||
"@docusaurus/plugin-content-pages" "2.2.0"
|
||||
"@docusaurus/utils" "2.2.0"
|
||||
"@docusaurus/mdx-loader" "2.4.1"
|
||||
"@docusaurus/module-type-aliases" "2.4.1"
|
||||
"@docusaurus/plugin-content-blog" "2.4.1"
|
||||
"@docusaurus/plugin-content-docs" "2.4.1"
|
||||
"@docusaurus/plugin-content-pages" "2.4.1"
|
||||
"@docusaurus/utils" "2.4.1"
|
||||
"@docusaurus/utils-common" "2.4.1"
|
||||
"@types/history" "^4.7.11"
|
||||
"@types/react" "*"
|
||||
"@types/react-router-config" "*"
|
||||
@ -1665,42 +1677,43 @@
|
||||
parse-numeric-range "^1.3.0"
|
||||
prism-react-renderer "^1.3.5"
|
||||
tslib "^2.4.0"
|
||||
use-sync-external-store "^1.2.0"
|
||||
utility-types "^3.10.0"
|
||||
|
||||
"@docusaurus/theme-search-algolia@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz#77fd9f7a600917e6024fe3ac7fb6cfdf2ce84737"
|
||||
integrity sha512-2h38B0tqlxgR2FZ9LpAkGrpDWVdXZ7vltfmTdX+4RsDs3A7khiNsmZB+x/x6sA4+G2V2CvrsPMlsYBy5X+cY1w==
|
||||
"@docusaurus/theme-search-algolia@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.1.tgz#906bd2cca3fced0241985ef502c892f58ff380fc"
|
||||
integrity sha512-6BcqW2lnLhZCXuMAvPRezFs1DpmEKzXFKlYjruuas+Xy3AQeFzDJKTJFIm49N77WFCTyxff8d3E4Q9pi/+5McQ==
|
||||
dependencies:
|
||||
"@docsearch/react" "^3.1.1"
|
||||
"@docusaurus/core" "2.2.0"
|
||||
"@docusaurus/logger" "2.2.0"
|
||||
"@docusaurus/plugin-content-docs" "2.2.0"
|
||||
"@docusaurus/theme-common" "2.2.0"
|
||||
"@docusaurus/theme-translations" "2.2.0"
|
||||
"@docusaurus/utils" "2.2.0"
|
||||
"@docusaurus/utils-validation" "2.2.0"
|
||||
"@docusaurus/core" "2.4.1"
|
||||
"@docusaurus/logger" "2.4.1"
|
||||
"@docusaurus/plugin-content-docs" "2.4.1"
|
||||
"@docusaurus/theme-common" "2.4.1"
|
||||
"@docusaurus/theme-translations" "2.4.1"
|
||||
"@docusaurus/utils" "2.4.1"
|
||||
"@docusaurus/utils-validation" "2.4.1"
|
||||
algoliasearch "^4.13.1"
|
||||
algoliasearch-helper "^3.10.0"
|
||||
clsx "^1.2.1"
|
||||
eta "^1.12.3"
|
||||
eta "^2.0.0"
|
||||
fs-extra "^10.1.0"
|
||||
lodash "^4.17.21"
|
||||
tslib "^2.4.0"
|
||||
utility-types "^3.10.0"
|
||||
|
||||
"@docusaurus/theme-translations@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz#5fbd4693679806f80c26eeae1381e1f2c23d83e7"
|
||||
integrity sha512-3T140AG11OjJrtKlY4pMZ5BzbGRDjNs2co5hJ6uYJG1bVWlhcaFGqkaZ5lCgKflaNHD7UHBHU9Ec5f69jTdd6w==
|
||||
"@docusaurus/theme-translations@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.4.1.tgz#4d49df5865dae9ef4b98a19284ede62ae6f98726"
|
||||
integrity sha512-T1RAGP+f86CA1kfE8ejZ3T3pUU3XcyvrGMfC/zxCtc2BsnoexuNI9Vk2CmuKCb+Tacvhxjv5unhxXce0+NKyvA==
|
||||
dependencies:
|
||||
fs-extra "^10.1.0"
|
||||
tslib "^2.4.0"
|
||||
|
||||
"@docusaurus/types@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.2.0.tgz#02c577a4041ab7d058a3c214ccb13647e21a9857"
|
||||
integrity sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==
|
||||
"@docusaurus/types@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.4.1.tgz#d8e82f9e0f704984f98df1f93d6b4554d5458705"
|
||||
integrity sha512-0R+cbhpMkhbRXX138UOc/2XZFF8hiZa6ooZAEEJFp5scytzCw4tC1gChMFXrpa3d2tYE6AX8IrOEpSonLmfQuQ==
|
||||
dependencies:
|
||||
"@types/history" "^4.7.11"
|
||||
"@types/react" "*"
|
||||
@ -1711,31 +1724,32 @@
|
||||
webpack "^5.73.0"
|
||||
webpack-merge "^5.8.0"
|
||||
|
||||
"@docusaurus/utils-common@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.2.0.tgz#a401c1b93a8697dd566baf6ac64f0fdff1641a78"
|
||||
integrity sha512-qebnerHp+cyovdUseDQyYFvMW1n1nv61zGe5JJfoNQUnjKuApch3IVsz+/lZ9a38pId8kqehC1Ao2bW/s0ntDA==
|
||||
"@docusaurus/utils-common@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.4.1.tgz#7f72e873e49bd5179588869cc3ab7449a56aae63"
|
||||
integrity sha512-bCVGdZU+z/qVcIiEQdyx0K13OC5mYwxhSuDUR95oFbKVuXYRrTVrwZIqQljuo1fyJvFTKHiL9L9skQOPokuFNQ==
|
||||
dependencies:
|
||||
tslib "^2.4.0"
|
||||
|
||||
"@docusaurus/utils-validation@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz#04d4d103137ad0145883971d3aa497f4a1315f25"
|
||||
integrity sha512-I1hcsG3yoCkasOL5qQAYAfnmVoLei7apugT6m4crQjmDGxq+UkiRrq55UqmDDyZlac/6ax/JC0p+usZ6W4nVyg==
|
||||
"@docusaurus/utils-validation@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.4.1.tgz#19959856d4a886af0c5cfb357f4ef68b51151244"
|
||||
integrity sha512-unII3hlJlDwZ3w8U+pMO3Lx3RhI4YEbY3YNsQj4yzrkZzlpqZOLuAiZK2JyULnD+TKbceKU0WyWkQXtYbLNDFA==
|
||||
dependencies:
|
||||
"@docusaurus/logger" "2.2.0"
|
||||
"@docusaurus/utils" "2.2.0"
|
||||
"@docusaurus/logger" "2.4.1"
|
||||
"@docusaurus/utils" "2.4.1"
|
||||
joi "^17.6.0"
|
||||
js-yaml "^4.1.0"
|
||||
tslib "^2.4.0"
|
||||
|
||||
"@docusaurus/utils@2.2.0":
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.2.0.tgz#3d6f9b7a69168d5c92d371bf21c556a4f50d1da6"
|
||||
integrity sha512-oNk3cjvx7Tt1Lgh/aeZAmFpGV2pDr5nHKrBVx6hTkzGhrnMuQqLt6UPlQjdYQ3QHXwyF/ZtZMO1D5Pfi0lu7SA==
|
||||
"@docusaurus/utils@2.4.1":
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.4.1.tgz#9c5f76eae37b71f3819c1c1f0e26e6807c99a4fc"
|
||||
integrity sha512-1lvEZdAQhKNht9aPXPoh69eeKnV0/62ROhQeFKKxmzd0zkcuE/Oc5Gpnt00y/f5bIsmOsYMY7Pqfm/5rteT5GA==
|
||||
dependencies:
|
||||
"@docusaurus/logger" "2.2.0"
|
||||
"@docusaurus/logger" "2.4.1"
|
||||
"@svgr/webpack" "^6.2.1"
|
||||
escape-string-regexp "^4.0.0"
|
||||
file-loader "^6.2.0"
|
||||
fs-extra "^10.1.0"
|
||||
github-slugger "^1.4.0"
|
||||
@ -3829,10 +3843,10 @@ esutils@^2.0.2:
|
||||
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
|
||||
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
|
||||
|
||||
eta@^1.12.3:
|
||||
version "1.12.3"
|
||||
resolved "https://registry.yarnpkg.com/eta/-/eta-1.12.3.tgz#2982d08adfbef39f9fa50e2fbd42d7337e7338b1"
|
||||
integrity sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==
|
||||
eta@^2.0.0:
|
||||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/eta/-/eta-2.2.0.tgz#eb8b5f8c4e8b6306561a455e62cd7492fe3a9b8a"
|
||||
integrity sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==
|
||||
|
||||
etag@~1.8.1:
|
||||
version "1.8.1"
|
||||
@ -4700,10 +4714,10 @@ indent-string@^4.0.0:
|
||||
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
|
||||
integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
|
||||
|
||||
infima@0.2.0-alpha.42:
|
||||
version "0.2.0-alpha.42"
|
||||
resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.42.tgz#f6e86a655ad40877c6b4d11b2ede681eb5470aa5"
|
||||
integrity sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==
|
||||
infima@0.2.0-alpha.43:
|
||||
version "0.2.0-alpha.43"
|
||||
resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.43.tgz#f7aa1d7b30b6c08afef441c726bac6150228cbe0"
|
||||
integrity sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==
|
||||
|
||||
inflight@^1.0.4:
|
||||
version "1.0.6"
|
||||
@ -6103,10 +6117,10 @@ prettier-plugin-import-sort@^0.0.7:
|
||||
import-sort-parser-babylon "^6.0.0"
|
||||
import-sort-parser-typescript "^6.0.0"
|
||||
|
||||
prettier@^2.3.2:
|
||||
version "2.7.1"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64"
|
||||
integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==
|
||||
prettier@^2.8.8:
|
||||
version "2.8.8"
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
|
||||
integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
|
||||
|
||||
pretty-error@^4.0.0:
|
||||
version "4.0.0"
|
||||
@ -7542,6 +7556,11 @@ use-latest@^1.2.1:
|
||||
dependencies:
|
||||
use-isomorphic-layout-effect "^1.1.1"
|
||||
|
||||
use-sync-external-store@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a"
|
||||
integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==
|
||||
|
||||
util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
||||
|
@ -1,11 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<UserSecretsId>da29eac4-4c22-4a7f-b393-379e83b60998</UserSecretsId>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="AspNet.Security.OAuth.Spotify" Version="7.0.0" />
|
||||
<PackageReference Include="AspNet.Security.OAuth.Spotify" Version="7.0.2" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\SpotifyAPI.Web\SpotifyAPI.Web.csproj" />
|
||||
|
@ -10,7 +10,7 @@ namespace Example.ASP.Pages
|
||||
private const int LIMIT = 10;
|
||||
private readonly SpotifyClientBuilder _spotifyClientBuilder;
|
||||
|
||||
public Paging<SimplePlaylist> Playlists { get; set; }
|
||||
public Paging<FullPlaylist> Playlists { get; set; }
|
||||
|
||||
public string Next { get; set; }
|
||||
public string Previous { get; set; }
|
||||
|
@ -5,9 +5,9 @@
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="7.0.4" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="7.0.3" PrivateAssets="all" />
|
||||
<PackageReference Include="System.Net.Http.Json" Version="7.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="7.0.5" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="7.0.5" PrivateAssets="all" />
|
||||
<PackageReference Include="System.Net.Http.Json" Version="7.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
@ -24,8 +24,8 @@ namespace Example.CLI.CustomHTML
|
||||
}
|
||||
|
||||
_server = new EmbedIOAuthServer(
|
||||
new Uri("http://localhost:5000/callback"),
|
||||
5000,
|
||||
new Uri("http://localhost:5543/callback"),
|
||||
5543,
|
||||
Assembly.GetExecutingAssembly(),
|
||||
"Example.CLI.CustomHTML.Resources.custom_site"
|
||||
);
|
||||
@ -38,7 +38,7 @@ namespace Example.CLI.CustomHTML
|
||||
Scope = new List<string> { UserReadEmail }
|
||||
};
|
||||
|
||||
Uri uri = request.ToUri();
|
||||
var uri = request.ToUri();
|
||||
try
|
||||
{
|
||||
BrowserUtil.Open(uri);
|
||||
@ -48,14 +48,14 @@ namespace Example.CLI.CustomHTML
|
||||
Console.WriteLine("Unable to open URL, manually open: {0}", uri);
|
||||
}
|
||||
|
||||
Console.ReadKey();
|
||||
_ = Console.ReadKey();
|
||||
}
|
||||
|
||||
private static async Task OnAuthorizationCodeReceived(object sender, AuthorizationCodeResponse response)
|
||||
{
|
||||
await _server.Stop();
|
||||
|
||||
AuthorizationCodeTokenResponse token = await new OAuthClient().RequestToken(
|
||||
var token = await new OAuthClient().RequestToken(
|
||||
new AuthorizationCodeTokenRequest(clientId, clientSecret, response.Code, _server.BaseUri)
|
||||
);
|
||||
|
||||
|
@ -5,22 +5,25 @@ using System.Threading.Tasks;
|
||||
using Newtonsoft.Json;
|
||||
using SpotifyAPI.Web;
|
||||
using SpotifyAPI.Web.Auth;
|
||||
using Swan.Logging;
|
||||
using static SpotifyAPI.Web.Scopes;
|
||||
|
||||
namespace Example.CLI.PersistentConfig
|
||||
{
|
||||
/// <summary>
|
||||
/// This is a basic example how to get user access using the Auth package and a CLI Program
|
||||
/// Your spotify app needs to have http://localhost:5000 as redirect uri whitelisted
|
||||
/// Your spotify app needs to have http://localhost:5543 as redirect uri whitelisted
|
||||
/// </summary>
|
||||
public class Program
|
||||
{
|
||||
private const string CredentialsPath = "credentials.json";
|
||||
private static readonly string? clientId = Environment.GetEnvironmentVariable("SPOTIFY_CLIENT_ID");
|
||||
private static readonly EmbedIOAuthServer _server = new EmbedIOAuthServer(new Uri("http://localhost:5000/callback"), 5000);
|
||||
private static readonly EmbedIOAuthServer _server = new(new Uri("http://localhost:5543/callback"), 5543);
|
||||
|
||||
private static void Exiting()
|
||||
{
|
||||
Console.CursorVisible = true;
|
||||
}
|
||||
|
||||
private static void Exiting() => Console.CursorVisible = true;
|
||||
public static async Task<int> Main()
|
||||
{
|
||||
// This is a bug in the SWAN Logging library, need this hack to bring back the cursor
|
||||
@ -42,7 +45,7 @@ namespace Example.CLI.PersistentConfig
|
||||
await StartAuthentication();
|
||||
}
|
||||
|
||||
Console.ReadKey();
|
||||
_ = Console.ReadKey();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -77,7 +80,7 @@ namespace Example.CLI.PersistentConfig
|
||||
_server.AuthorizationCodeReceived += async (sender, response) =>
|
||||
{
|
||||
await _server.Stop();
|
||||
PKCETokenResponse token = await new OAuthClient().RequestToken(
|
||||
var token = await new OAuthClient().RequestToken(
|
||||
new PKCETokenRequest(clientId!, response.Code, _server.BaseUri, verifier)
|
||||
);
|
||||
|
||||
@ -92,7 +95,7 @@ namespace Example.CLI.PersistentConfig
|
||||
Scope = new List<string> { UserReadEmail, UserReadPrivate, PlaylistReadPrivate, PlaylistReadCollaborative }
|
||||
};
|
||||
|
||||
Uri uri = request.ToUri();
|
||||
var uri = request.ToUri();
|
||||
try
|
||||
{
|
||||
BrowserUtil.Open(uri);
|
||||
|
@ -13,7 +13,7 @@ namespace Client
|
||||
|
||||
public static async Task Main()
|
||||
{
|
||||
_server = new EmbedIOAuthServer(new Uri("http://localhost:5000/callback"), 5000);
|
||||
_server = new EmbedIOAuthServer(new Uri("http://localhost:5543/callback"), 5543);
|
||||
await _server.Start();
|
||||
|
||||
_server.AuthorizationCodeReceived += OnAuthorizationCodeReceived;
|
||||
@ -23,7 +23,7 @@ namespace Client
|
||||
Scope = new List<string> { Scopes.UserReadEmail }
|
||||
};
|
||||
|
||||
Uri uri = request.ToUri();
|
||||
var uri = request.ToUri();
|
||||
try
|
||||
{
|
||||
BrowserUtil.Open(uri);
|
||||
@ -33,20 +33,20 @@ namespace Client
|
||||
Console.WriteLine("Unable to open URL, manually open: {0}", uri);
|
||||
}
|
||||
|
||||
Console.ReadKey();
|
||||
_ = Console.ReadKey();
|
||||
}
|
||||
|
||||
private static async Task OnAuthorizationCodeReceived(object sender, AuthorizationCodeResponse response)
|
||||
{
|
||||
var oauth = new OAuthClient();
|
||||
|
||||
var tokenRequest = new TokenSwapTokenRequest(new Uri("http://localhost:5001/swap"), response.Code);
|
||||
var tokenRequest = new TokenSwapTokenRequest(new Uri("http://localhost:5543/swap"), response.Code);
|
||||
var tokenResponse = await oauth.RequestToken(tokenRequest);
|
||||
|
||||
Console.WriteLine($"We got an access token from server: {tokenResponse.AccessToken}");
|
||||
|
||||
var refreshRequest = new TokenSwapRefreshRequest(
|
||||
new Uri("http://localhost:5001/refresh"),
|
||||
new Uri("http://localhost:5543/refresh"),
|
||||
tokenResponse.RefreshToken
|
||||
);
|
||||
var refreshResponse = await oauth.RequestToken(refreshRequest);
|
||||
|
@ -1,44 +1,52 @@
|
||||
const express = require('express');
|
||||
const bodyParser = require('body-parser');
|
||||
const axios = require('axios');
|
||||
const { default: Axios } = require('axios');
|
||||
const express = require("express");
|
||||
const bodyParser = require("body-parser");
|
||||
const axios = require("axios");
|
||||
const { default: Axios } = require("axios");
|
||||
|
||||
const PORT = process.env.PORT || '5001';
|
||||
const PORT = process.env.PORT || "5543";
|
||||
const SPOTIFY_CLIENT_SECRET = process.env.SPOTIFY_CLIENT_SECRET;
|
||||
const SPOTIFY_CLIENT_ID = process.env.SPOTIFY_CLIENT_ID;
|
||||
if (!SPOTIFY_CLIENT_SECRET || !SPOTIFY_CLIENT_ID) {
|
||||
console.log("SPOTIFY_CLIENT_SECRET or SPOTIFY_CLIENT_ID environment variable is not set!");
|
||||
console.log(
|
||||
"SPOTIFY_CLIENT_SECRET or SPOTIFY_CLIENT_ID environment variable is not set!"
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const app = express();
|
||||
app.use(bodyParser.urlencoded({ extended: true }));
|
||||
|
||||
app.post('/swap', async (req, res) => {
|
||||
app.post("/swap", async (req, res) => {
|
||||
const { code } = req.body;
|
||||
|
||||
const params = new URLSearchParams();
|
||||
params.append('grant_type', 'authorization_code');
|
||||
params.append('code', code);
|
||||
params.append('redirect_uri', 'http://localhost:5000/callback');
|
||||
params.append('client_secret', SPOTIFY_CLIENT_SECRET);
|
||||
params.append('client_id', SPOTIFY_CLIENT_ID);
|
||||
params.append("grant_type", "authorization_code");
|
||||
params.append("code", code);
|
||||
params.append("redirect_uri", "http://localhost:5543/callback");
|
||||
params.append("client_secret", SPOTIFY_CLIENT_SECRET);
|
||||
params.append("client_id", SPOTIFY_CLIENT_ID);
|
||||
|
||||
const { data } = await Axios.post('https://accounts.spotify.com/api/token', params);
|
||||
const { data } = await Axios.post(
|
||||
"https://accounts.spotify.com/api/token",
|
||||
params
|
||||
);
|
||||
|
||||
return res.send(data);
|
||||
});
|
||||
|
||||
app.post('/refresh', async (req, res) => {
|
||||
app.post("/refresh", async (req, res) => {
|
||||
const { refresh_token } = req.body;
|
||||
|
||||
const params = new URLSearchParams();
|
||||
params.append('grant_type', 'refresh_token');
|
||||
params.append('refresh_token', refresh_token);
|
||||
params.append('client_secret', SPOTIFY_CLIENT_SECRET);
|
||||
params.append('client_id', SPOTIFY_CLIENT_ID);
|
||||
params.append("grant_type", "refresh_token");
|
||||
params.append("refresh_token", refresh_token);
|
||||
params.append("client_secret", SPOTIFY_CLIENT_SECRET);
|
||||
params.append("client_id", SPOTIFY_CLIENT_ID);
|
||||
|
||||
const { data } = await Axios.post('https://accounts.spotify.com/api/token', params);
|
||||
const { data } = await Axios.post(
|
||||
"https://accounts.spotify.com/api/token",
|
||||
params
|
||||
);
|
||||
|
||||
return res.send(data);
|
||||
});
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
@ -157,7 +157,7 @@
|
||||
<Version>6.2.14</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="MvvmCross">
|
||||
<Version>9.0.9</Version>
|
||||
<Version>9.0.10</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
|
@ -15,10 +15,10 @@ namespace Example.UWP.ViewModels
|
||||
{
|
||||
private SpotifyClient _spotify;
|
||||
|
||||
private IList<SimplePlaylist> _playlists;
|
||||
public IList<SimplePlaylist> Playlists
|
||||
private IList<FullPlaylist> _playlists;
|
||||
public IList<FullPlaylist> Playlists
|
||||
{
|
||||
get => _playlists ?? (_playlists = new List<SimplePlaylist>());
|
||||
get => _playlists ?? (_playlists = new List<FullPlaylist>());
|
||||
set => SetProperty(ref _playlists, value);
|
||||
}
|
||||
|
||||
|
@ -1,16 +1,16 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFrameworks>net7.0;net6.0;net5.0;netcoreapp3.1</TargetFrameworks>
|
||||
<TargetFrameworks>net7.0;net6.0;net5.0</TargetFrameworks>
|
||||
<LangVersion>9.0</LangVersion>
|
||||
<IsPackable>false</IsPackable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.5.0" />
|
||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.6.0" />
|
||||
<PackageReference Include="Moq" Version="4.18.4" />
|
||||
<PackageReference Include="NUnit" Version="3.13.3" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.3.1" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="4.4.2" />
|
||||
<PackageReference Include="NUnit.Console" Version="3.16.3" />
|
||||
</ItemGroup>
|
||||
|
||||
|
@ -100,7 +100,7 @@ namespace SpotifyAPI.Web
|
||||
/// https://developer.spotify.com/documentation/web-api/reference-beta/#endpoint-get-list-users-playlists
|
||||
/// </remarks>
|
||||
/// <returns></returns>
|
||||
Task<Paging<SimplePlaylist>> GetUsers(string userId, CancellationToken cancel = default);
|
||||
Task<Paging<FullPlaylist>> GetUsers(string userId, CancellationToken cancel = default);
|
||||
|
||||
/// <summary>
|
||||
/// Get a list of the playlists owned or followed by a Spotify user.
|
||||
@ -112,7 +112,7 @@ namespace SpotifyAPI.Web
|
||||
/// https://developer.spotify.com/documentation/web-api/reference-beta/#endpoint-get-list-users-playlists
|
||||
/// </remarks>
|
||||
/// <returns></returns>
|
||||
Task<Paging<SimplePlaylist>> GetUsers(string userId, PlaylistGetUsersRequest request, CancellationToken cancel = default);
|
||||
Task<Paging<FullPlaylist>> GetUsers(string userId, PlaylistGetUsersRequest request, CancellationToken cancel = default);
|
||||
|
||||
/// <summary>
|
||||
/// Get a playlist owned by a Spotify user.
|
||||
@ -160,7 +160,7 @@ namespace SpotifyAPI.Web
|
||||
/// https://developer.spotify.com/documentation/web-api/reference-beta/#endpoint-get-a-list-of-current-users-playlists
|
||||
/// </remarks>
|
||||
/// <returns></returns>
|
||||
Task<Paging<SimplePlaylist>> CurrentUsers(CancellationToken cancel = default);
|
||||
Task<Paging<FullPlaylist>> CurrentUsers(CancellationToken cancel = default);
|
||||
|
||||
/// <summary>
|
||||
/// Get a list of the playlists owned or followed by the current Spotify user.
|
||||
@ -171,7 +171,7 @@ namespace SpotifyAPI.Web
|
||||
/// https://developer.spotify.com/documentation/web-api/reference-beta/#endpoint-get-a-list-of-current-users-playlists
|
||||
/// </remarks>
|
||||
/// <returns></returns>
|
||||
Task<Paging<SimplePlaylist>> CurrentUsers(PlaylistCurrentUsersRequest request, CancellationToken cancel = default);
|
||||
Task<Paging<FullPlaylist>> CurrentUsers(PlaylistCurrentUsersRequest request, CancellationToken cancel = default);
|
||||
|
||||
/// <summary>
|
||||
/// Change a playlist’s name and public/private state. (The user must, of course, own the playlist.)
|
||||
|
@ -66,19 +66,19 @@ namespace SpotifyAPI.Web
|
||||
return API.Get<List<Image>>(URLs.PlaylistImages(playlistId), cancel);
|
||||
}
|
||||
|
||||
public Task<Paging<SimplePlaylist>> GetUsers(string userId, CancellationToken cancel = default)
|
||||
public Task<Paging<FullPlaylist>> GetUsers(string userId, CancellationToken cancel = default)
|
||||
{
|
||||
Ensure.ArgumentNotNullOrEmptyString(userId, nameof(userId));
|
||||
|
||||
return API.Get<Paging<SimplePlaylist>>(URLs.UserPlaylists(userId), cancel);
|
||||
return API.Get<Paging<FullPlaylist>>(URLs.UserPlaylists(userId), cancel);
|
||||
}
|
||||
|
||||
public Task<Paging<SimplePlaylist>> GetUsers(string userId, PlaylistGetUsersRequest request, CancellationToken cancel = default)
|
||||
public Task<Paging<FullPlaylist>> GetUsers(string userId, PlaylistGetUsersRequest request, CancellationToken cancel = default)
|
||||
{
|
||||
Ensure.ArgumentNotNullOrEmptyString(userId, nameof(userId));
|
||||
Ensure.ArgumentNotNull(request, nameof(request));
|
||||
|
||||
return API.Get<Paging<SimplePlaylist>>(URLs.UserPlaylists(userId), request.BuildQueryParams(), cancel);
|
||||
return API.Get<Paging<FullPlaylist>>(URLs.UserPlaylists(userId), request.BuildQueryParams(), cancel);
|
||||
}
|
||||
|
||||
public Task<FullPlaylist> Get(string playlistId, CancellationToken cancel = default)
|
||||
@ -105,16 +105,16 @@ namespace SpotifyAPI.Web
|
||||
return statusCode == HttpStatusCode.Created;
|
||||
}
|
||||
|
||||
public Task<Paging<SimplePlaylist>> CurrentUsers(CancellationToken cancel = default)
|
||||
public Task<Paging<FullPlaylist>> CurrentUsers(CancellationToken cancel = default)
|
||||
{
|
||||
return API.Get<Paging<SimplePlaylist>>(URLs.CurrentUserPlaylists(), cancel);
|
||||
return API.Get<Paging<FullPlaylist>>(URLs.CurrentUserPlaylists(), cancel);
|
||||
}
|
||||
|
||||
public Task<Paging<SimplePlaylist>> CurrentUsers(PlaylistCurrentUsersRequest request, CancellationToken cancel = default)
|
||||
public Task<Paging<FullPlaylist>> CurrentUsers(PlaylistCurrentUsersRequest request, CancellationToken cancel = default)
|
||||
{
|
||||
Ensure.ArgumentNotNull(request, nameof(request));
|
||||
|
||||
return API.Get<Paging<SimplePlaylist>>(URLs.CurrentUserPlaylists(), request.BuildQueryParams(), cancel);
|
||||
return API.Get<Paging<FullPlaylist>>(URLs.CurrentUserPlaylists(), request.BuildQueryParams(), cancel);
|
||||
}
|
||||
|
||||
public async Task<bool> ChangeDetails(string playlistId, PlaylistChangeDetailsRequest request, CancellationToken cancel = default)
|
||||
|
@ -2,7 +2,7 @@ namespace SpotifyAPI.Web
|
||||
{
|
||||
public class CategoryPlaylistsResponse
|
||||
{
|
||||
public Paging<SimplePlaylist, CategoryPlaylistsResponse> Playlists { get; set; } = default!;
|
||||
public Paging<FullPlaylist, CategoryPlaylistsResponse> Playlists { get; set; } = default!;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,7 +3,7 @@ namespace SpotifyAPI.Web
|
||||
public class FeaturedPlaylistsResponse
|
||||
{
|
||||
public string Message { get; set; } = default!;
|
||||
public Paging<SimplePlaylist, FeaturedPlaylistsResponse> Playlists { get; set; } = default!;
|
||||
public Paging<FullPlaylist, FeaturedPlaylistsResponse> Playlists { get; set; } = default!;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,7 @@ namespace SpotifyAPI.Web
|
||||
public Paging<FullTrack, SearchResponse> Tracks { get; set; } = default!;
|
||||
public Paging<SimpleShow, SearchResponse> Shows { get; set; } = default!;
|
||||
public Paging<SimpleEpisode, SearchResponse> Episodes { get; set; } = default!;
|
||||
public Paging<SimplePlaylist, SearchResponse> Playlists { get; set; } = default!;
|
||||
public Paging<FullPlaylist, SearchResponse> Playlists { get; set; } = default!;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,29 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
namespace SpotifyAPI.Web
|
||||
{
|
||||
/// <summary>
|
||||
/// <a href="https://developer.spotify.com/documentation/web-api/reference/object-model/#playlist-object-simplified">Docs</a>
|
||||
/// </summary>
|
||||
public class SimplePlaylist
|
||||
{
|
||||
public bool Collaborative { get; set; }
|
||||
public string Description { get; set; } = default!;
|
||||
public Dictionary<string, string> ExternalUrls { get; set; } = default!;
|
||||
public string Href { get; set; } = default!;
|
||||
public string Id { get; set; } = default!;
|
||||
public List<Image> Images { get; set; } = default!;
|
||||
public string Name { get; set; } = default!;
|
||||
public PublicUser Owner { get; set; } = default!;
|
||||
public bool? Public { get; set; }
|
||||
public string SnapshotId { get; set; } = default!;
|
||||
|
||||
/// <summary>
|
||||
/// A list of PlaylistTracks, which items can be a FullTrack or FullEpisode
|
||||
/// </summary>
|
||||
/// <value></value>
|
||||
public Paging<PlaylistTrack<IPlayableItem>> Tracks { get; set; } = default!;
|
||||
public string Type { get; set; } = default!;
|
||||
public string Uri { get; set; } = default!;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user