gj-boomlings-api 0.1.2 → 0.1.6
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/LICENSE +5 -0
- package/README.md +48 -13
- package/functions/dlLevel.js +1 -1
- package/functions/getDailyLevel.js +8 -0
- package/functions/getLevelData.js +2 -1
- package/functions/getOfficialSongInfo.js +2 -1
- package/functions/getProfile.js +121 -0
- package/functions/getSongInfo.js +3 -2
- package/functions/getWeeklyDemon.js +8 -0
- package/index.js +7 -1
- package/misc/officialsongs.json +39 -39
- package/package.json +10 -4
package/LICENSE
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
Copyright (c) 2022, shikoshib
|
|
2
|
+
|
|
3
|
+
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
|
|
4
|
+
|
|
5
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
package/README.md
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
This package gets info from RobTop's servers (boomlings.com) and converts it into pure and beautiful JSON.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Functions
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
### dlLevel(id)
|
|
8
8
|
|
|
9
9
|
So basically this function downloads the entire level and converts the response into JSON.
|
|
10
10
|
|
|
11
11
|
```js
|
|
12
|
-
const gd = require("gj-boomlings-api")
|
|
13
|
-
gd.dlLevel(42584142).then(console.log)
|
|
12
|
+
const gd = require("gj-boomlings-api");
|
|
13
|
+
gd.dlLevel(42584142).then(console.log);
|
|
14
14
|
```
|
|
15
15
|
|
|
16
16
|
Returns:
|
|
@@ -53,13 +53,46 @@ Returns:
|
|
|
53
53
|
}
|
|
54
54
|
```
|
|
55
55
|
|
|
56
|
-
|
|
56
|
+
### getProfile(user)
|
|
57
57
|
|
|
58
|
-
With this function, you can get
|
|
58
|
+
With this function, you can get somebody's profile info. You can use a player ID (not the account ID) or a name string, it doesn't matter.
|
|
59
59
|
|
|
60
60
|
```js
|
|
61
|
-
const gd = require("gj-boomlings-api")
|
|
62
|
-
gd.
|
|
61
|
+
const gd = require("gj-boomlings-api");
|
|
62
|
+
gd.getProfile(16).then(console.log);
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Returns:
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
{
|
|
69
|
+
username: 'RobTop',
|
|
70
|
+
playerID: 16,
|
|
71
|
+
accountID: 71,
|
|
72
|
+
rank: 219796,
|
|
73
|
+
stars: 2375,
|
|
74
|
+
diamonds: 2170,
|
|
75
|
+
secretCoins: 3,
|
|
76
|
+
userCoins: 140,
|
|
77
|
+
demons: 5,
|
|
78
|
+
creatorPoints: 0,
|
|
79
|
+
messages: 'none',
|
|
80
|
+
friendRequests: 'none',
|
|
81
|
+
commentHistory: 'all',
|
|
82
|
+
mod: 'elder',
|
|
83
|
+
youtube: 'https://youtube.com/channel/UCz_yk8mDSAnxJq0ar66L4sw1231',
|
|
84
|
+
twitter: 'https://twitter.com/RobTopGames',
|
|
85
|
+
twitch: 'https://twitch.tv/robtopgames'
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### getSongInfo(song)
|
|
90
|
+
|
|
91
|
+
With this function, you can get an info about a custom song by its ID (but only if it's on Newgrounds).
|
|
92
|
+
|
|
93
|
+
```js
|
|
94
|
+
const gd = require("gj-boomlings-api");
|
|
95
|
+
gd.getSongInfo(1099128).then(console.log);
|
|
63
96
|
```
|
|
64
97
|
|
|
65
98
|
Returns:
|
|
@@ -75,14 +108,14 @@ Returns:
|
|
|
75
108
|
}
|
|
76
109
|
```
|
|
77
110
|
|
|
78
|
-
|
|
111
|
+
### getOfficialSongInfo(song)
|
|
79
112
|
|
|
80
113
|
Basically the same thing as ```getSongInfo()```, but for official songs.
|
|
81
114
|
|
|
82
115
|
```js
|
|
83
|
-
const gd = require("gj-boomlings-api")
|
|
116
|
+
const gd = require("gj-boomlings-api");
|
|
84
117
|
const song = gd.getOfficialSongInfo(14);
|
|
85
|
-
console.log(song)
|
|
118
|
+
console.log(song);
|
|
86
119
|
```
|
|
87
120
|
|
|
88
121
|
Returns:
|
|
@@ -92,7 +125,9 @@ Returns:
|
|
|
92
125
|
name: 'Clubstep',
|
|
93
126
|
id: 'Level 14',
|
|
94
127
|
artist: 'DJ-Nate',
|
|
95
|
-
fileSize: '
|
|
128
|
+
fileSize: '0 MB',
|
|
96
129
|
link: 'https://www.newgrounds.com/audio/listen/396093'
|
|
97
130
|
}
|
|
98
|
-
```
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Inspired by [GDBrowser](https://github.com/GDColon/GDBrowser/). Thanks to [Wireshark](https://www.wireshark.org/) and [GDDocs](https://github.com/gd-programming/gd.docs/) for helping me in creating this package.
|
package/functions/dlLevel.js
CHANGED
|
@@ -23,7 +23,7 @@ module.exports = {
|
|
|
23
23
|
})
|
|
24
24
|
|
|
25
25
|
if(res.data == -1) throw new Error("-1 Not found.")
|
|
26
|
-
if(res.data == "
|
|
26
|
+
if(res.data.toLowerCase() == "error code: 1005") throw new Error("1005 error: Your IP address has been blocked from sending requests to a server. It's recommended to use locally (directly from a PC).")
|
|
27
27
|
let split1 = res.data.split("1:")[1]; // id
|
|
28
28
|
let split2 = res.data.split(":2:")[1]; // name
|
|
29
29
|
let split3 = res.data.split(":3:")[1]; // description
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
module.exports = {
|
|
2
2
|
getLevelData:
|
|
3
3
|
function(level, log = false) {
|
|
4
|
+
if(!level) throw new Error("Please provide a level ID.");
|
|
4
5
|
if(typeof level === "string") throw new Error("The level parameter should be a number.");
|
|
5
6
|
const axios = require("axios");
|
|
6
7
|
const { headers } = require("../config.json");
|
|
@@ -19,7 +20,7 @@ module.exports = {
|
|
|
19
20
|
}).then(res => {
|
|
20
21
|
|
|
21
22
|
if(res.data == -1) throw new Error("-1 Not found.")
|
|
22
|
-
if(res.data == "
|
|
23
|
+
if(res.data.toLowerCase() == "error code: 1005") throw new Error("1005 error: Your IP address has been blocked from sending requests to a server. It's recommended to use locally (directly from a PC).")
|
|
23
24
|
|
|
24
25
|
let levelData = res.data.split(":4:")[1].split(":5:")[0]
|
|
25
26
|
if(log == true) console.log(levelData);
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
module.exports = {
|
|
2
2
|
getOfficialSongInfo:
|
|
3
3
|
function(song) {
|
|
4
|
-
if(
|
|
4
|
+
if(!song) throw new Error("Please provide a song ID.");
|
|
5
|
+
if(isNaN(song)) throw new Error("A song ID must be a number.");
|
|
5
6
|
const {
|
|
6
7
|
sm,
|
|
7
8
|
bot,
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
getProfile:
|
|
3
|
+
async function(str) {
|
|
4
|
+
if(!str) throw new Error("Please provide a user ID or name!");
|
|
5
|
+
const axios = require("axios");
|
|
6
|
+
const { headers } = require("../config.json");
|
|
7
|
+
|
|
8
|
+
const data = {
|
|
9
|
+
gameVersion: 21,
|
|
10
|
+
binaryVersion: 35,
|
|
11
|
+
gdw: 0,
|
|
12
|
+
str: str,
|
|
13
|
+
secret: "Wmfd2893gb7"
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
let r = await axios.post("http://www.boomlings.com/database/getGJUsers20.php", data, {
|
|
17
|
+
headers: headers
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
let id = Number(r.data.split(":16:")[1].split(":3:")[0]);
|
|
21
|
+
if(Number(id) < 71) id = Number(r.data.split(":16:")[2].split(":3:")[0]);
|
|
22
|
+
|
|
23
|
+
let GJUI20data = {
|
|
24
|
+
gameVersion: 21,
|
|
25
|
+
binaryVersion: 35,
|
|
26
|
+
gdw: 0,
|
|
27
|
+
targetAccountID: id,
|
|
28
|
+
secret: "Wmfd2893gb7"
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
let res = await axios.post("http://www.boomlings.com/database/getGJUserInfo20.php", GJUI20data, {
|
|
32
|
+
headers: headers
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
if(res.data == -1) throw new Error("-1 Not found.")
|
|
36
|
+
if(res.data.toLowerCase() == "error code: 1005") throw new Error("1005 error: Your IP address has been blocked from sending requests to a server. It's recommended to use locally (directly from a PC).")
|
|
37
|
+
|
|
38
|
+
let dataWoSkins = `${res.data.split(":21:")[0]}${res.data.split(":48:")[1]}`;
|
|
39
|
+
|
|
40
|
+
let username = dataWoSkins.split("1:")[1].split(":2:")[0];
|
|
41
|
+
let playerID = dataWoSkins.split(":2:")[1].split(":13:")[0];
|
|
42
|
+
let goldCoins = dataWoSkins.split(":13:")[1].split(":17:")[0];
|
|
43
|
+
let silverCoins = dataWoSkins.split(":17:")[1].split(":10:")[0];
|
|
44
|
+
let stars = dataWoSkins.split(":3:")[1].split(":46:")[0];
|
|
45
|
+
let diamonds = dataWoSkins.split(":46:")[1].split(":4:")[0];
|
|
46
|
+
let demons = dataWoSkins.split(":4:")[1].split(":8:")[0];
|
|
47
|
+
let cps = dataWoSkins.split(":8:")[1].split(":18:")[0]; // clicks per second lmao
|
|
48
|
+
let msgState = dataWoSkins.split(":18:")[1].split(":19:")[0];
|
|
49
|
+
let friendsState = dataWoSkins.split(":19:")[1].split(":50:")[0];
|
|
50
|
+
let commentHistoryState = dataWoSkins.split(":50:")[1].split(":20:")[0];
|
|
51
|
+
let youtube = dataWoSkins.split(":20:")[1].split(":30:")[0];
|
|
52
|
+
let rank = dataWoSkins.split(":30:")[1].split(":16:")[0];
|
|
53
|
+
let accountID = dataWoSkins.split(":16:")[1].split(":31:")[0];
|
|
54
|
+
let twitter = dataWoSkins.split(":44:")[1].split(":45:")[0];
|
|
55
|
+
let twitch = dataWoSkins.split(":45:")[1].split(":49:")[0];
|
|
56
|
+
let modState = dataWoSkins.split(":49:")[1].split(":29:")[0];
|
|
57
|
+
|
|
58
|
+
if(youtube.includes(":")) youtube = dataWoSkins.split(":20:")[2].split(":30:")[0];
|
|
59
|
+
if(twitter.includes(":")) twitter = dataWoSkins.split(":44:")[2].split(":45:")[0];
|
|
60
|
+
if(twitch.includes(":")) twitch = dataWoSkins.split(":45:")[2].split(":49:")[0];
|
|
61
|
+
if(goldCoins.includes(":")) goldCoins = dataWoSkins.split(":13:")[2].split(":17:")[0];
|
|
62
|
+
if(goldCoins == "") goldCoins = dataWoSkins.split(":13:")[1].split(":17:")[1];
|
|
63
|
+
if(silverCoins.includes(":")) silverCoins = dataWoSkins.split("17:")[2].split(":10:")[0];
|
|
64
|
+
if(rank.includes(":")) rank = dataWoSkins.split(":30:")[2].split(":16:")[0];
|
|
65
|
+
if(accountID.includes(":")) accountID = dataWoSkins.split(":16:")[2].split(":31:")[0];
|
|
66
|
+
if(demons.includes(":")) demons = dataWoSkins.split(":4:")[2].split(":8:")[0];
|
|
67
|
+
if(msgState.includes(":")) msgState = dataWoSkins.split(":18:")[2].split(":19:")[0];
|
|
68
|
+
if(stars.includes(":")) stars = dataWoSkins.split("3:")[2].split(":46:")[0];
|
|
69
|
+
if(dataWoSkins.split("3:")[2].split(":46:")[0].includes(":")) stars = dataWoSkins.split("3:")[3].split(":46:")[0];
|
|
70
|
+
if(dataWoSkins.split("3:")[3].split(":46:")[0] == "") stars = dataWoSkins.split("3:")[4].split(":46:")[0];
|
|
71
|
+
|
|
72
|
+
let ytLnk = `https://youtube.com/channel/${youtube}`;
|
|
73
|
+
let twitterLnk = `https://twitter.com/${twitter}`;
|
|
74
|
+
let twitchLnk = `https://twitch.tv/${twitch}`;
|
|
75
|
+
|
|
76
|
+
if(youtube == "") ytLnk = null;
|
|
77
|
+
if(twitter == "") twitterLnk = null;
|
|
78
|
+
if(twitch == "") twitchLnk = null;
|
|
79
|
+
if(youtube.endsWith("123")) ytLnk = `https://youtube.com/channel/${youtube.split("123")[0]}`;
|
|
80
|
+
if(twitter.endsWith("123")) twitterLnk = `https://twitter.com/${twitter.split("123")[0]}`;
|
|
81
|
+
if(twitch.endsWith("123")) twitchLnk = `https://twitch.tv/${twitch.split("123")[0]}`;
|
|
82
|
+
|
|
83
|
+
let msgStateDecoding = {
|
|
84
|
+
"0": "all",
|
|
85
|
+
"1": "friends",
|
|
86
|
+
"2": "none"
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
let stateBinaryDecoding = {
|
|
90
|
+
"0": "all",
|
|
91
|
+
"1": "none"
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
let modDecoding = {
|
|
95
|
+
"0": "none",
|
|
96
|
+
"1": "mod",
|
|
97
|
+
"2": "elder"
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const result = {
|
|
101
|
+
username: username,
|
|
102
|
+
playerID: Number(playerID),
|
|
103
|
+
accountID: Number(accountID),
|
|
104
|
+
rank: Number(rank),
|
|
105
|
+
stars: Number(stars),
|
|
106
|
+
diamonds: Number(diamonds),
|
|
107
|
+
secretCoins: Number(goldCoins),
|
|
108
|
+
userCoins: Number(silverCoins),
|
|
109
|
+
demons: Number(demons),
|
|
110
|
+
creatorPoints: Number(cps),
|
|
111
|
+
messages: msgStateDecoding[msgState],
|
|
112
|
+
friendRequests: stateBinaryDecoding[friendsState],
|
|
113
|
+
commentHistory: msgStateDecoding[commentHistoryState],
|
|
114
|
+
mod: modDecoding[modState],
|
|
115
|
+
youtube: ytLnk,
|
|
116
|
+
twitter: twitterLnk,
|
|
117
|
+
twitch: twitchLnk
|
|
118
|
+
}
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
}
|
package/functions/getSongInfo.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
module.exports = {
|
|
2
2
|
getSongInfo:
|
|
3
3
|
async function(song) {
|
|
4
|
-
if(
|
|
4
|
+
if(!song) throw new Error("Please provide a song ID.");
|
|
5
|
+
if(isNaN(song)) throw new Error("A song ID must be a number.")
|
|
5
6
|
const axios = require("axios")
|
|
6
7
|
const {headers} = require("../config.json")
|
|
7
8
|
|
|
@@ -15,7 +16,7 @@ module.exports = {
|
|
|
15
16
|
})
|
|
16
17
|
|
|
17
18
|
if(res.data == -2) throw new Error(`-2. Couldn't find a song with ID ${song}.`)
|
|
18
|
-
if(res.data == "
|
|
19
|
+
if(res.data.toLowerCase() == "error code: 1005") throw new Error("1005 error: Your IP address has been blocked from sending requests to a server. It's recommended to use locally (directly from a PC).")
|
|
19
20
|
|
|
20
21
|
const result = {
|
|
21
22
|
"name": res.data.split("|~2~|~")[1].split("~|~3~|~")[0],
|
package/index.js
CHANGED
|
@@ -4,10 +4,16 @@ const { getSongInfo } = require("./functions/getSongInfo.js");
|
|
|
4
4
|
const { getOfficialSongInfo } = require("./functions/getOfficialSongInfo.js");
|
|
5
5
|
const { decURLSafeBase64 } = require("./functions/decURLSafeBase64.js");
|
|
6
6
|
const { encURLSafeBase64 } = require("./functions/encURLSafeBase64.js");
|
|
7
|
+
const { getDailyLevel } = require("./functions/getDailyLevel.js");
|
|
8
|
+
const { getWeeklyDemon } = require("./functions/getWeeklyDemon.js");
|
|
9
|
+
const { getProfile } = require("./functions/getProfile.js");
|
|
7
10
|
|
|
8
11
|
module.exports.dlLevel = dlLevel;
|
|
9
12
|
module.exports.getLevelData = getLevelData;
|
|
10
13
|
module.exports.getSongInfo = getSongInfo;
|
|
11
14
|
module.exports.getOfficialSongInfo = getOfficialSongInfo;
|
|
12
15
|
module.exports.decURLSafeBase64 = decURLSafeBase64;
|
|
13
|
-
module.exports.encURLSafeBase64 = encURLSafeBase64;
|
|
16
|
+
module.exports.encURLSafeBase64 = encURLSafeBase64;
|
|
17
|
+
module.exports.getDailyLevel = getDailyLevel;
|
|
18
|
+
module.exports.getWeeklyDemon = getWeeklyDemon;
|
|
19
|
+
module.exports.getProfile = getProfile;
|
package/misc/officialsongs.json
CHANGED
|
@@ -2,272 +2,272 @@
|
|
|
2
2
|
"name": "Stereo Madness",
|
|
3
3
|
"id": "Level 1",
|
|
4
4
|
"artist": "ForeverBound",
|
|
5
|
-
"fileSize": "
|
|
5
|
+
"fileSize": "0 MB",
|
|
6
6
|
"link": "https://www.youtube.com/watch?v=JhKyKEDxo8Q"
|
|
7
7
|
},"bot": {
|
|
8
8
|
"name": "Back on Track",
|
|
9
9
|
"id": "Level 2",
|
|
10
10
|
"artist": "DJVI",
|
|
11
|
-
"fileSize": "
|
|
11
|
+
"fileSize": "0 MB",
|
|
12
12
|
"link": "https://www.youtube.com/watch?v=N9vDTYZpqXM"
|
|
13
13
|
},
|
|
14
14
|
"pg": {
|
|
15
15
|
"name": "Polargeist",
|
|
16
16
|
"id": "Level 3",
|
|
17
17
|
"artist": "Step",
|
|
18
|
-
"fileSize": "
|
|
18
|
+
"fileSize": "0 MB",
|
|
19
19
|
"link": "https://www.youtube.com/watch?v=4W28wWWxKuQ"
|
|
20
20
|
},
|
|
21
21
|
"dout": {
|
|
22
22
|
"name": "Dry Out",
|
|
23
23
|
"id": "Level 4",
|
|
24
24
|
"artist": "DJVI",
|
|
25
|
-
"fileSize": "
|
|
25
|
+
"fileSize": "0 MB",
|
|
26
26
|
"link": "https://www.youtube.com/watch?v=FnXabH2q2A0"
|
|
27
27
|
},
|
|
28
28
|
"bab": {
|
|
29
29
|
"name": "Base After Base",
|
|
30
30
|
"id": "Level 5",
|
|
31
31
|
"artist": "DJVI",
|
|
32
|
-
"fileSize": "
|
|
32
|
+
"fileSize": "0 MB",
|
|
33
33
|
"link": "https://www.youtube.com/watch?v=TZULkgQPHt0"
|
|
34
34
|
},
|
|
35
35
|
"clg": {
|
|
36
36
|
"name": "Cant Let Go",
|
|
37
37
|
"id": "Level 6",
|
|
38
38
|
"artist": "DJVI",
|
|
39
|
-
"fileSize": "
|
|
39
|
+
"fileSize": "0 MB",
|
|
40
40
|
"link": "https://www.youtube.com/watch?v=fLnF-QnR1Zw"
|
|
41
41
|
},
|
|
42
42
|
"j": {
|
|
43
43
|
"name": "Jumper",
|
|
44
44
|
"id": "Level 7",
|
|
45
45
|
"artist": "Waterflame",
|
|
46
|
-
"fileSize": "
|
|
46
|
+
"fileSize": "0 MB",
|
|
47
47
|
"link": "https://www.youtube.com/watch?v=ZXHO4AN_49Q"
|
|
48
48
|
},
|
|
49
49
|
"tm": {
|
|
50
50
|
"name": "Time Machine",
|
|
51
51
|
"id": "Level 8",
|
|
52
52
|
"artist": "Waterflame",
|
|
53
|
-
"fileSize": "
|
|
53
|
+
"fileSize": "0 MB",
|
|
54
54
|
"link": "https://www.youtube.com/watch?v=zZ1L9JD6l0g"
|
|
55
55
|
},
|
|
56
56
|
"c": {
|
|
57
57
|
"name": "Cycles",
|
|
58
58
|
"id": "Level 9",
|
|
59
59
|
"artist": "DJVI",
|
|
60
|
-
"fileSize": "
|
|
60
|
+
"fileSize": "0 MB",
|
|
61
61
|
"link": "https://www.youtube.com/watch?v=KDdvGZn6Gfs"
|
|
62
62
|
},
|
|
63
63
|
"xs": {
|
|
64
64
|
"name": "xStep",
|
|
65
65
|
"id": "Level 10",
|
|
66
66
|
"artist": "DJVI",
|
|
67
|
-
"fileSize": "
|
|
67
|
+
"fileSize": "0 MB",
|
|
68
68
|
"link": "https://www.youtube.com/watch?v=PSvYfVGyQfw"
|
|
69
69
|
},
|
|
70
70
|
"cf": {
|
|
71
71
|
"name": "Clutterfunk",
|
|
72
72
|
"id": "Level 11",
|
|
73
73
|
"artist": "Waterflame",
|
|
74
|
-
"fileSize": "
|
|
74
|
+
"fileSize": "0 MB",
|
|
75
75
|
"link": "https://www.youtube.com/watch?v=D5uJOpItgNg"
|
|
76
76
|
},
|
|
77
77
|
"toe": {
|
|
78
78
|
"name": "Theory of Everything",
|
|
79
79
|
"id": "Level 12",
|
|
80
80
|
"artist": "DJ-Nate",
|
|
81
|
-
"fileSize": "
|
|
81
|
+
"fileSize": "0 MB",
|
|
82
82
|
"link": "https://www.newgrounds.com/audio/listen/354826"
|
|
83
83
|
},
|
|
84
84
|
"ea": {
|
|
85
85
|
"name": "Electroman Adventures",
|
|
86
86
|
"id": "Level 13",
|
|
87
87
|
"artist": "Waterflame",
|
|
88
|
-
"fileSize": "
|
|
88
|
+
"fileSize": "0 MB",
|
|
89
89
|
"link": "https://www.youtube.com/watch?v=Pb6KyewC_Vg"
|
|
90
90
|
},
|
|
91
91
|
"cs": {
|
|
92
92
|
"name": "Clubstep",
|
|
93
93
|
"id": "Level 14",
|
|
94
94
|
"artist": "DJ-Nate",
|
|
95
|
-
"fileSize": "
|
|
95
|
+
"fileSize": "0 MB",
|
|
96
96
|
"link": "https://www.newgrounds.com/audio/listen/396093"
|
|
97
97
|
},
|
|
98
98
|
"ed": {
|
|
99
99
|
"name": "Electrodynamix",
|
|
100
100
|
"id": "Level 15",
|
|
101
101
|
"artist": "DJ-Nate",
|
|
102
|
-
"fileSize": "
|
|
102
|
+
"fileSize": "0 MB",
|
|
103
103
|
"link": "https://www.newgrounds.com/audio/listen/368392"
|
|
104
104
|
},
|
|
105
105
|
"hf": {
|
|
106
106
|
"name": "Hexagon Force",
|
|
107
107
|
"id": "Level 16",
|
|
108
108
|
"artist": "Waterflame",
|
|
109
|
-
"fileSize": "
|
|
109
|
+
"fileSize": "0 MB",
|
|
110
110
|
"link": "https://www.youtube.com/watch?v=afwK743PL2Y"
|
|
111
111
|
},
|
|
112
112
|
"bp": {
|
|
113
113
|
"name": "Blast Processing",
|
|
114
114
|
"id": "Level 17",
|
|
115
115
|
"artist": "Waterflame",
|
|
116
|
-
"fileSize": "
|
|
116
|
+
"fileSize": "0 MB",
|
|
117
117
|
"link": "https://www.youtube.com/watch?v=Z5RufkDHsdM"
|
|
118
118
|
},
|
|
119
119
|
"toeii": {
|
|
120
120
|
"name": "Theory of Everything 2",
|
|
121
121
|
"id": "Level 18",
|
|
122
122
|
"artist": "DJ-Nate",
|
|
123
|
-
"fileSize": "
|
|
123
|
+
"fileSize": "0 MB",
|
|
124
124
|
"link": "https://www.newgrounds.com/audio/listen/790340"
|
|
125
125
|
},
|
|
126
126
|
"gd": {
|
|
127
127
|
"name": "Geometrical Dominator",
|
|
128
128
|
"id": "Level 19",
|
|
129
129
|
"artist": "Waterflame",
|
|
130
|
-
"fileSize": "
|
|
130
|
+
"fileSize": "0 MB",
|
|
131
131
|
"link": "https://www.newgrounds.com/audio/listen/641172"
|
|
132
132
|
},
|
|
133
133
|
"d": {
|
|
134
134
|
"name": "Deadlocked",
|
|
135
135
|
"id": "Level 20",
|
|
136
136
|
"artist": "F-777",
|
|
137
|
-
"fileSize": "
|
|
137
|
+
"fileSize": "0 MB",
|
|
138
138
|
"link": "https://www.youtube.com/watch?v=QRGkFkf2r0U"
|
|
139
139
|
},
|
|
140
140
|
"fd": {
|
|
141
141
|
"name": "Fingerdash",
|
|
142
142
|
"id": "Level 21",
|
|
143
143
|
"artist": "MDK",
|
|
144
|
-
"fileSize": "
|
|
144
|
+
"fileSize": "0 MB",
|
|
145
145
|
"link": "https://www.youtube.com/watch?v=BuPmq7yjDnI"
|
|
146
146
|
},
|
|
147
147
|
"tss": {
|
|
148
148
|
"name": "The Seven Seas",
|
|
149
149
|
"id": "Level 1 (Geometry Dash: Meltdown)",
|
|
150
150
|
"artist": "F-777",
|
|
151
|
-
"fileSize": "
|
|
151
|
+
"fileSize": "0 MB",
|
|
152
152
|
"link": "https://www.youtube.com/watch?v=38fPQ5JKQ_Q"
|
|
153
153
|
},
|
|
154
154
|
"va": {
|
|
155
155
|
"name": "Viking Arena",
|
|
156
156
|
"id": "Level 2 (Geometry Dash: Meltdown)",
|
|
157
157
|
"artist": "F-777",
|
|
158
|
-
"fileSize": "
|
|
158
|
+
"fileSize": "0 MB",
|
|
159
159
|
"link": "https://www.youtube.com/watch?v=RaJ6Vf2w9hY"
|
|
160
160
|
},
|
|
161
161
|
"ar": {
|
|
162
162
|
"name": "Airborne Robots",
|
|
163
163
|
"id": "Level 3 (Geometry Dash: Meltdown)",
|
|
164
164
|
"artist": "F-777",
|
|
165
|
-
"fileSize": "
|
|
165
|
+
"fileSize": "0 MB",
|
|
166
166
|
"link": "https://www.youtube.com/watch?v=guBpnPY32s0"
|
|
167
167
|
},
|
|
168
168
|
"tc": {
|
|
169
169
|
"name": "Random Song 06",
|
|
170
170
|
"id": "Level 22 (The Challenge)",
|
|
171
171
|
"artist": "RobTop",
|
|
172
|
-
"fileSize": "
|
|
172
|
+
"fileSize": "0 MB",
|
|
173
173
|
"link": "https://www.newgrounds.com/audio/listen/633385"
|
|
174
174
|
},
|
|
175
175
|
"p": {
|
|
176
176
|
"name": "Payload",
|
|
177
177
|
"id": "Level 1 (Geometry Dash: World)",
|
|
178
178
|
"artist": "Dex Arson",
|
|
179
|
-
"fileSize": "
|
|
179
|
+
"fileSize": "0 MB",
|
|
180
180
|
"link": "https://www.youtube.com/watch?v=2SFOjJxEL7g"
|
|
181
181
|
},
|
|
182
182
|
"bm": {
|
|
183
183
|
"name": "Beast Mode",
|
|
184
184
|
"id": "Level 2 (Geometry Dash: World)",
|
|
185
185
|
"artist": "Dex Arson",
|
|
186
|
-
"fileSize": "
|
|
186
|
+
"fileSize": "0 MB",
|
|
187
187
|
"link": "https://www.newgrounds.com/audio/listen/589874"
|
|
188
188
|
},
|
|
189
189
|
"m": {
|
|
190
190
|
"name": "Machina",
|
|
191
191
|
"id": "Level 3 (Geometry Dash: World)",
|
|
192
192
|
"artist": "Dex Arson",
|
|
193
|
-
"fileSize": "
|
|
193
|
+
"fileSize": "0 MB",
|
|
194
194
|
"link": "https://www.youtube.com/watch?v=EWjZOxs87yg"
|
|
195
195
|
},
|
|
196
196
|
"y": {
|
|
197
197
|
"name": "Years",
|
|
198
198
|
"id": "Level 4 (Geometry Dash: World)",
|
|
199
199
|
"artist": "Dex Arson",
|
|
200
|
-
"fileSize": "
|
|
200
|
+
"fileSize": "0 MB",
|
|
201
201
|
"link": "https://www.youtube.com/watch?v=0MZvDD_sy-w"
|
|
202
202
|
},
|
|
203
203
|
"f": {
|
|
204
204
|
"name": "Frontlines",
|
|
205
205
|
"id": "Level 5 (Geometry Dash: World)",
|
|
206
206
|
"artist": "Dex Arson",
|
|
207
|
-
"fileSize": "
|
|
207
|
+
"fileSize": "0 MB",
|
|
208
208
|
"link": "https://www.youtube.com/watch?v=f3wAripOdag"
|
|
209
209
|
},
|
|
210
210
|
"sp": {
|
|
211
211
|
"name": "Space Pirates",
|
|
212
212
|
"id": "Level 6 (Geometry Dash: World)",
|
|
213
213
|
"artist": "Waterflame",
|
|
214
|
-
"fileSize": "
|
|
214
|
+
"fileSize": "0 MB",
|
|
215
215
|
"link": "https://www.youtube.com/watch?v=Cu7HaeRHMhM"
|
|
216
216
|
},
|
|
217
217
|
"s": {
|
|
218
218
|
"name": "Striker",
|
|
219
219
|
"id": "Level 7 (Geometry Dash: World)",
|
|
220
220
|
"artist": "Waterflame",
|
|
221
|
-
"fileSize": "
|
|
221
|
+
"fileSize": "0 MB",
|
|
222
222
|
"link": "https://www.youtube.com/watch?v=MU9wRCGt9h8"
|
|
223
223
|
},
|
|
224
224
|
"e": {
|
|
225
225
|
"name": "Embers",
|
|
226
226
|
"id": "Level 8 (Geometry Dash: World)",
|
|
227
227
|
"artist": "Dex Arson",
|
|
228
|
-
"fileSize": "
|
|
228
|
+
"fileSize": "0 MB",
|
|
229
229
|
"link": "https://www.youtube.com/watch?v=nMDMlIvdqlA"
|
|
230
230
|
},
|
|
231
231
|
"round": {
|
|
232
232
|
"name": "Round 1",
|
|
233
233
|
"id": "Level 9 (Geometry Dash: World)",
|
|
234
234
|
"artist": "Dex Arson",
|
|
235
|
-
"fileSize": "
|
|
235
|
+
"fileSize": "0 MB",
|
|
236
236
|
"link": "https://www.youtube.com/watch?v=NvQoY4gTIGU"
|
|
237
237
|
},
|
|
238
238
|
"mdo": {
|
|
239
239
|
"name": "Monster Dance Off",
|
|
240
240
|
"id": "Level 10 (Geometry Dash: World)",
|
|
241
241
|
"artist": "F-777",
|
|
242
|
-
"fileSize": "
|
|
242
|
+
"fileSize": "0 MB",
|
|
243
243
|
"link": "https://www.youtube.com/watch?v=B8YkwDbGBr8"
|
|
244
244
|
},
|
|
245
245
|
"ps": {
|
|
246
246
|
"name": "Press Start",
|
|
247
247
|
"id": "Level 1 (Geometry Dash: SubZero)",
|
|
248
248
|
"artist": "MDK",
|
|
249
|
-
"fileSize": "
|
|
249
|
+
"fileSize": "0 MB",
|
|
250
250
|
"link": "https://www.youtube.com/watch?v=XoLouT7TqZY"
|
|
251
251
|
},
|
|
252
252
|
"ne": {
|
|
253
253
|
"name": "Nock Em",
|
|
254
254
|
"id": "Level 2 (Geometry Dash: SubZero)",
|
|
255
255
|
"artist": "Bossfight",
|
|
256
|
-
"fileSize": "
|
|
256
|
+
"fileSize": "0 MB",
|
|
257
257
|
"link": "https://www.youtube.com/watch?v=ePv2X_CCaGg"
|
|
258
258
|
},
|
|
259
259
|
"pt": {
|
|
260
260
|
"name": "Power Trip",
|
|
261
261
|
"id": "Level 3 (Geometry Dash: SubZero)",
|
|
262
262
|
"artist": "Boom Kitty",
|
|
263
|
-
"fileSize": "
|
|
263
|
+
"fileSize": "0 MB",
|
|
264
264
|
"link": "https://www.youtube.com/watch?v=l6OsF7RlQb4"
|
|
265
265
|
},
|
|
266
266
|
"unknown": {
|
|
267
267
|
"name": "Unknown",
|
|
268
268
|
"id": "This song is not defined by RobTop. In game it returns \"Back on Track\".",
|
|
269
269
|
"artist": "DJVI",
|
|
270
|
-
"fileSize": "
|
|
270
|
+
"fileSize": "0 MB",
|
|
271
271
|
"link": null
|
|
272
272
|
}
|
|
273
273
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gj-boomlings-api",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "A Node.js module that allows you to fetch boomlings.com easily",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -16,12 +16,18 @@
|
|
|
16
16
|
"url": "https://github.com/shikoshib/gj-boomlings-api/issues"
|
|
17
17
|
},
|
|
18
18
|
"homepage": "https://github.com/shikoshib/gj-boomlings-api",
|
|
19
|
+
"keywords": [
|
|
20
|
+
"geometrydash",
|
|
21
|
+
"gd",
|
|
22
|
+
"gj",
|
|
23
|
+
"boomlings",
|
|
24
|
+
"api",
|
|
25
|
+
"gaming"
|
|
26
|
+
],
|
|
19
27
|
"license": "ISC",
|
|
20
28
|
"dependencies": {
|
|
21
29
|
"axios": "^1.2.1",
|
|
22
30
|
"crypto": "^1.0.1",
|
|
23
|
-
"js-base64": "^3.7.3"
|
|
24
|
-
"node-fetch": "^2.6.7",
|
|
25
|
-
"xor-crypt": "^1.1.1"
|
|
31
|
+
"js-base64": "^3.7.3"
|
|
26
32
|
}
|
|
27
33
|
}
|