@inner-dj/server 0.0.4 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ document.addEventListener("DOMContentLoaded",function(){let i=document.getElementById("controlContainer"),l={},d="-";function a(e){var t=e?.split(".")[0],n=11===t?.length,e=document.createTextNode(e||d);return n?((n=document.createElement("a")).href="https://www.youtube.com/watch?v="+t,n.appendChild(e),n):e}let t=()=>{var e=new WebSocket("/admin/controls");e.onerror=e=>{console.log(e)},e.onclose=()=>{setTimeout(t,3e3)},e.onmessage=e=>{var e=JSON.parse(e.data),t=e.map(e=>e.clientId);for(let e in l)t.indexOf(e)<0&&(l[e].forEach(e=>i?.removeChild(e)),delete l[e]);e.forEach(e=>{if(e.clientId in l){for(var t=l[e.clientId],n=t[1];n?.firstChild;)n.removeChild(n.lastChild);t[1].appendChild(a(e.nowPlaying))}else d=e,i&&d.clientId&&((t=document.createElement("div")).appendChild(document.createTextNode(d.clientId)),i.appendChild(t),(e=document.createElement("div")).classList.add("break-all"),e.appendChild(a(d.nowPlaying)),i.appendChild(e),(o=document.createElement("button")).classList.add("button","is-info"),o.appendChild(document.createTextNode("⏩️ Skip")),i.appendChild(o),l[d.clientId]=[t,e,o],o.addEventListener("click",e=>{fetch("/admin/controls/skip?clientId="+encodeURIComponent(d.clientId),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})}).catch(e=>{console.log(e)})}));var d,o})}};t()});
package/assets/js/totp.js CHANGED
@@ -1 +1 @@
1
- document.addEventListener("DOMContentLoaded",function(){let a=document.getElementById("qr-container"),r=document.getElementById("token");function c(e){for(;e?.firstChild;)e.removeChild(e.lastChild)}fetch("/admin/token",{method:"GET"}).then(async e=>{let d=(await e.json())?.token;if(d&&"string"==typeof d){let t=window.otplib,n=window.QrCreator,o="";async function i(){var e=await t.generate({secret:d});o!==e&&(o=e,c(r),r?.appendChild(document.createTextNode(e)),e=window.location.origin+"/#"+encodeURIComponent(`{"code":"${e}"}`),c(a),n.render({text:e,radius:0,ecLevel:"L",fill:"#000000",background:"#ffffff",size:256},a))}i(),setInterval(i,5e3)}else setTimeout(()=>location.reload(),3e3)})});
1
+ document.addEventListener("DOMContentLoaded",function(){let r=document.getElementById("qr-container"),a=document.getElementById("token");function l(e){for(;e?.firstChild;)e.removeChild(e.lastChild)}fetch("/admin/token",{method:"GET"}).then(async e=>{let i=(await e.json())?.token;if("string"!=typeof i)setTimeout(()=>location.reload(),3e3);else{let t=window.otplib,n=window.QrCreator,o="";async function d(){var e=await t.generate({secret:i});o!==e&&(o=e,l(a),a?.appendChild(document.createTextNode(e)),e=window.location.origin+"/#"+encodeURIComponent(`{"code":"${e}"}`),l(r),n.render({text:e,radius:0,ecLevel:"L",fill:"#000000",background:"#ffffff",size:256},r))}i?(d(),setInterval(d,5e3)):(n.render({text:window.location.origin+"/",radius:0,ecLevel:"L",fill:"#000000",background:"#ffffff",size:256},r),document.querySelector(".if-totp").style.display="none")}})});
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,86 @@
1
+ document.addEventListener("DOMContentLoaded", function () {
2
+ const container = document.getElementById('controlContainer');
3
+ const rows = {};
4
+ const NOW_PLAYING = 1;
5
+ const NOT_PLAYING = '-';
6
+ function emptyElement(el) {
7
+ while (el?.firstChild) {
8
+ el.removeChild(el.lastChild);
9
+ }
10
+ }
11
+ function createNowPlayingContent(filename) {
12
+ const possibleVid = filename?.split('.')[0];
13
+ const isMatch = possibleVid?.length === 11;
14
+ const textNode = document.createTextNode(filename || NOT_PLAYING);
15
+ if (!isMatch) {
16
+ return textNode;
17
+ }
18
+ const anchor = document.createElement('a');
19
+ anchor.href = `https://www.youtube.com/watch?v=${possibleVid}`;
20
+ anchor.appendChild(textNode);
21
+ return anchor;
22
+ }
23
+ const removeRow = (row) => {
24
+ row.forEach(el => container?.removeChild(el));
25
+ };
26
+ const addRow = (client) => {
27
+ if (!container || !client.clientId) {
28
+ return;
29
+ }
30
+ const clientId = document.createElement('div');
31
+ clientId.appendChild(document.createTextNode(client.clientId));
32
+ container.appendChild(clientId);
33
+ const nowPlaying = document.createElement('div');
34
+ nowPlaying.classList.add('break-all');
35
+ nowPlaying.appendChild(createNowPlayingContent(client.nowPlaying));
36
+ container.appendChild(nowPlaying);
37
+ const skipBtn = document.createElement('button');
38
+ skipBtn.classList.add('button', 'is-info');
39
+ skipBtn.appendChild(document.createTextNode('⏩️ Skip'));
40
+ container.appendChild(skipBtn);
41
+ rows[client.clientId] = [clientId, nowPlaying, skipBtn];
42
+ skipBtn.addEventListener('click', _ => {
43
+ fetch(`/admin/controls/skip?clientId=${encodeURIComponent(client.clientId)}`, {
44
+ method: 'POST',
45
+ headers: {
46
+ 'Content-Type': 'application/json',
47
+ },
48
+ body: JSON.stringify({})
49
+ }).catch(e => {
50
+ console.log(e);
51
+ });
52
+ });
53
+ };
54
+ const connect = () => {
55
+ const ws = new WebSocket('/admin/controls');
56
+ ws.onerror = (err) => {
57
+ console.log(err);
58
+ };
59
+ ws.onclose = () => {
60
+ setTimeout(connect, 3000);
61
+ };
62
+ ws.onmessage = (msg) => {
63
+ const payload = JSON.parse(msg.data);
64
+ const ids = payload.map(p => p.clientId);
65
+ for (let id in rows) {
66
+ if (ids.indexOf(id) < 0) {
67
+ removeRow(rows[id]);
68
+ delete rows[id];
69
+ }
70
+ }
71
+ payload.forEach(p => {
72
+ if (p.clientId in rows) {
73
+ const row = rows[p.clientId];
74
+ emptyElement(row[NOW_PLAYING]);
75
+ row[NOW_PLAYING].appendChild(createNowPlayingContent(p.nowPlaying));
76
+ }
77
+ else {
78
+ addRow(p);
79
+ }
80
+ });
81
+ };
82
+ };
83
+ connect();
84
+ });
85
+ export {};
86
+ //# sourceMappingURL=controls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls.js","sourceRoot":"","sources":["../../../src/browser/controls.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ document.addEventListener("DOMContentLoaded", function () {
10
10
  method: 'GET'
11
11
  }).then(async (res) => {
12
12
  const token = (await res.json())?.token;
13
- if (!token || typeof token !== 'string') {
13
+ if (typeof token !== 'string') {
14
14
  setTimeout(() => location.reload(), 3000);
15
15
  return;
16
16
  }
@@ -38,8 +38,21 @@ document.addEventListener("DOMContentLoaded", function () {
38
38
  size: 256
39
39
  }, qrContainer);
40
40
  }
41
- genOtp();
42
- setInterval(genOtp, 5000);
41
+ if (token) {
42
+ genOtp();
43
+ setInterval(genOtp, 5000);
44
+ }
45
+ else {
46
+ QR.render({
47
+ text: `${window.location.origin}/`,
48
+ radius: 0,
49
+ ecLevel: 'L',
50
+ fill: '#000000',
51
+ background: '#ffffff',
52
+ size: 256
53
+ }, qrContainer);
54
+ document.querySelector('.if-totp').style.display = 'none';
55
+ }
43
56
  });
44
57
  });
45
58
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"totp.js","sourceRoot":"","sources":["../../../src/browser/totp.ts"],"names":[],"mappings":"AAAA,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE;IAC1C,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAEnD,SAAS,YAAY,CAAC,EAAsB;QACxC,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC;YACpB,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,SAAU,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,EAAE;QAClB,MAAM,EAAE,KAAK;KAChB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAClB,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAwB,CAAA,EAAE,KAAK,CAAC;QAC7D,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACtC,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;YAC1C,OAAO;QACX,CAAC;QACD,MAAM,MAAM,GAA6B,MAAc,CAAC,MAAM,CAAC;QAC/D,MAAM,EAAE,GAA2C,MAAc,CAAC,SAAS,CAAC;QAC5E,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,KAAK,UAAU,MAAM;YACjB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;gBAC9B,MAAM,EAAE,KAAK;aAChB,CAAC,CAAC;YACH,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;gBAClB,OAAO;YACX,CAAC;YACD,OAAO,GAAG,GAAG,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC;YACxF,YAAY,CAAC,WAAW,CAAC,CAAC;YAC1B,EAAE,CAAC,MAAM,CAAC;gBACN,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,GAAG;gBACZ,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAE,GAAG;aACZ,EAAE,WAAY,CAAC,CAAC;QACrB,CAAC;QAED,MAAM,EAAE,CAAC;QACT,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"totp.js","sourceRoot":"","sources":["../../../src/browser/totp.ts"],"names":[],"mappings":"AAAA,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE;IAC1C,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC5D,MAAM,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAEnD,SAAS,YAAY,CAAC,EAAsB;QACxC,OAAO,EAAE,EAAE,UAAU,EAAE,CAAC;YACpB,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,SAAU,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,EAAE;QAClB,MAAM,EAAE,KAAK;KAChB,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAClB,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAwB,CAAA,EAAE,KAAK,CAAC;QAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,CAAC;YAC1C,OAAO;QACX,CAAC;QACD,MAAM,MAAM,GAA6B,MAAc,CAAC,MAAM,CAAC;QAC/D,MAAM,EAAE,GAA2C,MAAc,CAAC,SAAS,CAAC;QAC5E,IAAI,OAAO,GAAG,EAAE,CAAC;QAEjB,KAAK,UAAU,MAAM;YACjB,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;gBAC9B,MAAM,EAAE,KAAK;aAChB,CAAC,CAAC;YACH,IAAI,OAAO,KAAK,GAAG,EAAE,CAAC;gBAClB,OAAO;YACX,CAAC;YACD,OAAO,GAAG,GAAG,CAAC;YACd,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,kBAAkB,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC;YACxF,YAAY,CAAC,WAAW,CAAC,CAAC;YAC1B,EAAE,CAAC,MAAM,CAAC;gBACN,IAAI,EAAE,OAAO;gBACb,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,GAAG;gBACZ,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAE,GAAG;aACZ,EAAE,WAAY,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,CAAC;YACT,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;aACI,CAAC;YACF,EAAE,CAAC,MAAM,CAAC;gBACN,IAAI,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG;gBAClC,MAAM,EAAE,CAAC;gBACT,OAAO,EAAE,GAAG;gBACZ,IAAI,EAAE,SAAS;gBACf,UAAU,EAAE,SAAS;gBACrB,IAAI,EAAE,GAAG;aACZ,EAAE,WAAY,CAAC,CAAC;YAChB,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAiB,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QAC/E,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import { type DBConfig } from './session-store.js';
2
- import { type InnerDJDiscordBotConfig } from '@inner-dj/discord-receiver';
2
+ import { type DiscordReceiverConfig } from '@inner-dj/discord-receiver';
3
3
  import { type TwilioReceiverConfig } from '@inner-dj/twilio-receiver';
4
4
  export interface ServerConfig {
5
5
  port: number;
@@ -12,7 +12,8 @@ export interface ServerConfig {
12
12
  cookieTTL: number;
13
13
  jwtSecret: string;
14
14
  db: DBConfig;
15
- discord: InnerDJDiscordBotConfig;
15
+ discord: DiscordReceiverConfig;
16
16
  twilio: TwilioReceiverConfig;
17
+ cookies: string | undefined;
17
18
  }
18
19
  export declare function getConfig(cfgPath?: string): Promise<ServerConfig>;
package/lib/src/config.js CHANGED
@@ -38,14 +38,15 @@ export async function getConfig(cfgPath) {
38
38
  trustProxy: joinIfArray(process.env['TRUSTPROXY'] ?? cfg.trustProxy),
39
39
  secure: getBoolean('SECURE', cfg, 'secure', true),
40
40
  public: pub,
41
- sessionSecret: pub ? '' : process.env['SESSIONSECRET'] ?? cfg.sessionSecret ?? throwNewError('sessionSecret is required if server is not public'),
42
- userOtp: pub ? '' : process.env['USEROTP'] ?? cfg.userOtp ?? generateTotpSecret('userOtp'),
43
- adminOtp: pub ? '' : process.env['ADMINOTP'] ?? cfg.adminOtp ?? generateTotpSecret('adminOtp'),
41
+ sessionSecret: process.env['SESSIONSECRET'] ?? cfg.sessionSecret ?? throwNewError('sessionSecret is required'),
42
+ userOtp: pub ? '' : (process.env['USEROTP'] ?? cfg.userOtp) || generateTotpSecret('userOtp'),
43
+ adminOtp: process.env['ADMINOTP'] ?? cfg.adminOtp ?? generateTotpSecret('adminOtp'),
44
44
  cookieTTL: notStupidParseInt(process.env['COOKIETTL'] ?? cfg.cookieTTL ?? 1000 * 60 * 60 * 24 * 30),
45
45
  jwtSecret: process.env['JWTSECRET'] ?? cfg.jwtSecret ?? throwNewError('jwtSecret is required'),
46
46
  db: SessionStore.getConfig(path.dirname(p), cfg.db),
47
47
  discord: InnerDJDiscordBot.getConfig(cfg.discord),
48
48
  twilio: TwilioReceiver.getConfig(cfg.twilio),
49
+ cookies: process.env['COOKIES'] ?? cfg.cookies,
49
50
  };
50
51
  }
51
52
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
package/lib/src/web.d.ts CHANGED
@@ -1,19 +1,28 @@
1
+ import EventEmitter from 'events';
1
2
  import express from 'express';
2
3
  import { ServerConfig } from './config.js';
3
- import { type Payload, type ClientInterface, Method } from '@inner-dj/common';
4
+ import { Method } from '@inner-dj/common';
5
+ import type { ClientInterface, Payload } from '@inner-dj/common';
4
6
  declare module 'express-session' {
5
7
  interface SessionData {
6
8
  admin?: boolean;
7
9
  }
8
10
  }
9
- export declare class Web implements ClientInterface {
11
+ export interface SimpleClientInfo {
12
+ clientId: string | null;
13
+ nowPlaying: string | null;
14
+ }
15
+ export declare class Web extends EventEmitter implements ClientInterface {
10
16
  private config;
11
17
  private _webserver;
12
18
  private _clients;
13
19
  private _app;
14
20
  private _guides;
21
+ private _downloader;
15
22
  constructor(config: ServerConfig);
16
23
  initialize: () => Promise<void>;
24
+ emitClientStateChange: () => void;
25
+ createClientStateData: () => SimpleClientInfo[];
17
26
  registerRoute: (method: Method, route: string, handler: (req: express.Request, res: express.Response, next?: express.NextFunction) => any) => void;
18
27
  registerGuide: (html: string) => number;
19
28
  sendPayload: (payload: Payload) => Promise<boolean>;
package/lib/src/web.js CHANGED
@@ -1,28 +1,38 @@
1
1
  import crypto from 'crypto';
2
2
  import path from 'path';
3
+ import os from 'os';
4
+ import EventEmitter from 'events';
5
+ import fsp from 'fs/promises';
3
6
  import jwt from 'jsonwebtoken';
4
7
  import express from 'express';
5
8
  import expressWs from 'express-ws';
6
9
  import session from 'express-session';
7
10
  import getYouTubeID from 'get-youtube-id-ng';
11
+ import contentDisposition from 'content-disposition';
8
12
  import { verify } from "otplib";
9
13
  import { getExpectedCWD } from './cwd-checker.js';
10
- import { encodePayload } from '@inner-dj/common';
14
+ import { getFilesNoError, encodePayload, ytdlp, ytdlpDefaults } from '@inner-dj/common';
11
15
  import { SessionStore } from './session-store.js';
12
16
  const expectedCWD = getExpectedCWD();
13
- export class Web {
17
+ export class Web extends EventEmitter {
14
18
  config;
15
19
  _webserver = null;
16
20
  _clients = {};
17
21
  _app = null;
18
22
  _guides = [];
23
+ _downloader;
19
24
  constructor(config) {
25
+ super();
20
26
  this.config = config;
27
+ this._downloader = new ytdlp({
28
+ ...ytdlpDefaults,
29
+ optput: path.join(os.tmpdir(), ytdlpDefaults.optput),
30
+ cookies: config.cookies,
31
+ });
21
32
  }
22
33
  initialize = async () => {
23
34
  const config = this.config;
24
- const app = this._app = express();
25
- const wsApp = expressWs(app).app;
35
+ const app = this._app = expressWs(express()).app;
26
36
  app.set('trust proxy', config.trustProxy);
27
37
  app.set('view engine', 'ejs');
28
38
  app.set('view options', { outputFunctionName: 'echo' });
@@ -47,7 +57,31 @@ export class Web {
47
57
  app.get('/healthcheck', (_req, res) => {
48
58
  res.send('healthy');
49
59
  });
50
- wsApp.ws('/sock', async (ws, req) => {
60
+ app.post('/download', express.raw({ type: 'text/plain' }), async (req, res) => {
61
+ const body = req.body?.toString();
62
+ const payload = body && jwt.verify(body, config.jwtSecret);
63
+ if (!payload || typeof (payload) === 'string' || payload.type !== 'download') {
64
+ res.status(401).send();
65
+ return;
66
+ }
67
+ const vidurl = `https://www.youtube.com/watch?v=${payload.body}`;
68
+ console.info(`downloading ${vidurl} for ${req.ip}`);
69
+ await this._downloader.exec(vidurl);
70
+ const files = await getFilesNoError(os.tmpdir());
71
+ const file = files.find(f => f.split('.')[0] === payload.body);
72
+ if (!file) {
73
+ res.status(500).send();
74
+ return;
75
+ }
76
+ res.set('Content-Disposition', contentDisposition.create(file))
77
+ .sendFile(path.join(os.tmpdir(), file), (err) => {
78
+ if (err) {
79
+ console.error(err);
80
+ }
81
+ return fsp.unlink(path.join(os.tmpdir(), file));
82
+ });
83
+ });
84
+ app.ws('/sock', (ws, req) => {
51
85
  const clientInfo = {
52
86
  ws,
53
87
  clientId: null,
@@ -67,20 +101,23 @@ export class Web {
67
101
  if (this._clients[key] === clientInfo) {
68
102
  delete this._clients[key];
69
103
  }
104
+ this.emitClientStateChange();
70
105
  });
71
106
  const ack = {
72
107
  type: 'ack'
73
108
  };
74
109
  ws.send(encodePayload(ack, config.jwtSecret));
110
+ this.emitClientStateChange();
75
111
  return;
76
112
  }
77
- else if (clientInfo.clientId && decoded && payload?.type === 'nowPlaying' && payload.body) {
113
+ else if (clientInfo.clientId && decoded && payload?.type === 'nowPlaying') {
78
114
  console.log(`client ${clientInfo.clientId} playing ${clientInfo.nowPlaying = payload.body}`);
115
+ this.emitClientStateChange();
79
116
  return;
80
117
  }
81
118
  ws.close();
82
119
  });
83
- console.debug(`Got websocket connection from ${req.ip}`);
120
+ console.debug(`Got client websocket connection from ${req.ip}`);
84
121
  const timeout = setTimeout(() => {
85
122
  console.debug(`Client@${req.ip} took too long to identify itself. Closing.`);
86
123
  ws.close();
@@ -187,7 +224,7 @@ export class Web {
187
224
  });
188
225
  const requireAdmin = (req, res, next) => {
189
226
  if (req.session.admin !== true) {
190
- res.redirect('/');
227
+ res.redirect('/?override=1');
191
228
  return;
192
229
  }
193
230
  next();
@@ -242,16 +279,65 @@ export class Web {
242
279
  }
243
280
  });
244
281
  });
245
- app.get('/admin/controls', sessionMiddleware, requireAdmin, (_req, res) => {
246
- res.send('controls');
247
- });
248
282
  app.get('/admin/token', sessionMiddleware, requireAdmin, (_req, res) => {
249
283
  res.send({
250
284
  token: config.userOtp
251
285
  });
252
286
  });
287
+ app.get('/admin/controls', sessionMiddleware, requireAdmin, (_req, res) => {
288
+ res.render('controls', {
289
+ guides: this._guides.join('\n'),
290
+ page: {
291
+ title: 'Admin Controls',
292
+ titlesuffix: 'Inner DJ',
293
+ description: 'Skip songs'
294
+ }
295
+ });
296
+ });
297
+ // not going to enforce authentication for simplicity
298
+ // socket for realtime data, not for actually controlling clients
299
+ app.ws('/admin/controls', (ws, req) => {
300
+ console.debug(`Got control websocket connection from ${req.ip}`);
301
+ const eventListener = (payload) => {
302
+ if (payload) {
303
+ ws.send(payload);
304
+ }
305
+ };
306
+ this.on('change', eventListener);
307
+ ws.on('close', () => {
308
+ this.removeListener('change', eventListener);
309
+ });
310
+ eventListener(JSON.stringify(this.createClientStateData()));
311
+ });
312
+ app.post('/admin/controls/skip', sessionMiddleware, requireAdmin, (req, res) => {
313
+ const clientId = req.query['clientId'];
314
+ if (typeof clientId !== 'string' || !(clientId in this._clients)) {
315
+ res.status(400).send();
316
+ return;
317
+ }
318
+ this._clients[clientId]?.ws.send(encodePayload({
319
+ type: 'skip'
320
+ }, this.config.jwtSecret));
321
+ res.send();
322
+ });
253
323
  this._webserver = app.listen(config.port, () => console.log(`running on port ${config.port}`));
254
324
  };
325
+ emitClientStateChange = () => {
326
+ this.emit('change', JSON.stringify(this.createClientStateData()));
327
+ };
328
+ createClientStateData = () => {
329
+ const payload = [];
330
+ for (let id in this._clients) {
331
+ const info = this._clients[id];
332
+ if (info && info.clientId) {
333
+ payload.push({
334
+ clientId: info.clientId,
335
+ nowPlaying: info.nowPlaying
336
+ });
337
+ }
338
+ }
339
+ return payload;
340
+ };
255
341
  registerRoute = (method, route, handler) => {
256
342
  console.debug(`Registered route to ${route} via ${method.toUpperCase()} requests`);
257
343
  this._app?.[method](route, handler);
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inner-dj/server",
3
- "version": "0.0.4",
3
+ "version": "0.0.6",
4
4
  "description": "server component of inner-dj",
5
5
  "repository": {
6
6
  "type": "git",
@@ -28,10 +28,11 @@
28
28
  "!lib/**/*.js.map"
29
29
  ],
30
30
  "dependencies": {
31
- "@inner-dj/discord-receiver": "0.0.4",
32
- "@inner-dj/twilio-receiver": "0.0.4",
31
+ "@inner-dj/discord-receiver": "0.0.6",
32
+ "@inner-dj/twilio-receiver": "0.0.6",
33
33
  "better-sqlite3": "^12.10.0",
34
34
  "bulma": "^1.0.4",
35
+ "content-disposition": "2.0.0",
35
36
  "ejs": "^5.0.2",
36
37
  "express": "^5.2.1",
37
38
  "express-session": "^1.19.0",
@@ -41,7 +42,7 @@
41
42
  "otplib": "^13.4.0",
42
43
  "qr-creator": "^1.0.0",
43
44
  "yaml": "^2.9.0",
44
- "@inner-dj/common": "0.0.4"
45
+ "@inner-dj/common": "0.0.6"
45
46
  },
46
47
  "devDependencies": {
47
48
  "@sindresorhus/tsconfig": "8.1.0",
package/views/admin.ejs CHANGED
@@ -13,7 +13,7 @@
13
13
  <h2 class="title is-2">Request a Song</h2>
14
14
  <div class="has-text-centered">
15
15
  <div id="qr-container" class="mb-4"></div>
16
- <p>Or go to <span class="has-text-weight-bold populate-url with-trailing-slash">this site</span> and enter <span id="token" class="has-text-weight-bold is-family-monospace">...</span></p>
16
+ <p>Or go to <span class="has-text-weight-bold populate-url with-trailing-slash">this site</span> <span class="if-totp">and enter <span id="token" class="has-text-weight-bold is-family-monospace">...</span></span></p>
17
17
  </div>
18
18
  </div>
19
19
  <%- include("instructions", locals) %>
@@ -0,0 +1,24 @@
1
+ <!DOCTYPE html>
2
+ <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
3
+
4
+ <head>
5
+ <%- include("head", locals) %>
6
+ </head>
7
+
8
+ <body class="preload">
9
+ <div class="mt-5">
10
+ <div class="container">
11
+ <h1 class="title is-1">Inner DJ</h1>
12
+ <div class="box is-size-5">
13
+ <a href="/admin" class="button is-link">Instructions Screen</a>
14
+ <h2 class="title is-2">Controls</h2>
15
+ <div id="controlContainer" class="grid grid-3">
16
+ </div>
17
+ </div>
18
+ <%- include("footer", locals) %>
19
+ </div>
20
+ </div>
21
+ <script src="/assets/js/controls.js?v1" nonce="<%= cspNonce %>"></script>
22
+ </body>
23
+
24
+ </html>