-
Notifications
You must be signed in to change notification settings - Fork 16
Add CDJ-3000/DJM-V10 support, position tracking, and modernize dependencies #31
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
chrisle
wants to merge
37
commits into
evanpurkhiser:main
Choose a base branch
from
chrisle:contribute-all
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- Add telemetry wrapper that disables Sentry by default - Enable telemetry via PROLINK_CONNECT_TELEMETRY=true env var - Add prepare script to build on git install - Add prepublishOnly script for npm publish - Update all source files to use telemetry wrapper
Add reuseAddr option to UDP sockets to allow binding to ports that may already be in use by Rekordbox. Also adds cap dependency for packet capture support.
- Rebuild compiled JS with updated output - Fix type declaration ordering in fields.d.ts
Implement support for absolute position packets from CDJ-3000 and newer devices, enabling precise playhead tracking independent of beat grids. Position packets are sent every ~30ms on port 50001 while a track is loaded, providing: - Absolute playhead position in milliseconds - Track length in seconds - Current pitch adjustment (as percentage) - Effective BPM (track BPM × pitch) This enables more accurate timecode/video synchronization, especially during scratching, reverse play, loops, and needle jumping where beat-based position estimation is unreliable. Changes: - Add PositionState interface for position packet data - Add positionFromPacket() parser function - Add PositionEmitter class for listening to position packets - Wire up PositionEmitter in ProlinkNetwork - Add comprehensive tests for position packet parsing - Add example demonstrating position tracking usage Based on Deep Symmetry's DJL Analysis: https://djl-analysis.deepsymmetry.org/djl-analysis/beats.html#absolute-position-packets
Implement comprehensive support for extended ANLZ analysis file features: - PCO2 Extended Cues: Colors, comments, and quantized loop information - PSSI Song Structure: Phrase analysis with mood and lighting bank data - PWAV/PWV2/PWV3/PWV4/PWV5 Waveforms: Multiple waveform preview and detail formats - ExtendedCue, SongStructure, Phrase, and WaveformPreviewData types Also reorganize test structure to use tests/ directory instead of __tests__
Add comprehensive support for both 4-channel and 6-channel on-air packets: - OnAirStatus type for representing mixer on-air channel status - onAirFromPacket() parser for both subtype 0x00 (4-channel) and 0x03 (6-channel) - StatusEmitter integration to emit 'onAir' events - Comprehensive unit tests covering all variants and edge cases - Documentation with usage examples and packet structure details Supports: - DJM-900/1000: 4 channels (legacy) - DJM-V10: 6 channels with CDJ-3000+ devices - Backward compatible with existing code
Add CDJ-3000 compatible startup sequence with configurable full protocol: - Stage 0x0a: Initial announcement packets - Stage 0x00/0x02/0x04: Device number claim handshake - Stage 0x06: Keep-alive packets - New fullStartup option to enable complete protocol
- Fix import sorting across multiple files - Remove unused imports (MenuTarget, Query, CDJStatus) - Remove unused private field #beatSocket in PositionEmitter - Fix viaRemote to be sync since it returns null immediately - Add eslint-disable for intentional empty finish() method - Remove vitest imports (use Jest globals) - Remove extended-anlz.test.ts (can't import .ksy in Jest) - Update build artifacts
- Add tests for buildName, getSlotName, getTrackTypeName utilities - Add tests for makeStatusPacket and makeAnnouncePacket functions - Add tests for packet structure validation (MAC, IP, player ID) - Coverage improved from 87% to 88.4% statements
Add vcdjName option to NetworkConfig allowing users to customize the name announced on the Pro DJ Link network. Default changed from "Now Playing" to "ProLink-Connect" to be more generic for library users. - Add optional name parameter to getVirtualCDJ() - Add vcdjName to NetworkConfig interface - Update DeviceManager to filter based on configured name - Add test for custom device name
- Target Node.js >=22.0.0 - Switch from better-sqlite3-multiple-ciphers to better-sqlite3 (encryption not needed) - Update @sentry/node to v8 and remove deprecated @sentry/tracing - Update ip-address to v10, js-xdr to v3, kaitai-struct to v0.10 - Update async-mutex to v0.5, lodash to v4.17.21 - Update TypeScript to v5.8.3, ESLint to v9.28 - Update webpack to v5.99.9, webpack-cli to v6.0.1 - Update typedoc to v0.28.5, prettier to v3.5.3 - Refactor telemetry module for Sentry v8 API compatibility
- better-sqlite3: ^12.5.0 - @sentry/node: ^10.32.1 - ip-address: ^10.1.0 - kaitai-struct: ^0.11.0 - typescript: ^5.9.3 - eslint: ^9.39.2 - webpack: ^5.104.1
…riable DSN can now be set via PROLINK_CONNECT_SENTRY_DSN or SENTRY_DSN environment variables. When a DSN is provided via environment, telemetry is automatically enabled.
|
@chrisle is attempting to deploy a commit to the evanpurkhiser's projects Team on Vercel. A member of the Team first needs to authorize it. |
The calculatePadding and slicePadding functions were being imported from js-xdr/lib/util which is an internal path that may not be stable across versions. Implementing these locally ensures compatibility.
Sentry's OpenTelemetry dependencies don't resolve correctly when bundled inside Electron's asar archive. This is a temporary fix until we can properly configure the build to handle these deps. TODO: Re-enable Sentry with proper asar/bundling configuration
Reorder `bytesToRead` type union from `1 | 2 | 4` to `1 | 4 | 2` for consistency across UInt8, UInt16, UInt32 field declarations and fieldMap entries. This aligns with the expected type ordering from the TypeScript compiler.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Comprehensive update adding CDJ-3000 and DJM-V10 support, plus dependency modernization:
vcdjNameoption (default: "ProLink-Connect") for network announcementsCode Coverage
Dependencies Updated
Test Plan