UNPKG

3.34 kBJavaScriptView Raw
1const g = require('got')
2const _ = require('underscore')
3const cfg = require('../lib/config')
4const { HttpsAgent } = require('agentkeepalive')
5const log = console.log
6
7let api = {
8 $url: 'https://www.curseforge.com/wow/addons/',
9 $srl: 'https://addons-ecs.forgesvc.net/api/v2/addon',
10
11 $lcl: /(addons|projects)\/(.*)$/,
12 $scl: 'curseforge.com',
13
14 info(ad, done) {
15 let flavor = cfg.getMode() === '_classic_' ? 'wow_classic' : 'wow_retail'
16 let top = require('./')
17
18 top.getDB('curse', db => {
19 // log('curse info')
20 if (!db) return done()
21
22 // log('got db', db)
23
24 let x = _.find(db, d => ad.key === d.key)
25
26 // log('got x', x)
27
28 if (!x) return done()
29
30 let id = x.id
31
32 let qs = `${api.$srl}/${id}`
33
34 // log('getting', qs)
35 g.get(qs)
36 .then(res => {
37 res = JSON.parse(res.body)
38 // log('got', res)
39
40 let data = {
41 name: res.name,
42 owner: res.authors ? res.authors[0].name : 'unknown',
43 create: new Date(res.dateCreated).valueOf() / 1000,
44 update: new Date(res.dateReleased).valueOf() / 1000,
45 download: res.downloadCount,
46 version: res.latestFiles.map(x => {
47 return {
48 name: x.displayName,
49 size: x.fileLength,
50 link: x.downloadUrl,
51 flavor: x.gameVersionFlavor,
52 date: new Date(x.fileDate),
53 stage: x.releaseType // stage: 1 formal, 2 beta, 3 alpha (0, 4 not found)
54 }
55 })
56 }
57
58 if (!ad.anyway)
59 data.version = _.filter(data.version, x => x.flavor === flavor)
60
61 if (!ad.nolib)
62 data.version = _.filter(data.version, x => !x.name.match(/-nolib$/))
63
64 let beta = _.filter(data.version, x => x.stage < 3)
65 if (beta) data.version = beta
66
67 data.version.sort((a, b) => b.date - a.date)
68
69 // log('final data', data)
70 done(!data.version.length ? null : data)
71 })
72 .catch(err => {
73 done()
74 })
75 })
76 },
77
78 summary(done) {
79 g.get('https://github.com/antiwinter/scrap/raw/master/wowa/db-curse.json', {
80 agent: new HttpsAgent({ keepAlive: true })
81 })
82 .then(res => {
83 done(JSON.parse(res.body))
84 })
85 .catch(err => {
86 log('githubcontent error', err)
87 done()
88 })
89 },
90
91 search(ad, done) {
92 let flavor = cfg.getMode() === '_classic_' ? 'wow_classic' : 'wow_retail'
93
94 let qs = `${api.$srl}/search?gameId=1&index=0&pageSize=30&searchFilter=${ad.key}`
95 // log('searching', qs)
96 g.get(qs)
97 .then(res => {
98 // log(res.body)
99 let data = JSON.parse(res.body)
100
101 if (!ad.anyway)
102 data = _.filter(data, d =>
103 _.find(
104 d.gameVersionLatestFiles,
105 _d => _d.gameVersionFlavor === flavor
106 )
107 )
108
109 done(
110 data.map(x => {
111 return {
112 name: x.name,
113 key: x.websiteUrl.split('/').pop(),
114 download: x.downloadCount,
115 update: new Date(x.dateModified).valueOf() / 1000,
116 page: x.websiteUrl
117 }
118 })
119 )
120 })
121 .catch(err => {
122 done()
123 })
124 }
125}
126
127module.exports = api