akkun3704 commited on
Commit
44c9fcd
·
verified ·
1 Parent(s): 8fcec76

Update index.js

Browse files
Files changed (1) hide show
  1. index.js +21 -78
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('/yt', async (req, res) => {
51
- if (!['GET', 'POST'].includes(req.method)) return res.status(405).json({ success: false, message: 'Method Not Allowed' })
52
 
53
  try {
54
- const url = req.method !== 'GET' ? req.body.url : req.query.url
55
- if (!url) return res.json({ success: false, message: 'Input parameter url' })
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 fetchPost = (url, body) => (fetch(url, {
101
- method: 'POST', body,
102
- headers: {
103
- 'Content-Type': 'application/x-www-form-urlencoded',
104
- 'Referer': 'https://y2mate.is/'
105
- }
106
- }))
107
 
108
- const reqTaskId = await fetchPost('https://srvcdn3.2convert.me/api/json', `hash=${encodeURIComponent(hash)}`)
109
- if (!reqTaskId.ok) return res.json({ success: false, message: 'Hash not found' })
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 {