open-index/open-npm huggingface dataset:
npm package: @lox-audioserver/node-sendspin
Description: Nodejs implementation of the Sendspin protocol.
Latest version: 0.2.2

# node-sendspin

TypeScript/Node.js implementation of the Sendspin protocol. It exposes both client and server building blocks and is primarily used by lox-audioserver, but is generic enough for other Sendspin deployments.

## Install

```sh
npm install @lox-audioserver/node-sendspin
```

## Quickstart

```ts
import {
  SendspinClient,
  Roles,
  AudioCodec,
  MediaCommand,
} from '@lox-audioserver/node-sendspin';

const client = new SendspinClient('my-client-id', 'My Player', [Roles.PLAYER], {
  playerSupport: {
    supported_formats: [
      { codec: AudioCodec.PCM, channels: 2, sample_rate: 48000, bit_depth: 16 },
    ],
    buffer_capacity: 512 * 1024,
    supported_commands: [],
  },
  staticDelayMs: 75,
});

client.addStreamStartListener(() => console.log('Stream started'));
client.addAudioChunkListener((timestampUs, data, format) => {
  const playAt = client.computePlayTime(timestampUs);
  // schedule playback of `data` (PCM) at `playAt` microseconds on your clock
});

await client.connect('ws://localhost:8927/sendspin');

// Send playback commands to the group
await client.sendGroupCommand(MediaCommand.PLAY);
```

### Simple server

```ts
import { SendspinServer } from '@lox-audioserver/node-sendspin';

const server = new SendspinServer('server-id', 'My Sendspin Server');
server.on('client-added', (evt) => console.log('client connected', evt.clientId));
await server.start({ port: 8927, path: '/sendspin' });
```

## API highlights

- Protocol enums and payload types mirror the Sendspin spec.
- `SendspinTimeFilter` provides Kalman-filtered clock sync (microsecond precision) and is reused by the client.
- `SendspinClient` handles WebSocket handshake (`client/hello`, `server/hello`), periodic `client/time` sync, stream lifecycle messages, and audio chunks (binary `AUDIO_CHUNK`) with codec/format info.
- Helper utilities for packing/unpacking binary headers.
- Server-side building blocks:
  - `SendspinServer`/`ServerClient` to host a WebSocket endpoint or connect to clients.
  - `SendspinCore`/`SendspinSession` to manage sessions, push stream/state/metadata/commands, and send PCM/artwork/visualizer frames with backpressure guards.
  - Player role requires an initial `client/state` update before the session is fully identified.

## Building

```sh
npm install
npm run build
```

Compiled artifacts land in `dist/` with type declarations for publishing to npm.
npm package: @lox-audioserver/node-slimproto
Description: SlimProto server/client utilities for controlling Squeezebox-compatible players in Node.js.
Latest version: 0.1.2

# @lox-audioserver/node-slimproto

SlimProto server/client utilities for controlling Squeezebox-compatible players from Node.js. This is a TypeScript port of aioslimproto with the full server + player-control implementation used by lox-audioserver.

## Quick start (server)

```ts
import { SlimServer, EventType } from "@lox-audioserver/node-slimproto";

const server = new SlimServer();
await server.start();

server.subscribe((event) => {
  console.log(`[${event.type}]`, event.playerId, event.data);
});

process.on("SIGINT", async () => {
  await server.stop();
  process.exit(0);
});
```

## Quick start (playback control)

```ts
import { SlimServer } from "@lox-audioserver/node-slimproto";

const server = new SlimServer();
await server.start();

const player = server.getPlayer("aa:bb:cc:dd:ee:ff");
if (player) {
  await player.playUrl("http://host:7090/streams/1/current.mp3", "audio/mpeg", {
    title: "Now Playing",
    artist: "Artist",
  });
}
```

## What is implemented

- SlimProto TCP server with player tracking and event subscriptions.
- UDP discovery responses (legacy + TLV).
- SlimClient playback control: play/pause/stop, volume, metadata, and power.
- HTTP stream control and codec negotiation.
- Sync helpers (`pauseFor`, `skipOver`, `unpauseAt`) and heartbeat/jiffies tracking.
- Typed enums and helpers mirroring the reference implementation.

## Notes

- This package focuses on server-side SlimProto and player control; it does not implement LMS CLI or display rendering.
npm package: @lox-audioserver/node-snapcast
Description: Node.js Snapcast-compatible server core.
Latest version: 0.2.0

# node-snapcast

TypeScript/Node.js Snapcast-compatible core. It provides WebSocket + TCP transport handling and a JSON-RPC status/control surface, while delegating playback state and commands via hooks. It is used by lox-audioserver but is generic enough to embed elsewhere.

## Install

```sh
npm install @lox-audioserver/node-snapcast
```

## Quickstart (shared HTTP server)

```ts
import http from 'node:http';
import { SnapcastCore } from '@lox-audioserver/node-snapcast';

const core = new SnapcastCore({
  hooks: {
    getStreamProperties: (stream) => ({
      playbackStatus: 'playing',
      volume: 70,
    }),
    onStreamControl: (_stream, command) => {
      console.log('control', command);
      return { ok: true };
    },
  },
  serverName: 'My Snapcast Server',
  streamUri: { scheme: 'ws', port: 7090, basePath: '/snapcast' },
});

const server = http.createServer((_req, res) => {
  res.writeHead(200);
  res.end('ok');
});

server.on('upgrade', (req, socket, head) => {
  if (!core.handleUpgrade(req, socket, head)) {
    socket.destroy();
  }
});

server.listen(7090);
```

## Pushing audio

```ts
import { SnapcastCore } from '@lox-audioserver/node-snapcast';

const core = new SnapcastCore();
const pcmStream = getPcmReadableStreamSomehow();

core.setStream(
  'stream-1',
  1,
  { sampleRate: 48000, channels: 2, pcmBitDepth: 16 },
  pcmStream,
  ['snapclient-id'],
);
```

## TCP transport

If you want to support native Snapclient TCP connections, accept sockets and pass them to the core:

```ts
import net from 'node:net';
import { SnapcastCore } from '@lox-audioserver/node-snapcast';

const core = new SnapcastCore();
const server = net.createServer((socket) => core.handleTcpConnection(socket));
server.listen(1704);
```

## Hook highlights

- `getStreamProperties`: supplies JSON-RPC status metadata (playback status, volume, metadata, etc.).
- `onStreamControl`: handles RPC commands (play/pause/seek/next/previous).
- `onStreamProperty`: handles RPC property changes (volume/mute/shuffle/repeat).
- `getStreamUri` / `getServerMeta`: override server and stream metadata.
npm package: @loxia/angular-components
Description: Dit product bevat generiek te delen componenten.
Latest version: 15.0.0-250615082547808

# AngularComponents

## Beschrijving
Dit product bevat generiek te delen componenten.

## Release notes
## <!--next.version--> <!--next.release-date-->

## 15.0.0 11-10-2024
* BREAKING CHANGES
    * PW-18814 update project naar angular 18 

## 14.0.0 23-01-2024
* PW-8140 Rename master branch to main
* BREAKING CHANGES
    * PW-15559 update project naar angular 17

## 13.0.1 24-08-2023
* PW-11771 include latest component-viewer

## 13.0.0 22-08-2023
BREAKING CHANGES
* PW-13466 remove bootstrap and start using component-lib, upgrade to angular 16
    * SignaleringsbeeldSvgUtilityService and StoringSymboolUtil has been moved to @loxia/rijwegen
* PW-11767 upgrade to angular 15

## 12.2.0 14-03-2023
* PW-11548 dependency updates

## 12.1.0 29-11-2022
* PW-10160 support voor dubbele identieke spoornummers

## 12.0.0 25-10-2022
BREAKING CHANGES
* MST-583 Selectiekader renamed naar StoringSymbool, we gebruiken nu storingsymbolen met puics ipv wissel_selectiekader

## 11.0.0 07-03-2022
BREAKING CHANGES
* PW-7092 update project naar angular 13
* PW-6224 Duplicatie in npmPipeline en npm bouwblokken wegwerken (tech story)

### 10.2.0 30-06-2021
* project setup en package.json bijgewerkt om gebruik te kunnen maken van nieuwe pipeline

### 10.1.0 11-05-2021
* pplg-service verwijderd. Werd nergens gebruikt
* PW-1912 library setup verander om te voorkomen dat angular (core) transitief mee komt

### 10.0.0 07-04-2021
* PW-3783 upgrade to Angular 10

### 2.0.5 23-03-2021
* MST-437 betere afhandeling van hetzelfde spoorse element op 2 bladen

### 2.0.4 2020-12-22
* Verbeter combobox met bindLabel

### 2.0.2 2020-07-20
* Dependencies geupdate

### 2.0.1 13-07-2020
* fix modules export

### 2.0.0 06-03-2020
* Upgrade project naar Angular 8

### 1.1.0 15-01-2019
* commentaar kan nu worden toegevoegd/ opgeslagen bij routes
* gebruikt nu de npm-parent en generieke configuratie
* sonar analyse (coverage) output mogelijk gemaakt
* update dependencies

### 1.0.8 07-05-2019
* De aanroepmethode voor npm is aangepast zodat deze gelijk is met de andere producten

### 1.0.7 06-05-2019
* SVG-Utils uit MST lostgetrokken en geintroduceerd als Signaleringsbeeld-svg-util-service.
* Maak rode polylines onzichtbaar methode is nu de maak rode polysymbols onzichtbaar methode geworden.

### 1.0.6 28-02-2019
* Nieuwe veld type toegevoegd in VraagDialogComponent 'Conditional'
    * Deze accepteert een veld 'target'
        * Hier voeg je de ID in van een ander veld.
          Is het veld leeg, dan verschijnt dit veld niet.
        * Vereist mag met dit veld niet op true staan

### 1.0.2  11-07-2018
* Master bijwerken

### 1.0.1  12-02-2018
* Bugfix, BladVersieService opnemen bij providers

### 1.0.0  06-02-2018
* Project create