Skip to content

Conversation

@chrisle
Copy link
Contributor

@chrisle chrisle commented Jun 22, 2022

No description provided.

@vercel
Copy link

vercel bot commented Jun 22, 2022

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Updated
prolink-connect ✅ Ready (Inspect) Visit Preview Jul 4, 2022 at 9:15PM (UTC)

@chrisle chrisle changed the title Download files in 8k instead of 2k chunks. Add getFile(). Separate closing UDP sockets from device connections. Jul 4, 2022
@vercel
Copy link

vercel bot commented Dec 14, 2025

@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.

@chrisle chrisle force-pushed the main branch 4 times, most recently from d21ff78 to 801565b Compare December 23, 2025 01:23
- 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.
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.
- Add .github/workflows/publish.yml with 1Password integration
- Add .github/workflows/test.yml for PR testing
- Add .github/release.js for version bumping and changelog generation
- Add npm release scripts to package.json
TypeScript's declaration emit produces non-deterministic union type
ordering (e.g., `1 | 2 | 4` vs `1 | 4 | 2`), causing flip-flop commits.
The lib/ directory is now gitignored - CI builds before npm publish.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant