Spaces:
Running
Running
Update index.js
Browse files
index.js
CHANGED
@@ -1,3 +1,4 @@
|
|
|
|
1 |
const os = require('os')
|
2 |
const mime = require('mime')
|
3 |
const axios = require('axios')
|
@@ -12,6 +13,8 @@ app.set('json spaces', 4)
|
|
12 |
app.use(morgan('dev'))
|
13 |
app.use(express.json())
|
14 |
|
|
|
|
|
15 |
app.all('/', (req, res) => {
|
16 |
const status = {}
|
17 |
const used = process.memoryUsage()
|
@@ -31,7 +34,7 @@ app.all('/', (req, res) => {
|
|
31 |
|
32 |
app.post('/imagetopdf', async (req, res) => {
|
33 |
try {
|
34 |
-
console.log(req.body)
|
35 |
const { images } = req.body
|
36 |
if (!images) return res.json({ success: false, message: 'Required an array image url' })
|
37 |
|
@@ -47,87 +50,19 @@ app.post('/imagetopdf', async (req, res) => {
|
|
47 |
}
|
48 |
})
|
49 |
|
50 |
-
app.all('/
|
51 |
-
if (!['
|
52 |
|
53 |
try {
|
54 |
-
const
|
55 |
-
if (!
|
56 |
-
if (!/^https?:\/\//.test(url)) return res.json({ success: false, message: 'Invalid url' })
|
57 |
-
|
58 |
-
const response = await fetch(`https://srvcdn3.2convert.me/api/json?url=${url}`, { headers: { referer: 'https://y2mate.is/' }})
|
59 |
-
const json = await response.json()
|
60 |
-
if (json.error) return res.json({ success: false, message: json.message || json.errorMessage })
|
61 |
-
|
62 |
-
const { duration } = json.formats
|
63 |
-
const result = {
|
64 |
-
...json.formats,
|
65 |
-
lengthSeconds: +duration,
|
66 |
-
duration: new Date(duration * 1000).toUTCString().split(' ')[4],
|
67 |
-
video: {},
|
68 |
-
audio: {}
|
69 |
-
}
|
70 |
-
|
71 |
-
for (const type of ['video', 'audio']) {
|
72 |
-
json.formats[type].forEach((data) => {
|
73 |
-
const { quality: q, fileType, needConvert, fileSize, url: dlUrl } = data
|
74 |
-
const quality = type === 'video' ? q : `${q}kbps`
|
75 |
-
|
76 |
-
result[type][quality] = {
|
77 |
-
quality,
|
78 |
-
fileType,
|
79 |
-
fileSizeH: formatSize(fileSize),
|
80 |
-
fileSize,
|
81 |
-
needConvert,
|
82 |
-
url: !needConvert ? dlUrl : `https://${process.env.SPACE_HOST}${req.path}/convert?hash=${encodeURIComponent(dlUrl)}`
|
83 |
-
}
|
84 |
-
})
|
85 |
-
}
|
86 |
-
|
87 |
-
res.json({ success: true, result })
|
88 |
-
} catch (e) {
|
89 |
-
console.log(e)
|
90 |
-
e = String(e)
|
91 |
-
res.status(500).json({ error: true, message: e === '[object Object]' ? 'Internal Server Error' : e })
|
92 |
-
}
|
93 |
-
})
|
94 |
-
|
95 |
-
app.get('/yt/convert', async (req, res) => {
|
96 |
-
try {
|
97 |
-
const { hash } = req.query
|
98 |
-
if (!hash) return res.json({ success: false, message: 'Invalid hash' })
|
99 |
|
100 |
-
const
|
101 |
-
|
102 |
-
|
103 |
-
'Content-Type': 'application/x-www-form-urlencoded',
|
104 |
-
'Referer': 'https://y2mate.is/'
|
105 |
-
}
|
106 |
-
}))
|
107 |
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
const reqTaskJson = await reqTaskId.json()
|
112 |
-
if (reqTaskJson.error) return res.json({ success: false, message: reqTaskJson.message })
|
113 |
-
|
114 |
-
let result
|
115 |
-
while (!result) {
|
116 |
-
const fetchTaskId = await fetchPost('https://srvcdn3.2convert.me/api/json/task', `taskId=${reqTaskJson.taskId}`)
|
117 |
-
const fetchTaskJson = await fetchTaskId.json()
|
118 |
-
console.log(fetchTaskJson)
|
119 |
-
if (fetchTaskJson.status === 'finished') {
|
120 |
-
result = fetchTaskJson
|
121 |
-
break
|
122 |
-
}
|
123 |
-
await new Promise(resolve => setTimeout(resolve, 1000))
|
124 |
-
}
|
125 |
-
|
126 |
-
const { download, title, ext } = result
|
127 |
-
const response = await axios.get(download, { responseType: 'stream' })
|
128 |
-
res.setHeader('Content-Disposition', `attachment; filename=${encodeURIComponent(title)}.${ext}`)
|
129 |
-
res.setHeader('Content-Type', mime.types[ext])
|
130 |
-
response.data.pipe(res)
|
131 |
} catch (e) {
|
132 |
console.log(e)
|
133 |
e = String(e)
|
@@ -187,6 +122,14 @@ function formatSize(num) {
|
|
187 |
return bytes(+num || 0, { unitSeparator: ' ' })
|
188 |
}
|
189 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
190 |
function toPDF(urls) {
|
191 |
return new Promise(async (resolve, reject) => {
|
192 |
try {
|
|
|
1 |
+
const fs = require('fs')
|
2 |
const os = require('os')
|
3 |
const mime = require('mime')
|
4 |
const axios = require('axios')
|
|
|
13 |
app.use(morgan('dev'))
|
14 |
app.use(express.json())
|
15 |
|
16 |
+
app.use('/file', express.static(os.tmpdir()))
|
17 |
+
|
18 |
app.all('/', (req, res) => {
|
19 |
const status = {}
|
20 |
const used = process.memoryUsage()
|
|
|
34 |
|
35 |
app.post('/imagetopdf', async (req, res) => {
|
36 |
try {
|
37 |
+
console.log(new Date().toLocaleString('id', { timeZone: 'Asia/Jakarta' }), '\n', req.body)
|
38 |
const { images } = req.body
|
39 |
if (!images) return res.json({ success: false, message: 'Required an array image url' })
|
40 |
|
|
|
50 |
}
|
51 |
})
|
52 |
|
53 |
+
app.all('/webp2png', async (req, res) => {
|
54 |
+
if (!['POST'].includes(req.method)) return res.status(405).json({ success: false, message: 'Method Not Allowed' })
|
55 |
|
56 |
try {
|
57 |
+
const { file } = req.body
|
58 |
+
if (!(file && isBase64(file))) return res.json({ success: false, message: 'Payload body file must be filled in base64 format' })
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
|
60 |
+
const fileBuffer = Buffer.from(file, 'base64')
|
61 |
+
const fileName = `${Math.random().toString(36)}.png`
|
62 |
+
const convertData = await sharp(fileBuffer).png().toBuffer()
|
|
|
|
|
|
|
|
|
63 |
|
64 |
+
await fs.promises.writeFile(`${os.tmpdir()}/${fileName}`, convertData)
|
65 |
+
res.send(`https://${req.get('host')}/file/${fileName}`)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
66 |
} catch (e) {
|
67 |
console.log(e)
|
68 |
e = String(e)
|
|
|
122 |
return bytes(+num || 0, { unitSeparator: ' ' })
|
123 |
}
|
124 |
|
125 |
+
function isBase64(str) {
|
126 |
+
try {
|
127 |
+
return btoa(atob(str)) === str
|
128 |
+
} catch {
|
129 |
+
return false
|
130 |
+
}
|
131 |
+
}
|
132 |
+
|
133 |
function toPDF(urls) {
|
134 |
return new Promise(async (resolve, reject) => {
|
135 |
try {
|