Compare commits

..
12 Commits
Author SHA1 Message Date
fraujulian 04eba4de45 ci(whoami): delete unnecessary task
Build Validation / build (push) Failing after 0s
2026-08-24 16:05:11 +02:00
fraujulian 7bd03b5e5f ci(release): verify npm authentication 2026-08-24 16:03:24 +02:00
fraujulian fefad30ad5 refactor(version): define release line statically 2026-08-24 16:02:24 +02:00
fraujulian 9b14d8e9f0 fix(version): preserve package formatting 2026-08-24 16:01:16 +02:00
fraujulian 2430f6e667 chore(license): align package metadata with AGPL 2026-08-24 15:59:12 +02:00
fraujulian afe67ebdc1 docs(errors): distinguish rejected operations
Build Validation / build (push) Successful in 41s
2026-08-24 15:27:44 +02:00
fraujulian c4cd464bfa docs(api): clarify setter behavior 2026-08-24 15:27:05 +02:00
fraujulian 08b103a26b docs(api): document option validation 2026-08-24 15:26:16 +02:00
fraujulian f83d78ab4e ci(node): pin Node.js 24.17 2026-08-24 15:25:19 +02:00
fraujulian 242de19cf2 build(node): require Node.js 24.17 2026-08-24 15:24:41 +02:00
fraujulian 36f546eaba docs(readme): refresh project badges 2026-08-24 15:23:41 +02:00
fraujulian dcaf0f2f05 ci(eol): set lineendings to auto
Build Validation / build (push) Successful in 37s
2026-08-24 14:59:36 +02:00
8 changed files with 31 additions and 31 deletions
+4 -8
View File
@@ -6,11 +6,6 @@ on:
permissions: permissions:
contents: write contents: write
env:
VERSION_MAJOR: '1'
VERSION_MINOR: '1'
VERSION_PATCH: ${{ gitea.run_number }}
jobs: jobs:
build: build:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@@ -22,10 +17,10 @@ jobs:
fetch-depth: 0 fetch-depth: 0
fetch-tags: true fetch-tags: true
- name: Use NodeJS 24 - name: Use Node.js 24.17.0
uses: actions/setup-node@v6 uses: actions/setup-node@v6
with: with:
node-version: '24' node-version: '24.17.0'
registry-url: 'https://registry.npmjs.org' registry-url: 'https://registry.npmjs.org'
package-manager-cache: false package-manager-cache: false
@@ -33,8 +28,9 @@ jobs:
run: npm ci run: npm ci
- name: Set Release Version - name: Set Release Version
id: version
run: npm run version:place run: npm run version:place
env:
VERSION_PATCH: ${{ gitea.run_number }}
- name: Export Release Version - name: Export Release Version
id: release_version id: release_version
+2 -2
View File
@@ -15,10 +15,10 @@ jobs:
- name: Checkout Repository - name: Checkout Repository
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: use NodeJS 24 - name: Use Node.js 24.17.0
uses: actions/setup-node@v4 uses: actions/setup-node@v4
with: with:
node-version: '24' node-version: '24.17.0'
- name: Install Dependencies - name: Install Dependencies
run: npm ci run: npm ci
+1 -1
View File
@@ -9,5 +9,5 @@
"bracketSpacing": true, "bracketSpacing": true,
"bracketSameLine": false, "bracketSameLine": false,
"quoteProps": "as-needed", "quoteProps": "as-needed",
"endOfLine": "lf" "endOfLine": "auto"
} }
+10 -5
View File
@@ -1,8 +1,8 @@
# Discord Audio Stream # Discord Audio Stream
[![npm](https://img.shields.io/npm/dw/discord-audio-stream)](http://npmjs.org/package/discord-audio-stream) [![npm](https://img.shields.io/npm/dw/discord-audio-stream)](https://www.npmjs.com/package/discord-audio-stream)
![latest release](https://img.shields.io/gitea/v/release/FrauJulian/Discord-Audio-Stream?gitea_url=https%3A%2F%2Fgit.lechner-systems.at&color=blue) ![latest release](https://img.shields.io/gitea/v/release/FrauJulian/Discord-Audio-Stream?gitea_url=https%3A%2F%2Fgit.lechner-systems.at&color=blue)
![Gitea Repo stars](https://img.shields.io/gitea/stars/FrauJulian/Discord-Audio-Stream?gitea_url=https%3A%2F%2Fgit.lechner-systems.at&style=social) ![Github Repo stars](https://img.shields.io/github/stars/FrauJulian/Discord-Audio-Stream?github_url=https%3A%2F%2Fgithub.com&style=social)
`discord-audio-stream` is a small TypeScript library for managed Discord voice playback through `discord-audio-stream` is a small TypeScript library for managed Discord voice playback through
`@discordjs/voice` and ffmpeg. `@discordjs/voice` and ffmpeg.
@@ -18,7 +18,7 @@ Create an [issue](https://git.lechner-systems.at/FrauJulian/Discord-Audio-Stream
## Installation ## Installation
Node.js `24.x` is required. Node.js `>=24.17.0` and `<25` is required.
```bash ```bash
npm install discord-audio-stream @discordjs/voice @discordjs/opus npm install discord-audio-stream @discordjs/voice @discordjs/opus
@@ -123,6 +123,9 @@ type AudioManagerOptions = {
}; };
``` ```
`connectTimeoutMs` and numeric `renewIntervalMs` values must be whole milliseconds from `1` through `2_147_483_647`.
`volume.initialPercent` must be a finite number from `0` through `100` and requires `volume.enabled: true`.
### Defaults ### Defaults
| Option | Default | | Option | Default |
@@ -136,8 +139,8 @@ type AudioManagerOptions = {
| Method | Description | | Method | Description |
| ------------------------ | ---------------------------------------------------------------------------------- | | ------------------------ | ---------------------------------------------------------------------------------- |
| `setConnection(options)` | Replaces the voice connection target. | | `setConnection(options)` | Sets the target for the next `connect()` or `start()` call. |
| `setSource(source)` | Replaces the audio source. | | `setSource(source)` | Sets the source for the next `play()` or `start()` call. |
| `connect()` | Joins the configured Discord voice channel. | | `connect()` | Joins the configured Discord voice channel. |
| `play(source?)` | Starts playback on an existing connection. | | `play(source?)` | Starts playback on an existing connection. |
| `start()` | Connects and starts playback. | | `start()` | Connects and starts playback. |
@@ -200,6 +203,8 @@ operations, such as calling `pause()` while nothing is playing, throw `AudioMana
Use `onError` to observe asynchronous audio player and voice connection errors. The manager cleans up failed playback Use `onError` to observe asynchronous audio player and voice connection errors. The manager cleans up failed playback
and unrecoverable connections before invoking the callback. and unrecoverable connections before invoking the callback.
`onError` does not handle rejected `connect()`, `play()`, or `start()` calls. Await and catch those calls explicitly.
## Development ## Development
```bash ```bash
+2 -2
View File
@@ -7,7 +7,7 @@
"": { "": {
"name": "discord-audio-stream", "name": "discord-audio-stream",
"version": "x.x.x", "version": "x.x.x",
"license": "LGPL-3.0-only", "license": "AGPL-3.0-only",
"devDependencies": { "devDependencies": {
"@discordjs/opus": "^0.10.0", "@discordjs/opus": "^0.10.0",
"@jest/globals": "^30.4.1", "@jest/globals": "^30.4.1",
@@ -31,7 +31,7 @@
"typescript": "npm:@typescript/typescript6@^6.0.2" "typescript": "npm:@typescript/typescript6@^6.0.2"
}, },
"engines": { "engines": {
"node": "24.x" "node": ">=24.17.0 <25"
}, },
"funding": { "funding": {
"url": "https://ko-fi.com/FrauJulian" "url": "https://ko-fi.com/FrauJulian"
+2 -2
View File
@@ -2,7 +2,7 @@
"$schema": "https://json.schemastore.org/package.json", "$schema": "https://json.schemastore.org/package.json",
"name": "discord-audio-stream", "name": "discord-audio-stream",
"version": "x.x.x", "version": "x.x.x",
"license": "LGPL-3.0-only", "license": "AGPL-3.0-only",
"description": "A small Discord voice audio streaming library with managed ffmpeg playback.", "description": "A small Discord voice audio streaming library with managed ffmpeg playback.",
"exports": { "exports": {
".": { ".": {
@@ -112,7 +112,7 @@
"esbuild": "^0.28.2" "esbuild": "^0.28.2"
}, },
"engines": { "engines": {
"node": "24.x" "node": ">=24.17.0 <25"
}, },
"private": false, "private": false,
"publishConfig": { "publishConfig": {
+7 -10
View File
@@ -3,6 +3,8 @@ const fs = require('fs');
const lockFilePath = 'package-lock.json'; const lockFilePath = 'package-lock.json';
const packageFilePath = 'package.json'; const packageFilePath = 'package.json';
const placeholderVersion = 'x.x.x'; const placeholderVersion = 'x.x.x';
const versionMajor = 1;
const versionMinor = 2;
const command = process.argv[2]; const command = process.argv[2];
function readJson(path) { function readJson(path) {
@@ -24,7 +26,7 @@ function getLockFile() {
function writeVersions(version) { function writeVersions(version) {
const pkg = readJson(packageFilePath); const pkg = readJson(packageFilePath);
pkg.version = version; pkg.version = version;
writeJson(packageFilePath, pkg, 2); writeJson(packageFilePath, pkg, 4);
const lock = getLockFile(); const lock = getLockFile();
@@ -74,19 +76,14 @@ function fixPlaceholder() {
} }
function getCiVersion() { function getCiVersion() {
const major = process.env.VERSION_MAJOR;
const minor = process.env.VERSION_MINOR;
const patch = process.env.VERSION_PATCH; const patch = process.env.VERSION_PATCH;
const segments = { major, minor, patch };
for (const [name, value] of Object.entries(segments)) { if (!/^\d+$/.test(patch ?? '')) {
if (!/^\d+$/.test(value ?? '')) { console.error(`Missing or invalid patch version segment: "${patch ?? ''}"`);
console.error(`Missing or invalid ${name} version segment: "${value ?? ''}"`); process.exit(1);
process.exit(1);
}
} }
return `${major}.${minor}.${patch}`; return `${versionMajor}.${versionMinor}.${patch}`;
} }
if (command === 'check-placeholder') { if (command === 'check-placeholder') {
+3 -1
View File
@@ -112,7 +112,7 @@ export type VolumeOptions = {
/** /**
* Initial volume percentage applied when playback starts. * Initial volume percentage applied when playback starts.
* *
* Requires `enabled: true`. * Must be a finite number from `0` through `100` and requires `enabled: true`.
*/ */
initialPercent?: number; initialPercent?: number;
}; };
@@ -144,6 +144,7 @@ export type AudioManagerOptions = {
* Milliseconds after which the manager reconnects and restarts playback. * Milliseconds after which the manager reconnects and restarts playback.
* *
* Renewal is disabled unless an interval is provided. * Renewal is disabled unless an interval is provided.
* Numeric values must be integers from `1` through `2_147_483_647`.
* *
* @defaultValue `false` * @defaultValue `false`
*/ */
@@ -151,6 +152,7 @@ export type AudioManagerOptions = {
/** /**
* Maximum milliseconds to wait for the Discord voice connection to become ready. * Maximum milliseconds to wait for the Discord voice connection to become ready.
* Must be an integer from `1` through `2_147_483_647`.
* *
* @defaultValue `20_000` * @defaultValue `20_000`
*/ */