soundcloud-wrapper 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client.js +14 -0
- package/dist/endpoints/likes.js +107 -0
- package/dist/endpoints/me.js +175 -0
- package/dist/endpoints/misc.js +48 -0
- package/dist/endpoints/playlists.js +147 -0
- package/dist/endpoints/reposts.js +107 -0
- package/dist/endpoints/search.js +71 -0
- package/dist/endpoints/token.js +51 -0
- package/dist/endpoints/tracks.js +202 -0
- package/dist/endpoints/users.js +99 -0
- package/dist/index.js +25 -0
- package/package.json +33 -0
package/dist/client.js
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.SoundCloudClient = void 0;
|
4
|
+
class SoundCloudClient {
|
5
|
+
constructor(clientId, clientSecret, redirectUri, PKCECodeVerifier) {
|
6
|
+
this.baseUrl = "https://api.soundcloud.com";
|
7
|
+
this.clientId = clientId;
|
8
|
+
this.clientSecret = clientSecret;
|
9
|
+
this.redirectUri = redirectUri;
|
10
|
+
this.PKCECodeVerifier = PKCECodeVerifier;
|
11
|
+
}
|
12
|
+
}
|
13
|
+
exports.SoundCloudClient = SoundCloudClient;
|
14
|
+
exports.default = SoundCloudClient;
|
@@ -0,0 +1,107 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
exports.Likes = void 0;
|
16
|
+
const client_1 = __importDefault(require("../client"));
|
17
|
+
const axios_1 = __importDefault(require("axios"));
|
18
|
+
class Likes extends client_1.default {
|
19
|
+
// likes a specific track
|
20
|
+
likeTrack(authToken, trackId) {
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
22
|
+
return this.likeRequest(authToken, "/tracks", trackId);
|
23
|
+
});
|
24
|
+
}
|
25
|
+
// likes a specific playlist
|
26
|
+
likePlaylist(authToken, playlistId) {
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
28
|
+
return this.likeRequest(authToken, "/playlists", playlistId);
|
29
|
+
});
|
30
|
+
}
|
31
|
+
// unlikes a specific track
|
32
|
+
unlikeTrack(authToken, trackId) {
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
34
|
+
return this.unlikeRequest(authToken, "/tracks", trackId);
|
35
|
+
});
|
36
|
+
}
|
37
|
+
// unlikes a specific playlist
|
38
|
+
unlikePlaylist(authToken, playlistId) {
|
39
|
+
return __awaiter(this, void 0, void 0, function* () {
|
40
|
+
return this.unlikeRequest(authToken, "/playlists", playlistId);
|
41
|
+
});
|
42
|
+
}
|
43
|
+
// --- REQUESTS ---
|
44
|
+
likeRequest(authToken, endpoint, id) {
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
46
|
+
var _a;
|
47
|
+
try {
|
48
|
+
const config = {
|
49
|
+
method: "POST",
|
50
|
+
maxBodyLength: Infinity,
|
51
|
+
url: `${this.baseUrl}/likes${endpoint}/${id}`,
|
52
|
+
headers: {
|
53
|
+
accept: "application/json; charset=utf-8",
|
54
|
+
"Content-Type": "application/json; charset=utf-8",
|
55
|
+
Authorization: `OAuth ${authToken}`,
|
56
|
+
},
|
57
|
+
};
|
58
|
+
const response = yield axios_1.default
|
59
|
+
.request(config)
|
60
|
+
.then((response) => {
|
61
|
+
return response.data;
|
62
|
+
})
|
63
|
+
.catch((error) => {
|
64
|
+
console.log(error);
|
65
|
+
throw new Error("Failed to get me");
|
66
|
+
});
|
67
|
+
return response;
|
68
|
+
}
|
69
|
+
catch (error) {
|
70
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
71
|
+
throw error;
|
72
|
+
}
|
73
|
+
});
|
74
|
+
}
|
75
|
+
unlikeRequest(authToken, endpoint, id) {
|
76
|
+
return __awaiter(this, void 0, void 0, function* () {
|
77
|
+
var _a;
|
78
|
+
try {
|
79
|
+
const config = {
|
80
|
+
method: "DELETE",
|
81
|
+
maxBodyLength: Infinity,
|
82
|
+
url: `${this.baseUrl}/likes${endpoint}/${id}`,
|
83
|
+
headers: {
|
84
|
+
accept: "application/json; charset=utf-8",
|
85
|
+
"Content-Type": "application/json; charset=utf-8",
|
86
|
+
Authorization: `OAuth ${authToken}`,
|
87
|
+
},
|
88
|
+
};
|
89
|
+
const response = yield axios_1.default
|
90
|
+
.request(config)
|
91
|
+
.then((response) => {
|
92
|
+
return response.data;
|
93
|
+
})
|
94
|
+
.catch((error) => {
|
95
|
+
console.log(error);
|
96
|
+
throw new Error("Failed to get me");
|
97
|
+
});
|
98
|
+
return response;
|
99
|
+
}
|
100
|
+
catch (error) {
|
101
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
102
|
+
throw error;
|
103
|
+
}
|
104
|
+
});
|
105
|
+
}
|
106
|
+
}
|
107
|
+
exports.Likes = Likes;
|
@@ -0,0 +1,175 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
exports.Me = void 0;
|
16
|
+
const client_1 = __importDefault(require("../client"));
|
17
|
+
const axios_1 = __importDefault(require("axios"));
|
18
|
+
class Me extends client_1.default {
|
19
|
+
// Returns authenticated users info
|
20
|
+
me(authToken) {
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
22
|
+
return this.getRequest(authToken, "/me");
|
23
|
+
});
|
24
|
+
}
|
25
|
+
// Returns authenticated users activity
|
26
|
+
getActivity(authToken) {
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
28
|
+
return this.getRequest(authToken, "/me/activities");
|
29
|
+
});
|
30
|
+
}
|
31
|
+
// Returns authenticated users track activity
|
32
|
+
getTrackActivity(authToken) {
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
34
|
+
return this.getRequest(authToken, "/me/activities/tracks");
|
35
|
+
});
|
36
|
+
}
|
37
|
+
// Returns authenticated users track likes activity
|
38
|
+
getTrackLikes(authToken) {
|
39
|
+
return __awaiter(this, void 0, void 0, function* () {
|
40
|
+
return this.getRequest(authToken, "/me/likes/tracks");
|
41
|
+
});
|
42
|
+
}
|
43
|
+
// Returns authenticated users playlist likes activity
|
44
|
+
getPlaylistLikes(authToken) {
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
46
|
+
return this.getRequest(authToken, "/me/likes/playlists");
|
47
|
+
});
|
48
|
+
}
|
49
|
+
// Returns people authenticated user is following
|
50
|
+
getFollowings(authToken) {
|
51
|
+
return __awaiter(this, void 0, void 0, function* () {
|
52
|
+
return this.getRequest(authToken, "/me/followings");
|
53
|
+
});
|
54
|
+
}
|
55
|
+
// Returns peoples tracks authenticated user is following
|
56
|
+
getFollowingsTracks(authToken) {
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
58
|
+
return this.getRequest(authToken, "/me/followings/tracks");
|
59
|
+
});
|
60
|
+
}
|
61
|
+
// Follows the specified user
|
62
|
+
followUser(authToken, userId) {
|
63
|
+
return __awaiter(this, void 0, void 0, function* () {
|
64
|
+
return this.followRequest(authToken, "/me/followings", userId);
|
65
|
+
});
|
66
|
+
}
|
67
|
+
// Unfollows the specified user
|
68
|
+
unfollowUser(authToken, userId) {
|
69
|
+
return __awaiter(this, void 0, void 0, function* () {
|
70
|
+
return this.unfollowRequest(authToken, "/me/followings", userId);
|
71
|
+
});
|
72
|
+
}
|
73
|
+
// TODO: bind authToken to object so it does not need to be passed everytime
|
74
|
+
// --- REQUESTS ---
|
75
|
+
getRequest(authToken, endpoint) {
|
76
|
+
return __awaiter(this, void 0, void 0, function* () {
|
77
|
+
var _a;
|
78
|
+
try {
|
79
|
+
const config = {
|
80
|
+
method: "GET",
|
81
|
+
maxBodyLength: Infinity,
|
82
|
+
url: `${this.baseUrl}${endpoint}`,
|
83
|
+
headers: {
|
84
|
+
accept: "application/json; charset=utf-8",
|
85
|
+
"Content-Type": "application/json; charset=utf-8",
|
86
|
+
Authorization: `OAuth ${authToken}`,
|
87
|
+
},
|
88
|
+
};
|
89
|
+
const response = yield axios_1.default
|
90
|
+
.request(config)
|
91
|
+
.then((response) => {
|
92
|
+
return response.data;
|
93
|
+
})
|
94
|
+
.catch((error) => {
|
95
|
+
console.log(error);
|
96
|
+
throw new Error("Failed to get me");
|
97
|
+
});
|
98
|
+
return response;
|
99
|
+
}
|
100
|
+
catch (error) {
|
101
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
102
|
+
throw error;
|
103
|
+
}
|
104
|
+
});
|
105
|
+
}
|
106
|
+
followRequest(authToken, endpoint, userId) {
|
107
|
+
return __awaiter(this, void 0, void 0, function* () {
|
108
|
+
var _a;
|
109
|
+
try {
|
110
|
+
const config = {
|
111
|
+
method: "PUT",
|
112
|
+
maxBodyLength: Infinity,
|
113
|
+
url: `${this.baseUrl}${endpoint}/${userId}`,
|
114
|
+
headers: {
|
115
|
+
accept: "application/json; charset=utf-8",
|
116
|
+
"Content-Type": "application/json; charset=utf-8",
|
117
|
+
Authorization: `OAuth ${authToken}`,
|
118
|
+
},
|
119
|
+
data: {
|
120
|
+
user_id: userId,
|
121
|
+
},
|
122
|
+
};
|
123
|
+
const response = yield axios_1.default
|
124
|
+
.request(config)
|
125
|
+
.then((response) => {
|
126
|
+
return response.data;
|
127
|
+
})
|
128
|
+
.catch((error) => {
|
129
|
+
console.log(error);
|
130
|
+
throw new Error("Failed to get me");
|
131
|
+
});
|
132
|
+
return response;
|
133
|
+
}
|
134
|
+
catch (error) {
|
135
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
136
|
+
throw error;
|
137
|
+
}
|
138
|
+
});
|
139
|
+
}
|
140
|
+
unfollowRequest(authToken, endpoint, userId) {
|
141
|
+
return __awaiter(this, void 0, void 0, function* () {
|
142
|
+
var _a;
|
143
|
+
try {
|
144
|
+
const config = {
|
145
|
+
method: "DELETE",
|
146
|
+
maxBodyLength: Infinity,
|
147
|
+
url: `${this.baseUrl}${endpoint}/${userId}`,
|
148
|
+
headers: {
|
149
|
+
accept: "application/json; charset=utf-8",
|
150
|
+
"Content-Type": "application/json; charset=utf-8",
|
151
|
+
Authorization: `OAuth ${authToken}`,
|
152
|
+
},
|
153
|
+
data: {
|
154
|
+
user_id: userId,
|
155
|
+
},
|
156
|
+
};
|
157
|
+
const response = yield axios_1.default
|
158
|
+
.request(config)
|
159
|
+
.then((response) => {
|
160
|
+
return response.data;
|
161
|
+
})
|
162
|
+
.catch((error) => {
|
163
|
+
console.log(error);
|
164
|
+
throw new Error("Failed to get me");
|
165
|
+
});
|
166
|
+
return response;
|
167
|
+
}
|
168
|
+
catch (error) {
|
169
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
170
|
+
throw error;
|
171
|
+
}
|
172
|
+
});
|
173
|
+
}
|
174
|
+
}
|
175
|
+
exports.Me = Me;
|
@@ -0,0 +1,48 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
exports.Misc = void 0;
|
16
|
+
const client_1 = __importDefault(require("../client"));
|
17
|
+
const axios_1 = __importDefault(require("axios"));
|
18
|
+
class Misc extends client_1.default {
|
19
|
+
resolveUrl(authToken, url) {
|
20
|
+
return __awaiter(this, void 0, void 0, function* () {
|
21
|
+
return this.resolveRequest(authToken, url);
|
22
|
+
});
|
23
|
+
}
|
24
|
+
// --- REQUESTS ---
|
25
|
+
resolveRequest(authToken, url) {
|
26
|
+
return __awaiter(this, void 0, void 0, function* () {
|
27
|
+
var _a;
|
28
|
+
try {
|
29
|
+
const config = {
|
30
|
+
method: "GET",
|
31
|
+
maxBodyLength: Infinity,
|
32
|
+
url: `${this.baseUrl}/resolve?url=${url}`,
|
33
|
+
headers: {
|
34
|
+
"Content-Type": "application/json; charset=utf-8",
|
35
|
+
Authorization: `OAuth ${authToken}`,
|
36
|
+
},
|
37
|
+
};
|
38
|
+
const response = yield axios_1.default.request(config);
|
39
|
+
return response.data;
|
40
|
+
}
|
41
|
+
catch (error) {
|
42
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
43
|
+
throw error;
|
44
|
+
}
|
45
|
+
});
|
46
|
+
}
|
47
|
+
}
|
48
|
+
exports.Misc = Misc;
|
@@ -0,0 +1,147 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
exports.Playlist = void 0;
|
16
|
+
const axios_1 = __importDefault(require("axios"));
|
17
|
+
const client_1 = __importDefault(require("../client"));
|
18
|
+
class Playlist extends client_1.default {
|
19
|
+
// gets a specific playlist
|
20
|
+
getPlaylist(authToken, playlistId) {
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
22
|
+
return this.getPlaylistRequest(authToken, "", playlistId);
|
23
|
+
});
|
24
|
+
}
|
25
|
+
// gets the tracks of a specific playlist
|
26
|
+
getPlaylistTracks(authToken, playlistId) {
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
28
|
+
return this.getPlaylistRequest(authToken, "/tracks", playlistId);
|
29
|
+
});
|
30
|
+
}
|
31
|
+
// gets the reposters of a specific playlist
|
32
|
+
getPlaylistReposters(authToken, playlistId) {
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
34
|
+
return this.getPlaylistRequest(authToken, "/reposters", playlistId);
|
35
|
+
});
|
36
|
+
}
|
37
|
+
// creates a new playlist
|
38
|
+
createPlaylist(authToken, playlistData) {
|
39
|
+
return __awaiter(this, void 0, void 0, function* () {
|
40
|
+
return this.createPlaylistRequest(authToken, playlistData);
|
41
|
+
});
|
42
|
+
}
|
43
|
+
// updates a specific playlist
|
44
|
+
updatePlaylist(authToken, playlistId, playlistData) {
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
46
|
+
return this.updatePlaylistRequest(authToken, playlistId, playlistData);
|
47
|
+
});
|
48
|
+
}
|
49
|
+
// deletes a specific playlist
|
50
|
+
deletePlaylist(authToken, playlistId) {
|
51
|
+
return __awaiter(this, void 0, void 0, function* () {
|
52
|
+
return this.deletePlaylistRequest(authToken, playlistId);
|
53
|
+
});
|
54
|
+
}
|
55
|
+
// --- REQUESTS ---
|
56
|
+
getPlaylistRequest(authToken, endpoint, playlistId) {
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
58
|
+
var _a;
|
59
|
+
try {
|
60
|
+
const config = {
|
61
|
+
method: "GET",
|
62
|
+
maxBodyLength: Infinity,
|
63
|
+
url: `${this.baseUrl}/playlists/${playlistId}${endpoint}`,
|
64
|
+
headers: {
|
65
|
+
"Content-Type": "application/json; charset=utf-8",
|
66
|
+
Authorization: `OAuth ${authToken}`,
|
67
|
+
},
|
68
|
+
};
|
69
|
+
const response = yield axios_1.default.request(config);
|
70
|
+
return response.data;
|
71
|
+
}
|
72
|
+
catch (error) {
|
73
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
74
|
+
throw error;
|
75
|
+
}
|
76
|
+
});
|
77
|
+
}
|
78
|
+
createPlaylistRequest(authToken, playlistData) {
|
79
|
+
return __awaiter(this, void 0, void 0, function* () {
|
80
|
+
var _a;
|
81
|
+
try {
|
82
|
+
const config = {
|
83
|
+
method: "POST",
|
84
|
+
maxBodyLength: Infinity,
|
85
|
+
url: `${this.baseUrl}/playlists`,
|
86
|
+
headers: {
|
87
|
+
"Content-Type": "application/json; charset=utf-8",
|
88
|
+
Authorization: `OAuth ${authToken}`,
|
89
|
+
},
|
90
|
+
data: playlistData,
|
91
|
+
};
|
92
|
+
const response = yield axios_1.default.request(config);
|
93
|
+
return response.data;
|
94
|
+
}
|
95
|
+
catch (error) {
|
96
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
97
|
+
throw error;
|
98
|
+
}
|
99
|
+
});
|
100
|
+
}
|
101
|
+
updatePlaylistRequest(authToken, playlistId, playlistData) {
|
102
|
+
return __awaiter(this, void 0, void 0, function* () {
|
103
|
+
var _a;
|
104
|
+
try {
|
105
|
+
const config = {
|
106
|
+
method: "PUT",
|
107
|
+
maxBodyLength: Infinity,
|
108
|
+
url: `${this.baseUrl}/playlists/${playlistId}`,
|
109
|
+
headers: {
|
110
|
+
"Content-Type": "application/json; charset=utf-8",
|
111
|
+
Authorization: `OAuth ${authToken}`,
|
112
|
+
},
|
113
|
+
data: playlistData,
|
114
|
+
};
|
115
|
+
const response = yield axios_1.default.request(config);
|
116
|
+
return response.data;
|
117
|
+
}
|
118
|
+
catch (error) {
|
119
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
120
|
+
throw error;
|
121
|
+
}
|
122
|
+
});
|
123
|
+
}
|
124
|
+
deletePlaylistRequest(authToken, playlistId) {
|
125
|
+
return __awaiter(this, void 0, void 0, function* () {
|
126
|
+
var _a;
|
127
|
+
try {
|
128
|
+
const config = {
|
129
|
+
method: "DELETE",
|
130
|
+
maxBodyLength: Infinity,
|
131
|
+
url: `${this.baseUrl}/playlists/${playlistId}`,
|
132
|
+
headers: {
|
133
|
+
"Content-Type": "application/json; charset=utf-8",
|
134
|
+
Authorization: `OAuth ${authToken}`,
|
135
|
+
},
|
136
|
+
};
|
137
|
+
const response = yield axios_1.default.request(config);
|
138
|
+
return response.data;
|
139
|
+
}
|
140
|
+
catch (error) {
|
141
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
142
|
+
throw error;
|
143
|
+
}
|
144
|
+
});
|
145
|
+
}
|
146
|
+
}
|
147
|
+
exports.Playlist = Playlist;
|
@@ -0,0 +1,107 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
exports.Reposts = void 0;
|
16
|
+
const axios_1 = __importDefault(require("axios"));
|
17
|
+
const client_1 = __importDefault(require("../client"));
|
18
|
+
class Reposts extends client_1.default {
|
19
|
+
// reposts a specific track
|
20
|
+
repostTrack(authToken, trackId) {
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
22
|
+
return this.repostRequest(authToken, "/tracks", trackId);
|
23
|
+
});
|
24
|
+
}
|
25
|
+
// removes a repost of a specific track
|
26
|
+
removeRepostTrack(authToken, trackId) {
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
28
|
+
return this.removeRepostRequest(authToken, "/tracks", trackId);
|
29
|
+
});
|
30
|
+
}
|
31
|
+
// reposts a specific playlist
|
32
|
+
repostPlaylist(authToken, playlistId) {
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
34
|
+
return this.repostRequest(authToken, "/playlists", playlistId);
|
35
|
+
});
|
36
|
+
}
|
37
|
+
// removes a repost of a specific playlist
|
38
|
+
removeRepostPlaylist(authToken, playlistId) {
|
39
|
+
return __awaiter(this, void 0, void 0, function* () {
|
40
|
+
return this.removeRepostRequest(authToken, "/playlists", playlistId);
|
41
|
+
});
|
42
|
+
}
|
43
|
+
// --- REQUESTS ---
|
44
|
+
repostRequest(authToken, endpoint, id) {
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
46
|
+
var _a;
|
47
|
+
try {
|
48
|
+
const config = {
|
49
|
+
method: "POST",
|
50
|
+
maxBodyLength: Infinity,
|
51
|
+
url: `${this.baseUrl}/reposts${endpoint}/${id}`,
|
52
|
+
headers: {
|
53
|
+
accept: "application/json; charset=utf-8",
|
54
|
+
"Content-Type": "application/json; charset=utf-8",
|
55
|
+
Authorization: `OAuth ${authToken}`,
|
56
|
+
},
|
57
|
+
};
|
58
|
+
const response = yield axios_1.default
|
59
|
+
.request(config)
|
60
|
+
.then((response) => {
|
61
|
+
return response.data;
|
62
|
+
})
|
63
|
+
.catch((error) => {
|
64
|
+
console.log(error);
|
65
|
+
throw new Error("Failed to get me");
|
66
|
+
});
|
67
|
+
return response;
|
68
|
+
}
|
69
|
+
catch (error) {
|
70
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
71
|
+
throw error;
|
72
|
+
}
|
73
|
+
});
|
74
|
+
}
|
75
|
+
removeRepostRequest(authToken, endpoint, id) {
|
76
|
+
return __awaiter(this, void 0, void 0, function* () {
|
77
|
+
var _a;
|
78
|
+
try {
|
79
|
+
const config = {
|
80
|
+
method: "DELETE",
|
81
|
+
maxBodyLength: Infinity,
|
82
|
+
url: `${this.baseUrl}/reposts${endpoint}/${id}`,
|
83
|
+
headers: {
|
84
|
+
accept: "application/json; charset=utf-8",
|
85
|
+
"Content-Type": "application/json; charset=utf-8",
|
86
|
+
Authorization: `OAuth ${authToken}`,
|
87
|
+
},
|
88
|
+
};
|
89
|
+
const response = yield axios_1.default
|
90
|
+
.request(config)
|
91
|
+
.then((response) => {
|
92
|
+
return response.data;
|
93
|
+
})
|
94
|
+
.catch((error) => {
|
95
|
+
console.log(error);
|
96
|
+
throw new Error("Failed to get me");
|
97
|
+
});
|
98
|
+
return response;
|
99
|
+
}
|
100
|
+
catch (error) {
|
101
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
102
|
+
throw error;
|
103
|
+
}
|
104
|
+
});
|
105
|
+
}
|
106
|
+
}
|
107
|
+
exports.Reposts = Reposts;
|
@@ -0,0 +1,71 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
exports.Search = void 0;
|
16
|
+
const client_1 = __importDefault(require("../client"));
|
17
|
+
const axios_1 = __importDefault(require("axios"));
|
18
|
+
// TODO: full query support
|
19
|
+
class Search extends client_1.default {
|
20
|
+
// searches for tracks
|
21
|
+
tracks(authToken, query) {
|
22
|
+
return __awaiter(this, void 0, void 0, function* () {
|
23
|
+
return this.searchRequest(authToken, `/tracks?q=${query}`);
|
24
|
+
});
|
25
|
+
}
|
26
|
+
// searches for playlists
|
27
|
+
playlists(authToken, query) {
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
29
|
+
return this.searchRequest(authToken, `/playlists?q=${query}`);
|
30
|
+
});
|
31
|
+
}
|
32
|
+
// searches for users
|
33
|
+
users(authToken, query) {
|
34
|
+
return __awaiter(this, void 0, void 0, function* () {
|
35
|
+
return this.searchRequest(authToken, `/users?q=${query}`);
|
36
|
+
});
|
37
|
+
}
|
38
|
+
// --- REQUESTS ---
|
39
|
+
searchRequest(authToken, endpoint) {
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
41
|
+
var _a;
|
42
|
+
try {
|
43
|
+
const config = {
|
44
|
+
method: "GET",
|
45
|
+
maxBodyLength: Infinity,
|
46
|
+
url: `${this.baseUrl}${endpoint}`,
|
47
|
+
headers: {
|
48
|
+
accept: "application/json; charset=utf-8",
|
49
|
+
"Content-Type": "application/json; charset=utf-8",
|
50
|
+
Authorization: `OAuth ${authToken}`,
|
51
|
+
},
|
52
|
+
};
|
53
|
+
const response = yield axios_1.default
|
54
|
+
.request(config)
|
55
|
+
.then((response) => {
|
56
|
+
return response.data;
|
57
|
+
})
|
58
|
+
.catch((error) => {
|
59
|
+
console.log(error);
|
60
|
+
throw new Error("Failed to get me");
|
61
|
+
});
|
62
|
+
return response;
|
63
|
+
}
|
64
|
+
catch (error) {
|
65
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
66
|
+
throw error;
|
67
|
+
}
|
68
|
+
});
|
69
|
+
}
|
70
|
+
}
|
71
|
+
exports.Search = Search;
|
@@ -0,0 +1,51 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
exports.Token = void 0;
|
16
|
+
const client_1 = __importDefault(require("../client"));
|
17
|
+
const axios_1 = __importDefault(require("axios"));
|
18
|
+
const qs_1 = __importDefault(require("qs"));
|
19
|
+
class Token extends client_1.default {
|
20
|
+
// Returns access token for logged in user
|
21
|
+
getToken(PKCECodeChallenge) {
|
22
|
+
return __awaiter(this, void 0, void 0, function* () {
|
23
|
+
return this.getAccessToken(this.clientId, this.clientSecret, this.redirectUri, this.PKCECodeVerifier, PKCECodeChallenge);
|
24
|
+
});
|
25
|
+
}
|
26
|
+
// --- REQUESTS ---
|
27
|
+
getAccessToken(clientId, clientSecret, redirectUri, PKCECodeVerifier, PKCECodeChallenge) {
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
29
|
+
const data = qs_1.default.stringify({
|
30
|
+
grant_type: "authorization_code",
|
31
|
+
client_id: clientId,
|
32
|
+
client_secret: clientSecret,
|
33
|
+
redirect_uri: redirectUri,
|
34
|
+
code_verifier: PKCECodeVerifier,
|
35
|
+
code: PKCECodeChallenge,
|
36
|
+
});
|
37
|
+
const config = {
|
38
|
+
method: "post",
|
39
|
+
url: "https://secure.soundcloud.com/oauth/token",
|
40
|
+
headers: {
|
41
|
+
accept: "application/json; charset=utf-8",
|
42
|
+
"Content-Type": "application/x-www-form-urlencoded",
|
43
|
+
},
|
44
|
+
data: data,
|
45
|
+
};
|
46
|
+
const response = yield axios_1.default.request(config);
|
47
|
+
return response.data;
|
48
|
+
});
|
49
|
+
}
|
50
|
+
}
|
51
|
+
exports.Token = Token;
|
@@ -0,0 +1,202 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
exports.Tracks = void 0;
|
16
|
+
const client_1 = __importDefault(require("../client"));
|
17
|
+
const axios_1 = __importDefault(require("axios"));
|
18
|
+
// TODO: add upload support
|
19
|
+
class Tracks extends client_1.default {
|
20
|
+
// gets a specific track
|
21
|
+
getTrack(authToken, trackId) {
|
22
|
+
return __awaiter(this, void 0, void 0, function* () {
|
23
|
+
return this.getTrackRequest(authToken, "", trackId);
|
24
|
+
});
|
25
|
+
}
|
26
|
+
// gets the streams of a specific track
|
27
|
+
getTrackStreams(authToken, trackId) {
|
28
|
+
return __awaiter(this, void 0, void 0, function* () {
|
29
|
+
return this.getTrackRequest(authToken, "/streams", trackId);
|
30
|
+
});
|
31
|
+
}
|
32
|
+
// gets the comments of a specific track
|
33
|
+
getTrackComments(authToken, trackId) {
|
34
|
+
return __awaiter(this, void 0, void 0, function* () {
|
35
|
+
return this.getTrackRequest(authToken, "/comments", trackId);
|
36
|
+
});
|
37
|
+
}
|
38
|
+
// gets the people who liked a specific track
|
39
|
+
getTrackLikers(authToken, trackId) {
|
40
|
+
return __awaiter(this, void 0, void 0, function* () {
|
41
|
+
return this.getTrackRequest(authToken, "/favoriters", trackId);
|
42
|
+
});
|
43
|
+
}
|
44
|
+
// gets the people who reposted a specific track
|
45
|
+
getTrackReposters(authToken, trackId) {
|
46
|
+
return __awaiter(this, void 0, void 0, function* () {
|
47
|
+
return this.getTrackRequest(authToken, "/reposters", trackId);
|
48
|
+
});
|
49
|
+
}
|
50
|
+
// gets the related tracks of a specific track
|
51
|
+
getRelatedTracks(authToken, trackId) {
|
52
|
+
return __awaiter(this, void 0, void 0, function* () {
|
53
|
+
return this.getTrackRequest(authToken, "/related", trackId);
|
54
|
+
});
|
55
|
+
}
|
56
|
+
// creates a comment on a specific track
|
57
|
+
addComment(authToken, trackId, comment) {
|
58
|
+
return __awaiter(this, void 0, void 0, function* () {
|
59
|
+
return this.addCommentRequest(authToken, trackId, comment);
|
60
|
+
});
|
61
|
+
}
|
62
|
+
// updates a specific track
|
63
|
+
updateTrack(authToken, trackId, data) {
|
64
|
+
return __awaiter(this, void 0, void 0, function* () {
|
65
|
+
return this.updateTrackRequest(authToken, trackId, data);
|
66
|
+
});
|
67
|
+
}
|
68
|
+
// deletes a specific track
|
69
|
+
deleteTrack(authToken, trackId) {
|
70
|
+
return __awaiter(this, void 0, void 0, function* () {
|
71
|
+
return this.deleteTrackRequest(authToken, trackId);
|
72
|
+
});
|
73
|
+
}
|
74
|
+
// --- REQUESTS ---
|
75
|
+
getTrackRequest(authToken, endpoint, trackId) {
|
76
|
+
return __awaiter(this, void 0, void 0, function* () {
|
77
|
+
var _a;
|
78
|
+
try {
|
79
|
+
const config = {
|
80
|
+
method: "GET",
|
81
|
+
maxBodyLength: Infinity,
|
82
|
+
url: `${this.baseUrl}/tracks/${trackId}${endpoint}`,
|
83
|
+
headers: {
|
84
|
+
accept: "application/json; charset=utf-8",
|
85
|
+
"Content-Type": "application/json; charset=utf-8",
|
86
|
+
Authorization: `OAuth ${authToken}`,
|
87
|
+
},
|
88
|
+
};
|
89
|
+
const response = yield axios_1.default
|
90
|
+
.request(config)
|
91
|
+
.then((response) => {
|
92
|
+
return response.data;
|
93
|
+
})
|
94
|
+
.catch((error) => {
|
95
|
+
console.log(error);
|
96
|
+
throw new Error("Failed to get me");
|
97
|
+
});
|
98
|
+
return response;
|
99
|
+
}
|
100
|
+
catch (error) {
|
101
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
102
|
+
throw error;
|
103
|
+
}
|
104
|
+
});
|
105
|
+
}
|
106
|
+
addCommentRequest(authToken, trackId, commentData) {
|
107
|
+
return __awaiter(this, void 0, void 0, function* () {
|
108
|
+
var _a;
|
109
|
+
try {
|
110
|
+
const config = {
|
111
|
+
method: "POST",
|
112
|
+
maxBodyLength: Infinity,
|
113
|
+
url: `${this.baseUrl}/tracks/${trackId}/comments`,
|
114
|
+
headers: {
|
115
|
+
accept: "application/json; charset=utf-8",
|
116
|
+
"Content-Type": "application/json; charset=utf-8",
|
117
|
+
Authorization: `OAuth ${authToken}`,
|
118
|
+
},
|
119
|
+
data: commentData,
|
120
|
+
};
|
121
|
+
const response = yield axios_1.default
|
122
|
+
.request(config)
|
123
|
+
.then((response) => {
|
124
|
+
return response.data;
|
125
|
+
})
|
126
|
+
.catch((error) => {
|
127
|
+
console.log(error);
|
128
|
+
throw new Error("Failed to get me");
|
129
|
+
});
|
130
|
+
return response;
|
131
|
+
}
|
132
|
+
catch (error) {
|
133
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
134
|
+
throw error;
|
135
|
+
}
|
136
|
+
});
|
137
|
+
}
|
138
|
+
updateTrackRequest(authToken, trackId, trackData) {
|
139
|
+
return __awaiter(this, void 0, void 0, function* () {
|
140
|
+
var _a;
|
141
|
+
try {
|
142
|
+
const config = {
|
143
|
+
method: "PUT",
|
144
|
+
maxBodyLength: Infinity,
|
145
|
+
url: `${this.baseUrl}/tracks/${trackId}`,
|
146
|
+
headers: {
|
147
|
+
accept: "application/json; charset=utf-8",
|
148
|
+
"Content-Type": "application/json; charset=utf-8",
|
149
|
+
Authorization: `OAuth ${authToken}`,
|
150
|
+
},
|
151
|
+
data: trackData,
|
152
|
+
};
|
153
|
+
const response = yield axios_1.default
|
154
|
+
.request(config)
|
155
|
+
.then((response) => {
|
156
|
+
return response.data;
|
157
|
+
})
|
158
|
+
.catch((error) => {
|
159
|
+
console.log(error);
|
160
|
+
throw new Error("Failed to get me");
|
161
|
+
});
|
162
|
+
return response;
|
163
|
+
}
|
164
|
+
catch (error) {
|
165
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
166
|
+
throw error;
|
167
|
+
}
|
168
|
+
});
|
169
|
+
}
|
170
|
+
deleteTrackRequest(authToken, trackId) {
|
171
|
+
return __awaiter(this, void 0, void 0, function* () {
|
172
|
+
var _a;
|
173
|
+
try {
|
174
|
+
const config = {
|
175
|
+
method: "DELETE",
|
176
|
+
maxBodyLength: Infinity,
|
177
|
+
url: `${this.baseUrl}/tracks/${trackId}`,
|
178
|
+
headers: {
|
179
|
+
accept: "application/json; charset=utf-8",
|
180
|
+
"Content-Type": "application/json; charset=utf-8",
|
181
|
+
Authorization: `OAuth ${authToken}`,
|
182
|
+
},
|
183
|
+
};
|
184
|
+
const response = yield axios_1.default
|
185
|
+
.request(config)
|
186
|
+
.then((response) => {
|
187
|
+
return response.data;
|
188
|
+
})
|
189
|
+
.catch((error) => {
|
190
|
+
console.log(error);
|
191
|
+
throw new Error("Failed to get me");
|
192
|
+
});
|
193
|
+
return response;
|
194
|
+
}
|
195
|
+
catch (error) {
|
196
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
197
|
+
throw error;
|
198
|
+
}
|
199
|
+
});
|
200
|
+
}
|
201
|
+
}
|
202
|
+
exports.Tracks = Tracks;
|
@@ -0,0 +1,99 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
13
|
+
};
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
15
|
+
exports.Users = void 0;
|
16
|
+
const client_1 = __importDefault(require("../client"));
|
17
|
+
const axios_1 = __importDefault(require("axios"));
|
18
|
+
class Users extends client_1.default {
|
19
|
+
// gets a specific user
|
20
|
+
getUser(authToken, userId) {
|
21
|
+
return __awaiter(this, void 0, void 0, function* () {
|
22
|
+
return this.getUserRequest(authToken, "", userId);
|
23
|
+
});
|
24
|
+
}
|
25
|
+
// gets the followers of a specific user
|
26
|
+
getUserFollowers(authToken, userId) {
|
27
|
+
return __awaiter(this, void 0, void 0, function* () {
|
28
|
+
return this.getUserRequest(authToken, "/followers", userId);
|
29
|
+
});
|
30
|
+
}
|
31
|
+
// gets the people a specific user follows
|
32
|
+
getUserFollowings(authToken, userId) {
|
33
|
+
return __awaiter(this, void 0, void 0, function* () {
|
34
|
+
return this.getUserRequest(authToken, "/followings", userId);
|
35
|
+
});
|
36
|
+
}
|
37
|
+
// gets the playlists of a specific user
|
38
|
+
getUserPlaylists(authToken, userId) {
|
39
|
+
return __awaiter(this, void 0, void 0, function* () {
|
40
|
+
return this.getUserRequest(authToken, "/playlists", userId);
|
41
|
+
});
|
42
|
+
}
|
43
|
+
// gets the tracks of a specific user
|
44
|
+
getUserTracks(authToken, userId) {
|
45
|
+
return __awaiter(this, void 0, void 0, function* () {
|
46
|
+
return this.getUserRequest(authToken, "/tracks", userId);
|
47
|
+
});
|
48
|
+
}
|
49
|
+
// gets the web profiles of a specific user
|
50
|
+
getUserWebProfiles(authToken, userId) {
|
51
|
+
return __awaiter(this, void 0, void 0, function* () {
|
52
|
+
return this.getUserRequest(authToken, "/web-profiles", userId);
|
53
|
+
});
|
54
|
+
}
|
55
|
+
// gets the tracks a specific user liked
|
56
|
+
getUserLikedTracks(authToken, userId) {
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
58
|
+
return this.getUserRequest(authToken, "/likes/tracks", userId);
|
59
|
+
});
|
60
|
+
}
|
61
|
+
// gets the playlists a specific user liked
|
62
|
+
getUserLikedPlaylists(authToken, userId) {
|
63
|
+
return __awaiter(this, void 0, void 0, function* () {
|
64
|
+
return this.getUserRequest(authToken, "/likes/playlists", userId);
|
65
|
+
});
|
66
|
+
}
|
67
|
+
getUserRequest(authToken, endpoint, userId) {
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
69
|
+
var _a;
|
70
|
+
try {
|
71
|
+
const config = {
|
72
|
+
method: "GET",
|
73
|
+
maxBodyLength: Infinity,
|
74
|
+
url: `${this.baseUrl}/users/${userId}${endpoint}`,
|
75
|
+
headers: {
|
76
|
+
accept: "application/json; charset=utf-8",
|
77
|
+
"Content-Type": "application/json; charset=utf-8",
|
78
|
+
Authorization: `OAuth ${authToken}`,
|
79
|
+
},
|
80
|
+
};
|
81
|
+
const response = yield axios_1.default
|
82
|
+
.request(config)
|
83
|
+
.then((response) => {
|
84
|
+
return response.data;
|
85
|
+
})
|
86
|
+
.catch((error) => {
|
87
|
+
console.log(error);
|
88
|
+
throw new Error("Failed to get me");
|
89
|
+
});
|
90
|
+
return response;
|
91
|
+
}
|
92
|
+
catch (error) {
|
93
|
+
console.error("SoundCloud API Error:", ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || error);
|
94
|
+
throw error;
|
95
|
+
}
|
96
|
+
});
|
97
|
+
}
|
98
|
+
}
|
99
|
+
exports.Users = Users;
|
package/dist/index.js
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
const me_1 = require("./endpoints/me");
|
4
|
+
const token_1 = require("./endpoints/token");
|
5
|
+
const search_1 = require("./endpoints/search");
|
6
|
+
const playlists_1 = require("./endpoints/playlists");
|
7
|
+
const tracks_1 = require("./endpoints/tracks");
|
8
|
+
const users_1 = require("./endpoints/users");
|
9
|
+
const likes_1 = require("./endpoints/likes");
|
10
|
+
const reposts_1 = require("./endpoints/reposts");
|
11
|
+
const misc_1 = require("./endpoints/misc");
|
12
|
+
class SoundCloud {
|
13
|
+
constructor(clientId, clientSecret, redirectUri, PKCECodeVerifier) {
|
14
|
+
this.token = new token_1.Token(clientId, clientSecret, redirectUri, PKCECodeVerifier);
|
15
|
+
this.me = new me_1.Me(clientId, clientSecret, redirectUri, PKCECodeVerifier);
|
16
|
+
this.search = new search_1.Search(clientId, clientSecret, redirectUri, PKCECodeVerifier);
|
17
|
+
this.playlists = new playlists_1.Playlist(clientId, clientSecret, redirectUri, PKCECodeVerifier);
|
18
|
+
this.tracks = new tracks_1.Tracks(clientId, clientSecret, redirectUri, PKCECodeVerifier);
|
19
|
+
this.users = new users_1.Users(clientId, clientSecret, redirectUri, PKCECodeVerifier);
|
20
|
+
this.likes = new likes_1.Likes(clientId, clientSecret, redirectUri, PKCECodeVerifier);
|
21
|
+
this.reposts = new reposts_1.Reposts(clientId, clientSecret, redirectUri, PKCECodeVerifier);
|
22
|
+
this.misc = new misc_1.Misc(clientId, clientSecret, redirectUri, PKCECodeVerifier);
|
23
|
+
}
|
24
|
+
}
|
25
|
+
exports.default = SoundCloud;
|
package/package.json
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
{
|
2
|
+
"name": "soundcloud-wrapper",
|
3
|
+
"version": "0.9.0",
|
4
|
+
"description": "Node wrapper for the SoundCloud API",
|
5
|
+
"main": "dist/index.js",
|
6
|
+
"types": "dist/index.d.ts",
|
7
|
+
"files": [
|
8
|
+
"dist"
|
9
|
+
],
|
10
|
+
"repository": "https://github.com/18-28/soundcloud-api",
|
11
|
+
"homepage": "https://github.com/18-28/soundcloud-api",
|
12
|
+
"scripts": {
|
13
|
+
"build": "tsc",
|
14
|
+
"prepare": "npm run build"
|
15
|
+
},
|
16
|
+
"keywords": [
|
17
|
+
"soundcloud",
|
18
|
+
"api",
|
19
|
+
"wrapper",
|
20
|
+
"node"
|
21
|
+
],
|
22
|
+
"author": "developer_1828",
|
23
|
+
"license": "ISC",
|
24
|
+
"dependencies": {
|
25
|
+
"@types/qs": "^6.9.18",
|
26
|
+
"axios": "^1.7.9",
|
27
|
+
"qs": "^6.14.0"
|
28
|
+
},
|
29
|
+
"devDependencies": {
|
30
|
+
"@types/node": "^22.13.0",
|
31
|
+
"typescript": "^5.7.3"
|
32
|
+
}
|
33
|
+
}
|