akkun3704 commited on
Commit
095af13
·
1 Parent(s): b267868

Create index.js

Browse files
Files changed (1) hide show
  1. index.js +87 -0
index.js ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ const os = require('os')
2
+ const bytes = require('bytes')
3
+ const sharp = require('sharp')
4
+ const morgan = require('morgan')
5
+ const express = require('express')
6
+ const PDFDocument = require('pdfkit')
7
+
8
+ const app = express()
9
+ app.set('json spaces', 4)
10
+ app.use(morgan('dev'))
11
+ app.use(express.json())
12
+
13
+ app.all('/', (req, res) => {
14
+ const status = {}
15
+ const used = process.memoryUsage()
16
+ for (let key in used) status[key] = formatSize(used[key])
17
+
18
+ const totalmem = os.totalmem()
19
+ const freemem = os.freemem()
20
+ status.memoryUsage = `${formatSize(totalmem - freemem)} / ${formatSize(totalmem)}`
21
+
22
+ res.json({
23
+ creator: '@rippanteq7',
24
+ message: 'Hello World',
25
+ uptime: new Date(process.uptime() * 1000).toUTCString().split(' ')[4],
26
+ status
27
+ })
28
+ })
29
+
30
+ app.post('/imagetopdf', async (req, res) => {
31
+ try {
32
+ console.log(req.body)
33
+ const { images } = req.body
34
+ if (!images) return res.json({ success: false, message: 'Required an array image url' })
35
+
36
+ const buffer = await toPDF(images)
37
+ res.setHeader('Content-Disposition', `attachment; filename=${Math.random().toString(36).slice(2)}.pdf`)
38
+ res.setHeader('Content-Type', 'application/pdf')
39
+ res.setHeader('Content-Length', buffer.byteLength)
40
+ res.send(buffer)
41
+ } catch (e) {
42
+ console.log(e)
43
+ e = String(e)
44
+ res.json({ error: true, message: e === '[object Object]' ? 'Internal Server Error' : e })
45
+ }
46
+ })
47
+
48
+ const PORT = process.env.PORT || 7860
49
+ app.listen(PORT, () => console.log('App running on port', PORT))
50
+
51
+ function formatSize(num) {
52
+ return bytes.format(+num || 0, { unitSeparator: ' ' })
53
+ }
54
+
55
+ function toPDF(urls) {
56
+ return new Promise(async (resolve, reject) => {
57
+ try {
58
+ if (!Array.isArray(urls)) urls = [urls]
59
+ const doc = new PDFDocument({ margin: 0, size: 'A4' })
60
+ const buffers = []
61
+
62
+ const promises = urls.map(async (url, index) => {
63
+ const response = await fetch(url, { headers: { referer: url }})
64
+ if (!response.ok) return
65
+
66
+ const type = response.headers.get('content-type')
67
+ if (!/image/.test(type)) return reject(`Invalid Type: ${type}`)
68
+
69
+ let buffer = Buffer.from(await response.arrayBuffer())
70
+ if (/gif|webp/.test(type)) buffer = await sharp(buffer).png().toBuffer()
71
+
72
+ doc.image(buffer, 0, 0, { fit: [595.28, 841.89], align: 'center', valign: 'center' })
73
+ if (urls.length !== index + 1) doc.addPage()
74
+ })
75
+
76
+ await Promise.all(promises)
77
+
78
+ doc.on('data', (chunk) => buffers.push(chunk))
79
+ doc.on('end', () => resolve(Buffer.concat(buffers)))
80
+ doc.on('error', reject)
81
+ doc.end()
82
+ } catch (e) {
83
+ console.log(e)
84
+ reject(e)
85
+ }
86
+ })
87
+ }