-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlocal.js
62 lines (52 loc) · 1.51 KB
/
local.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
require('dotenv').config()
const spawn = require('child_process').spawn
const ngrok = require('ngrok')
const axios = require('axios')
if (!('TELEGRAM_TOKEN' in process.env)) {
console.error('TELEGRAM_TOKEN environment variable not set')
console.error('exiting')
process.exit(1)
}
let local = async () => {
let port = process.env.PORT || 3000
let config = { port: port }
console.log('starting serverless offline')
let sls = spawn('node_modules/.bin/sls', ['offline', '-P', port])
sls.stdout.on('data', data => {
console.log(`${data}`)
})
sls.stderr.on('data', data => console.error(`${data}`))
sls.on('error', err => console.log(`failed to start serverless offline: ${err}`))
sls.on('close', code => console.log(`serverless offline ended with code: ${code}`))
console.log('starting tunnel')
let url = ''
try {
url = await ngrok.connect(port)
console.log(`tunnel configured with url: ${url}`)
} catch(e) {
console.log(`failed to start tunnel:`, e)
console.error(`ABORTING`)
if (!sls.killed) {
sls.kill()
process.exit(1)
}
}
try {
await axios({
method: 'post',
url: `https://api.telegram.org/bot${process.env.TELEGRAM_TOKEN}/setWebhook`,
data: {
'url': `${url}`
}
})
console.log('LOCAL DEVELOPMENT STARTED\nUse your bot normally')
} catch(e) {
console.log(`failed to start setWebhook: ${e}`)
if (!sls.killed) {
sls.kill()
await ngrok.disconnect()
await ngrok.kill()
}
}
}
local()