diff --git a/.gitignore b/.gitignore
index 029a570..df76ad7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,4 @@
*.iml
node_modules
bin
+token
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7a8a2a2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,3 @@
+# CLI Spotify Playlist sorter
+
+`yarn start`
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..d4e3a32
--- /dev/null
+++ b/index.html
@@ -0,0 +1,32 @@
+
+
+
+
+ Spotify Sorter
+
+
+You can close this window now.
+
+
+
diff --git a/package.json b/package.json
index cf0d15b..576590a 100644
--- a/package.json
+++ b/package.json
@@ -2,9 +2,17 @@
"name": "spotify-sorter-node",
"author": "Nilstrieb",
"license": "MIT",
+ "scripts": {
+ "prestart": "yarn tsc",
+ "start": "node bin/index.js"
+ },
"dependencies": {
"@types/node": "^16.9.2",
- "typescript": "^4.4.3"
+ "@types/spotify-web-api-js": "^0.21.0",
+ "open": "^8.2.1",
+ "spotify-web-api-js": "^1.5.1",
+ "typescript": "^4.4.3",
+ "xhr2": "^0.2.1"
},
"devDependencies": {
"ts-node": "^10.2.1"
diff --git a/src/Sort.ts b/src/Sort.ts
new file mode 100644
index 0000000..72230e4
--- /dev/null
+++ b/src/Sort.ts
@@ -0,0 +1,3 @@
+export function startSort() {
+ console.log("now do sorting stuff things")
+}
diff --git a/src/index.ts b/src/index.ts
index e69de29..ca5ab67 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -0,0 +1,73 @@
+import Spotify from "spotify-web-api-js";
+import fs from "fs/promises";
+import * as http from "http";
+import open from "open";
+import {startSort} from "./Sort";
+
+export const api = new Spotify();
+
+// @ts-ignore this is fine
+global.XMLHttpRequest = require('xhr2');
+// @ts-ignore this is fine
+global.window = {Promise: Promise};
+
+let indexHtml: Buffer;
+
+fs.readFile("index.html").then(file => {
+ indexHtml = file;
+}).catch(() => {
+ console.error("index.html not found")
+ process.exit(1);
+});
+
+const webServer = http.createServer((req, res) => {
+ if (req.method === "GET") {
+ res.writeHead(200, {"content-type": "text/html"});
+ res.write(indexHtml);
+ res.end();
+ } else if (req.method === "POST") {
+ let body = "";
+
+ req.on("readable", () => {
+ body += req.read();
+ })
+
+ req.on("end", () => {
+ api.setAccessToken(body.trim());
+ console.log(`"${body.trim()}"`)
+ res.end();
+
+ webServer.close();
+
+ console.log("Token found!");
+
+ api.getUserPlaylists().then(lists => console.log(lists.items.map(list => list.name))).catch(err => console.error(err.response))
+
+ //api.getMyCurrentPlayingTrack().then(track => {
+ // if (track.item) {
+ // console.log(`Currently listening ${track.item.name} on ${track.item.album.name} ${track.progress_ms! / 1000}s`);
+ // } else {
+ // console.log("Not listening anything at the moment");
+ // }
+ //}).catch(console.error)
+
+ startSort();
+ })
+ }
+});
+webServer.listen(8080);
+
+const AUTH_ENDPOINT = "https://accounts.spotify.com/authorize";
+const CLIENT_ID = "33a3b4c341734c20b40fe58c72acdc36";
+const REDIRECT_URI = "http://localhost:8080";
+const SCOPES = [
+ "playlist-modify-private",
+ "playlist-read-private",
+ "playlist-modify-public",
+ "streaming",
+];
+
+const URL = `${AUTH_ENDPOINT}?client_id=${CLIENT_ID}&redirect_uri=${REDIRECT_URI}&scope=${SCOPES.join("%20")}&response_type=token&show_dialog=true`;
+open(URL).then();
+
+console.log("Spotify playlist sorter")
diff --git a/yarn-error.log b/yarn-error.log
new file mode 100644
index 0000000..319b3d4
--- /dev/null
+++ b/yarn-error.log
@@ -0,0 +1,168 @@
+Arguments:
+ C:\Program Files\nodejs\node.exe C:\Users\nilsh\AppData\Roaming\npm\node_modules\yarn\bin\yarn.js add @types/xhr2
+
+PATH:
+ C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\Program Files\Java\jdk-15.0.1\bin;C:\Program Files\Common Files\Oracle\Java\javapath;C:\Program Files (x86)\Razer\ChromaBroadcast\bin;C:\Program Files\Razer\ChromaBroadcast\bin;C:\Program Files (x86)\Razer Chroma SDK\bin;C:\Program Files\Razer Chroma SDK\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Windows\system32\config\systemprofile\AppData\Local\Microsoft\WindowsApps;C:\Users\nilsh\AppData\Local\Microsoft\WindowsApps;C:\Program Files\dotnet\;C:\Program Files\MiKTeX\miktex\bin\x64\;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\nodejs\;C:\Program Files\Git\cmd;C:\Program Files (x86)\IVI Foundation\VISA\WinNT\Bin;C:\Program Files\Python39\Scripts;C:\Program Files\idris-old;C:\Program Files\PostgreSQL\13\bin;C:\Program Files\PostgreSQL\13\lib;;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\DockerDesktop\version-bin;C:\Users\nilsh\AppData\Roaming\local\bin;C:\Users\nilsh\.cargo\bin;C:\Users\nilsh\AppData\Local\Microsoft\WindowsApps;C:\Users\nilsh\AppData\Local\GitHubDesktop\bin;C:\Users\nilsh\AppData\Roaming\npm;C:\Users\nilsh\AppData\Local\Programs\Microsoft VS Code\bin;C:\Users\nilsh\AppData\Local\atom\bin;
+
+Yarn version:
+ 1.22.10
+
+Node version:
+ 14.15.4
+
+Platform:
+ win32 x64
+
+Trace:
+ Error: https://registry.yarnpkg.com/@types%2fxhr2: Not found
+ at Request.params.callback [as _callback] (C:\Users\nilsh\AppData\Roaming\npm\node_modules\yarn\lib\cli.js:66988:18)
+ at Request.self.callback (C:\Users\nilsh\AppData\Roaming\npm\node_modules\yarn\lib\cli.js:140662:22)
+ at Request.emit (events.js:315:20)
+ at Request. (C:\Users\nilsh\AppData\Roaming\npm\node_modules\yarn\lib\cli.js:141634:10)
+ at Request.emit (events.js:315:20)
+ at IncomingMessage. (C:\Users\nilsh\AppData\Roaming\npm\node_modules\yarn\lib\cli.js:141556:12)
+ at Object.onceWrapper (events.js:421:28)
+ at IncomingMessage.emit (events.js:327:22)
+ at endReadableNT (internal/streams/readable.js:1327:12)
+ at processTicksAndRejections (internal/process/task_queues.js:80:21)
+
+npm manifest:
+ {
+ "name": "spotify-sorter-node",
+ "author": "Nilstrieb",
+ "license": "MIT",
+ "scripts": {
+ "prestart": "yarn tsc",
+ "start": "node bin/index.js"
+ },
+ "dependencies": {
+ "@types/node": "^16.9.2",
+ "@types/spotify-web-api-js": "^0.21.0",
+ "spotify-web-api-js": "^1.5.1",
+ "typescript": "^4.4.3",
+ "xhr2": "^0.2.1"
+ },
+ "devDependencies": {
+ "ts-node": "^10.2.1"
+ }
+ }
+
+yarn manifest:
+ No manifest
+
+Lockfile:
+ # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+ # yarn lockfile v1
+
+
+ "@cspotcode/source-map-consumer@0.8.0":
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz#33bf4b7b39c178821606f669bbc447a6a629786b"
+ integrity sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==
+
+ "@cspotcode/source-map-support@0.6.1":
+ version "0.6.1"
+ resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.6.1.tgz#118511f316e2e87ee4294761868e254d3da47960"
+ integrity sha512-DX3Z+T5dt1ockmPdobJS/FAsQPW4V4SrWEhD2iYQT2Cb2tQsiMnYxrcUH9By/Z3B+v0S5LMBkQtV/XOBbpLEOg==
+ dependencies:
+ "@cspotcode/source-map-consumer" "0.8.0"
+
+ "@tsconfig/node10@^1.0.7":
+ version "1.0.8"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.8.tgz#c1e4e80d6f964fbecb3359c43bd48b40f7cadad9"
+ integrity sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==
+
+ "@tsconfig/node12@^1.0.7":
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.9.tgz#62c1f6dee2ebd9aead80dc3afa56810e58e1a04c"
+ integrity sha512-/yBMcem+fbvhSREH+s14YJi18sp7J9jpuhYByADT2rypfajMZZN4WQ6zBGgBKp53NKmqI36wFYDb3yaMPurITw==
+
+ "@tsconfig/node14@^1.0.0":
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.1.tgz#95f2d167ffb9b8d2068b0b235302fafd4df711f2"
+ integrity sha512-509r2+yARFfHHE7T6Puu2jjkoycftovhXRqW328PDXTVGKihlb1P8Z9mMZH04ebyajfRY7dedfGynlrFHJUQCg==
+
+ "@tsconfig/node16@^1.0.2":
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.2.tgz#423c77877d0569db20e1fc80885ac4118314010e"
+ integrity sha512-eZxlbI8GZscaGS7kkc/trHTT5xgrjH3/1n2JDwusC9iahPKWMRvRjJSAN5mCXviuTGQ/lHnhvv8Q1YTpnfz9gA==
+
+ "@types/node@^16.9.2":
+ version "16.9.2"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.2.tgz#81f5a039d6ed1941f8cc57506c74e7c2b8fc64b9"
+ integrity sha512-ZHty/hKoOLZvSz6BtP1g7tc7nUeJhoCf3flLjh8ZEv1vFKBWHXcnMbJMyN/pftSljNyy0kNW/UqI3DccnBnZ8w==
+
+ "@types/spotify-web-api-js@^0.21.0":
+ version "0.21.0"
+ resolved "https://registry.yarnpkg.com/@types/spotify-web-api-js/-/spotify-web-api-js-0.21.0.tgz#a84a41f74620e7c7db0aafca7b5ed34d5939b669"
+ integrity sha1-qEpB90Yg58fbCq/Ke17TTVk5tmk=
+ dependencies:
+ spotify-web-api-js "*"
+
+ acorn-walk@^8.1.1:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
+ integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
+
+ acorn@^8.4.1:
+ version "8.5.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2"
+ integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==
+
+ arg@^4.1.0:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
+ integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
+
+ create-require@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
+ integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
+
+ diff@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
+ integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+
+ make-error@^1.1.1:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
+ integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+
+ spotify-web-api-js@*, spotify-web-api-js@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/spotify-web-api-js/-/spotify-web-api-js-1.5.1.tgz#dcdd80f3975cd79c1c1278c56b2071453b190699"
+ integrity sha512-KyeYpfPY5bWc5geb0Lmw96oqydxrby36vkmN33q4xrY7oWwoz3634Ya7qHndq2eOqCfI1GS3a5CjimYe7RQdtg==
+
+ ts-node@^10.2.1:
+ version "10.2.1"
+ resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.2.1.tgz#4cc93bea0a7aba2179497e65bb08ddfc198b3ab5"
+ integrity sha512-hCnyOyuGmD5wHleOQX6NIjJtYVIO8bPP8F2acWkB4W06wdlkgyvJtubO/I9NkI88hCFECbsEgoLc0VNkYmcSfw==
+ dependencies:
+ "@cspotcode/source-map-support" "0.6.1"
+ "@tsconfig/node10" "^1.0.7"
+ "@tsconfig/node12" "^1.0.7"
+ "@tsconfig/node14" "^1.0.0"
+ "@tsconfig/node16" "^1.0.2"
+ acorn "^8.4.1"
+ acorn-walk "^8.1.1"
+ arg "^4.1.0"
+ create-require "^1.1.0"
+ diff "^4.0.1"
+ make-error "^1.1.1"
+ yn "3.1.1"
+
+ typescript@^4.4.3:
+ version "4.4.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324"
+ integrity sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==
+
+ xhr2@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.2.1.tgz#4e73adc4f9cfec9cbd2157f73efdce3a5f108a93"
+ integrity sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==
+
+ yn@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
+ integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
diff --git a/yarn.lock b/yarn.lock
index 96961bd..d8776af 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -39,6 +39,13 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-16.9.2.tgz#81f5a039d6ed1941f8cc57506c74e7c2b8fc64b9"
integrity sha512-ZHty/hKoOLZvSz6BtP1g7tc7nUeJhoCf3flLjh8ZEv1vFKBWHXcnMbJMyN/pftSljNyy0kNW/UqI3DccnBnZ8w==
+"@types/spotify-web-api-js@^0.21.0":
+ version "0.21.0"
+ resolved "https://registry.yarnpkg.com/@types/spotify-web-api-js/-/spotify-web-api-js-0.21.0.tgz#a84a41f74620e7c7db0aafca7b5ed34d5939b669"
+ integrity sha1-qEpB90Yg58fbCq/Ke17TTVk5tmk=
+ dependencies:
+ spotify-web-api-js "*"
+
acorn-walk@^8.1.1:
version "8.2.0"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
@@ -59,16 +66,47 @@ create-require@^1.1.0:
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
+define-lazy-prop@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
+ integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
+
diff@^4.0.1:
version "4.0.2"
resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+is-docker@^2.0.0, is-docker@^2.1.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+ integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+
+is-wsl@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+ integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+ dependencies:
+ is-docker "^2.0.0"
+
make-error@^1.1.1:
version "1.3.6"
resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+open@^8.2.1:
+ version "8.2.1"
+ resolved "https://registry.yarnpkg.com/open/-/open-8.2.1.tgz#82de42da0ccbf429bc12d099dad2e0975e14e8af"
+ integrity sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ==
+ dependencies:
+ define-lazy-prop "^2.0.0"
+ is-docker "^2.1.1"
+ is-wsl "^2.2.0"
+
+spotify-web-api-js@*, spotify-web-api-js@^1.5.1:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/spotify-web-api-js/-/spotify-web-api-js-1.5.1.tgz#dcdd80f3975cd79c1c1278c56b2071453b190699"
+ integrity sha512-KyeYpfPY5bWc5geb0Lmw96oqydxrby36vkmN33q4xrY7oWwoz3634Ya7qHndq2eOqCfI1GS3a5CjimYe7RQdtg==
+
ts-node@^10.2.1:
version "10.2.1"
resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.2.1.tgz#4cc93bea0a7aba2179497e65bb08ddfc198b3ab5"
@@ -92,6 +130,11 @@ typescript@^4.4.3:
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324"
integrity sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==
+xhr2@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.2.1.tgz#4e73adc4f9cfec9cbd2157f73efdce3a5f108a93"
+ integrity sha512-sID0rrVCqkVNUn8t6xuv9+6FViXjUVXq8H5rWOH2rz9fDNQEd4g0EA2XlcEdJXRz5BMEn4O1pJFdT+z4YHhoWw==
+
yn@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"