mirror of
https://github.com/wkulhanek/bonob.git
synced 2025-12-21 17:33:29 +01:00
58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
import sonos, { bonobService } from "./sonos";
|
|
import server from "./server";
|
|
import logger from "./logger";
|
|
import { DEFAULT, Navidrome, appendMimeTypeToClientFor } from "./navidrome";
|
|
import encryption from "./encryption";
|
|
import { InMemoryAccessTokens, sha256 } from "./access_tokens";
|
|
import { InMemoryLinkCodes } from "./link_codes";
|
|
|
|
const PORT = +(process.env["BONOB_PORT"] || 4534);
|
|
const WEB_ADDRESS =
|
|
process.env["BONOB_WEB_ADDRESS"] || `http://localhost:${PORT}`;
|
|
|
|
const SONOS_DEVICE_DISCOVERY =
|
|
(process.env["BONOB_SONOS_DEVICE_DISCOVERY"] || "true") == "true";
|
|
const SONOS_SEED_HOST = process.env["BONOB_SONOS_SEED_HOST"];
|
|
|
|
const bonob = bonobService(
|
|
process.env["BONOB_SONOS_SERVICE_NAME"] || "bonob",
|
|
Number(process.env["BONOS_SONOS_SERVICE_ID"] || "246"),
|
|
WEB_ADDRESS,
|
|
"AppLink"
|
|
);
|
|
const secret = process.env["BONOB_SECRET"] || "bonob";
|
|
|
|
const sonosSystem = sonos(SONOS_DEVICE_DISCOVERY, SONOS_SEED_HOST);
|
|
if (process.env["BONOB_SONOS_AUTO_REGISTER"] == "true") {
|
|
sonosSystem.register(bonob).then((success) => {
|
|
if (success) {
|
|
logger.info(
|
|
`Successfully registered ${bonob.name}(SID:${bonob.sid}) with sonos`
|
|
);
|
|
}
|
|
});
|
|
}
|
|
|
|
const customClientsFor = process.env["BONOB_NAVIDROME_CUSTOM_CLIENTS"] || "none";
|
|
const streamUserAgent =
|
|
customClientsFor == "none" ? DEFAULT : appendMimeTypeToClientFor(customClientsFor.split(","));
|
|
|
|
const app = server(
|
|
sonosSystem,
|
|
bonob,
|
|
WEB_ADDRESS,
|
|
new Navidrome(
|
|
process.env["BONOB_NAVIDROME_URL"] || "http://localhost:4533",
|
|
encryption(secret),
|
|
streamUserAgent
|
|
),
|
|
new InMemoryLinkCodes(),
|
|
new InMemoryAccessTokens(sha256(secret))
|
|
);
|
|
|
|
app.listen(PORT, () => {
|
|
logger.info(`Listening on ${PORT} available @ ${WEB_ADDRESS}`);
|
|
});
|
|
|
|
export default app;
|