var fs = require('fs'); const express = require('express') const { Samsung, KEYS, APPS } = require('samsung-tv-control') const jsonfile = require('jsonfile') const file = '/home/token.json' var https = require('https'); var privateKey = fs.readFileSync('/cert/cert.key', 'utf8'); var certificate = fs.readFileSync('/cert/cert.crt', 'utf8'); var credentials = {key: privateKey, cert: certificate}; var cors = require('cors') const corsOptions ={ origin:'*', credentials:true, optionSuccessStatus:200, } jsonfile.readFile(file, function (err, obj) { if (err) console.error(err) console.log("token: " + obj.data) const config = { debug: false, // Default: false ip: '192.168.0.2', mac: 'A4:30:7A:08:57:6A', nameApp: 'OurControlApp', // Default: NodeJS port: 8002, // Default: 8002 token: obj.data, } const control = new Samsung(config) // Get all installed apps from TV control.getAppsFromTV((err, res) => { console.log(err) if (!err) { console.log('# Response getAppsFromTV', res) } }) async function sendKey(key) { // Send key to TV control.sendKey(key, function (err, res) { if (!err) { console.log("Sending: " + key) } }) } const app = express() var httpsServer = https.createServer(credentials, app); const port = 3031 app.use(cors(corsOptions)) app.get('/', (req, res) => { res.end('Welcome to the TV API!') }) app.get('/home', (req, res) => { (async () => { await sendKey(KEYS.KEY_HOME) res.end('1') })(); }) app.get('/right', (req, res) => { (async () => { await sendKey(KEYS.KEY_RIGHT) res.end('1') })(); }) app.get('/left', (req, res) => { (async () => { await sendKey(KEYS.KEY_LEFT) res.end('1') })(); }) app.get('/up', (req, res) => { (async () => { await sendKey(KEYS.KEY_UP) res.end('1') })(); }) app.get('/down', (req, res) => { (async () => { await sendKey(KEYS.KEY_DOWN) res.end('1') })(); }) app.get('/enter', (req, res) => { (async () => { await sendKey(KEYS.KEY_ENTER) res.end('1') })(); }) app.get('/back', (req, res) => { (async () => { await sendKey(KEYS.KEY_RETURN) res.end('1') })(); }) app.get('/volumeDown', (req, res) => { (async () => { await sendKey(KEYS.KEY_VOLDOWN) res.end('1') })(); }) app.get('/volumeUp', (req, res) => { (async () => { await sendKey(KEYS.KEY_VOLUP) res.end('1') })(); }) app.get('/mute', (req, res) => { (async () => { await sendKey(KEYS.KEY_MUTE) res.end('1') })(); }) app.get('/pmode', (req, res) => { (async () => { await sendKey(KEYS.KEY_PMODE) res.end('1') })(); }) app.get('/off', (req, res) => { (async () => { await sendKey(KEYS.KEY_POWEROFF) res.end('1') })(); }) app.get('/newToken', (req, res) => { (async () => { control .isAvailable() .then(() => { // Get token for API control.getToken((token) => { console.info('# Response getToken:', token) const obj = { data: token } if (token == "null") return jsonfile.writeFile(file, obj, function (err) { if (err) console.error(err) console.log("new key, exiting to refresh") process.exit(0); }) }) }) res.end('1') })(); }) app.get('/openNetFlix', (req, res) => { (async () => { // Open app by appId which you can get from getAppsFromTV control.openApp(APPS.Netflix, (err, res) => { if (!err) { console.log('# Response openApp', res) } }) res.end('1') })(); }) app.get('/OpenYouTube', (req, res) => { (async () => { // Open app by appId which you can get from getAppsFromTV control.openApp(APPS.Netflix, (err, res) => { if (!err) { console.log('# Response openApp', res) } }) res.end('1') })(); }) app.get('/checkPass', (req, res) => { (async () => { let pass = "YourPassHere" let sent = req.query.pass if (pass == sent){ console.log("User Authed Properly!") res.end('1') } else { res.end('0') } })(); }) httpsServer.listen(port, () => { console.log(`TV Control API listening on port ${port}`) }) })