alphatheta-connect 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +166 -0
- package/lib/artwork/index.d.ts +9 -0
- package/lib/artwork/parsers/aiff.d.ts +2 -0
- package/lib/artwork/parsers/flac.d.ts +2 -0
- package/lib/artwork/parsers/id3.d.ts +2 -0
- package/lib/artwork/parsers/index.d.ts +5 -0
- package/lib/artwork/parsers/mp4.d.ts +2 -0
- package/lib/artwork/parsers/utils.d.ts +3 -0
- package/lib/artwork/reader.d.ts +15 -0
- package/lib/artwork/types.d.ts +44 -0
- package/lib/cli/index.d.ts +1 -0
- package/lib/cli.js +11431 -0
- package/lib/cli.js.map +1 -0
- package/lib/constants.d.ts +40 -0
- package/lib/control/index.d.ts +20 -0
- package/lib/db/getArtworkFromFile.d.ts +13 -0
- package/lib/db/getArtworkThumbnail.d.ts +29 -0
- package/lib/db/getFile.d.ts +29 -0
- package/lib/db/getMetadata.d.ts +28 -0
- package/lib/db/getPlaylist.d.ts +26 -0
- package/lib/db/getWaveforms.d.ts +29 -0
- package/lib/db/index.d.ts +70 -0
- package/lib/db/utils.d.ts +7 -0
- package/lib/devices/index.d.ts +66 -0
- package/lib/devices/utils.d.ts +5 -0
- package/lib/entities.d.ts +122 -0
- package/lib/index.d.ts +10 -0
- package/lib/index.js +13381 -0
- package/lib/index.js.map +1 -0
- package/lib/localdb/database-adapter.d.ts +49 -0
- package/lib/localdb/index.d.ts +104 -0
- package/lib/localdb/onelibrary-schema.d.ts +250 -0
- package/lib/localdb/onelibrary.d.ts +185 -0
- package/lib/localdb/orm.d.ts +60 -0
- package/lib/localdb/rekordbox.d.ts +112 -0
- package/lib/localdb/schema.d.ts +1 -0
- package/lib/localdb/utils.d.ts +5 -0
- package/lib/mixstatus/index.d.ts +109 -0
- package/lib/mixstatus/utils.d.ts +9 -0
- package/lib/network.d.ts +201 -0
- package/lib/nfs/index.d.ts +63 -0
- package/lib/nfs/programs.d.ts +61 -0
- package/lib/nfs/rpc.d.ts +60 -0
- package/lib/nfs/utils.d.ts +4 -0
- package/lib/nfs/xdr.d.ts +17 -0
- package/lib/passive/alphatheta.d.ts +94 -0
- package/lib/passive/devices.d.ts +64 -0
- package/lib/passive/index.d.ts +169 -0
- package/lib/passive/localdb.d.ts +122 -0
- package/lib/passive/pcap-adapter.d.ts +77 -0
- package/lib/passive/position.d.ts +32 -0
- package/lib/passive/remotedb.d.ts +49 -0
- package/lib/passive/status.d.ts +41 -0
- package/lib/remotedb/constants.d.ts +8 -0
- package/lib/remotedb/fields.d.ts +169 -0
- package/lib/remotedb/index.d.ts +160 -0
- package/lib/remotedb/message/index.d.ts +39 -0
- package/lib/remotedb/message/item.d.ts +530 -0
- package/lib/remotedb/message/response.d.ts +18 -0
- package/lib/remotedb/message/types.d.ts +227 -0
- package/lib/remotedb/queries.d.ts +99 -0
- package/lib/remotedb/utils.d.ts +23 -0
- package/lib/status/index.d.ts +39 -0
- package/lib/status/media.d.ts +22 -0
- package/lib/status/position.d.ts +29 -0
- package/lib/status/types.d.ts +170 -0
- package/lib/status/utils.d.ts +19 -0
- package/lib/types.d.ts +457 -0
- package/lib/types.js +274 -0
- package/lib/types.js.map +1 -0
- package/lib/utils/converters.d.ts +17 -0
- package/lib/utils/index.d.ts +28 -0
- package/lib/utils/telemetry.d.ts +82 -0
- package/lib/utils/udp.d.ts +20 -0
- package/lib/virtualcdj/index.d.ts +33 -0
- package/package.json +93 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The default virtual CDJ ID to use.
|
|
3
|
+
*
|
|
4
|
+
* This particular ID is out of the 1-6 range, thus will not be able to request
|
|
5
|
+
* metadata via the remotedb for CDJs.
|
|
6
|
+
*/
|
|
7
|
+
export declare const DEFAULT_VCDJ_ID = 7;
|
|
8
|
+
/**
|
|
9
|
+
* The port on which devices on the prolink network announce themselves.
|
|
10
|
+
*/
|
|
11
|
+
export declare const ANNOUNCE_PORT = 50000;
|
|
12
|
+
/**
|
|
13
|
+
* The port on which devices on the prolink network send beat timing information.
|
|
14
|
+
*/
|
|
15
|
+
export declare const BEAT_PORT = 50001;
|
|
16
|
+
/**
|
|
17
|
+
* The port on which devices on the prolink network announce themselves.
|
|
18
|
+
*/
|
|
19
|
+
export declare const STATUS_PORT = 50002;
|
|
20
|
+
/**
|
|
21
|
+
* The amount of time in ms between sending each announcement packet.
|
|
22
|
+
*/
|
|
23
|
+
export declare const ANNOUNCE_INTERVAL = 1500;
|
|
24
|
+
/**
|
|
25
|
+
* The interval in ms between startup stage packets (0x0a, 0x00, 0x02, 0x04).
|
|
26
|
+
*/
|
|
27
|
+
export declare const STARTUP_STAGE_INTERVAL = 300;
|
|
28
|
+
/**
|
|
29
|
+
* All UDP packets on the PRO DJ LINK network start with this magic header.
|
|
30
|
+
*/
|
|
31
|
+
export declare const PROLINK_HEADER: Uint8Array<ArrayBuffer>;
|
|
32
|
+
/**
|
|
33
|
+
* VirtualCDJName is the name given to the Virtual CDJ device.
|
|
34
|
+
*/
|
|
35
|
+
export declare const VIRTUAL_CDJ_NAME = "ProLink-Connect";
|
|
36
|
+
/**
|
|
37
|
+
* VirtualCDJFirmware is a string indicating the firmware version reported with
|
|
38
|
+
* status packets.
|
|
39
|
+
*/
|
|
40
|
+
export declare const VIRTUAL_CDJ_FIRMWARE = "1.43";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Socket } from 'dgram';
|
|
2
|
+
import { CDJStatus, Device } from "../types";
|
|
3
|
+
interface Options {
|
|
4
|
+
hostDevice: Device;
|
|
5
|
+
device: Device;
|
|
6
|
+
playState: CDJStatus.PlayState.Cued | CDJStatus.PlayState.Playing;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Generates the packet used to control the playstate of CDJs
|
|
10
|
+
*/
|
|
11
|
+
export declare const makePlaystatePacket: ({ hostDevice, device, playState }: Options) => Uint8Array<ArrayBuffer>;
|
|
12
|
+
export default class Control {
|
|
13
|
+
#private;
|
|
14
|
+
constructor(beatSocket: Socket, hostDevice: Device);
|
|
15
|
+
/**
|
|
16
|
+
* Start or stop a CDJ on the network
|
|
17
|
+
*/
|
|
18
|
+
setPlayState(device: Device, playState: Options['playState']): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Track } from "../entities";
|
|
2
|
+
import { Device, DeviceID, MediaSlot } from "../types";
|
|
3
|
+
import { TelemetrySpan as Span } from "../utils/telemetry";
|
|
4
|
+
export interface Options {
|
|
5
|
+
deviceId: DeviceID;
|
|
6
|
+
trackSlot: MediaSlot;
|
|
7
|
+
track: Track;
|
|
8
|
+
span?: Span;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Extract artwork directly from an audio file via NFS.
|
|
12
|
+
*/
|
|
13
|
+
export declare function viaFileExtraction(device: Device, opts: Options): Promise<Buffer | null>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Track } from "../entities";
|
|
2
|
+
import LocalDatabase from "../localdb";
|
|
3
|
+
import RemoteDatabase from "../remotedb";
|
|
4
|
+
import { Device, DeviceID, MediaSlot, TrackType } from "../types";
|
|
5
|
+
import { TelemetrySpan as Span } from "../utils/telemetry";
|
|
6
|
+
export interface Options {
|
|
7
|
+
/**
|
|
8
|
+
* The device to query the track artwork off of
|
|
9
|
+
*/
|
|
10
|
+
deviceId: DeviceID;
|
|
11
|
+
/**
|
|
12
|
+
* The media slot the track is present in
|
|
13
|
+
*/
|
|
14
|
+
trackSlot: MediaSlot;
|
|
15
|
+
/**
|
|
16
|
+
* The type of track we are querying artwork for
|
|
17
|
+
*/
|
|
18
|
+
trackType: TrackType;
|
|
19
|
+
/**
|
|
20
|
+
* The track to lookup artwork for
|
|
21
|
+
*/
|
|
22
|
+
track: Track;
|
|
23
|
+
/**
|
|
24
|
+
* The Sentry transaction span
|
|
25
|
+
*/
|
|
26
|
+
span?: Span;
|
|
27
|
+
}
|
|
28
|
+
export declare function viaRemote(remote: RemoteDatabase, opts: Required<Options>): Promise<Buffer<ArrayBufferLike> | null>;
|
|
29
|
+
export declare function viaLocal(local: LocalDatabase, device: Device, opts: Required<Options>): Promise<Buffer<ArrayBuffer> | null>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Track } from "../entities";
|
|
2
|
+
import LocalDatabase from "../localdb";
|
|
3
|
+
import RemoteDatabase from "../remotedb";
|
|
4
|
+
import { Device, DeviceID, MediaSlot, TrackType } from "../types";
|
|
5
|
+
import { TelemetrySpan as Span } from "../utils/telemetry";
|
|
6
|
+
export interface Options {
|
|
7
|
+
/**
|
|
8
|
+
* The device to query the file off of
|
|
9
|
+
*/
|
|
10
|
+
deviceId: DeviceID;
|
|
11
|
+
/**
|
|
12
|
+
* The media slot the track is present in
|
|
13
|
+
*/
|
|
14
|
+
trackSlot: MediaSlot;
|
|
15
|
+
/**
|
|
16
|
+
* The type of track we are querying file for
|
|
17
|
+
*/
|
|
18
|
+
trackType: TrackType;
|
|
19
|
+
/**
|
|
20
|
+
* The track to get track for
|
|
21
|
+
*/
|
|
22
|
+
track: Track;
|
|
23
|
+
/**
|
|
24
|
+
* The Sentry transaction span
|
|
25
|
+
*/
|
|
26
|
+
span?: Span;
|
|
27
|
+
}
|
|
28
|
+
export declare function viaRemote(_remote: RemoteDatabase, _device: Device, _opts: Required<Options>): null;
|
|
29
|
+
export declare function viaLocal(local: LocalDatabase, device: Device, opts: Required<Options>): Promise<Buffer<ArrayBuffer> | null>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import LocalDatabase from "../localdb";
|
|
2
|
+
import RemoteDatabase from "../remotedb";
|
|
3
|
+
import { Device, DeviceID, MediaSlot, TrackType } from "../types";
|
|
4
|
+
import { TelemetrySpan as Span } from "../utils/telemetry";
|
|
5
|
+
export interface Options {
|
|
6
|
+
/**
|
|
7
|
+
* The device to query the track metadata from
|
|
8
|
+
*/
|
|
9
|
+
deviceId: DeviceID;
|
|
10
|
+
/**
|
|
11
|
+
* The media slot the track is present in
|
|
12
|
+
*/
|
|
13
|
+
trackSlot: MediaSlot;
|
|
14
|
+
/**
|
|
15
|
+
* The type of track we are querying for
|
|
16
|
+
*/
|
|
17
|
+
trackType: TrackType;
|
|
18
|
+
/**
|
|
19
|
+
* The track id to retrieve metadata for
|
|
20
|
+
*/
|
|
21
|
+
trackId: number;
|
|
22
|
+
/**
|
|
23
|
+
* The Sentry transaction span
|
|
24
|
+
*/
|
|
25
|
+
span?: Span;
|
|
26
|
+
}
|
|
27
|
+
export declare function viaRemote(remote: RemoteDatabase, opts: Required<Options>): Promise<import("../types").Track<import("..").EntityFK.WithRelations> | null>;
|
|
28
|
+
export declare function viaLocal(local: LocalDatabase, device: Device, opts: Required<Options>): Promise<import("../types").Track | null>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Playlist } from "../entities";
|
|
2
|
+
import LocalDatabase from "../localdb";
|
|
3
|
+
import RemoteDatabase from "../remotedb";
|
|
4
|
+
import { DeviceID, MediaSlot, PlaylistContents } from "../types";
|
|
5
|
+
import { TelemetrySpan as Span } from "../utils/telemetry";
|
|
6
|
+
export interface Options {
|
|
7
|
+
/**
|
|
8
|
+
* The playlist or folder to query the entries of. This may be left as
|
|
9
|
+
* undefined to retrieve the root playlist.
|
|
10
|
+
*/
|
|
11
|
+
playlist?: Playlist;
|
|
12
|
+
/**
|
|
13
|
+
* The device to query the track metadata from
|
|
14
|
+
*/
|
|
15
|
+
deviceId: DeviceID;
|
|
16
|
+
/**
|
|
17
|
+
* The media slot the track is present in
|
|
18
|
+
*/
|
|
19
|
+
mediaSlot: MediaSlot;
|
|
20
|
+
/**
|
|
21
|
+
* The Sentry transaction span
|
|
22
|
+
*/
|
|
23
|
+
span?: Span;
|
|
24
|
+
}
|
|
25
|
+
export declare function viaRemote(remote: RemoteDatabase, opts: Options): Promise<PlaylistContents | null>;
|
|
26
|
+
export declare function viaLocal(local: LocalDatabase, opts: Options): Promise<PlaylistContents | null>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Track } from "../entities";
|
|
2
|
+
import LocalDatabase from "../localdb";
|
|
3
|
+
import RemoteDatabase from "../remotedb";
|
|
4
|
+
import { Device, DeviceID, MediaSlot, TrackType, Waveforms } from "../types";
|
|
5
|
+
import { TelemetrySpan as Span } from "../utils/telemetry";
|
|
6
|
+
export interface Options {
|
|
7
|
+
/**
|
|
8
|
+
* The device to query the track waveforms off of
|
|
9
|
+
*/
|
|
10
|
+
deviceId: DeviceID;
|
|
11
|
+
/**
|
|
12
|
+
* The media slot the track is present in
|
|
13
|
+
*/
|
|
14
|
+
trackSlot: MediaSlot;
|
|
15
|
+
/**
|
|
16
|
+
* The type of track we are querying waveforms for
|
|
17
|
+
*/
|
|
18
|
+
trackType: TrackType;
|
|
19
|
+
/**
|
|
20
|
+
* The track to lookup waveforms for
|
|
21
|
+
*/
|
|
22
|
+
track: Track;
|
|
23
|
+
/**
|
|
24
|
+
* The Sentry transaction span
|
|
25
|
+
*/
|
|
26
|
+
span?: Span;
|
|
27
|
+
}
|
|
28
|
+
export declare function viaRemote(remote: RemoteDatabase, opts: Required<Options>): Promise<Waveforms | null>;
|
|
29
|
+
export declare function viaLocal(local: LocalDatabase, device: Device, opts: Required<Options>): Promise<Waveforms | null>;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import DeviceManager from "../devices";
|
|
2
|
+
import { Track } from "../entities";
|
|
3
|
+
import LocalDatabase from "../localdb";
|
|
4
|
+
import { DatabaseType } from "../localdb/database-adapter";
|
|
5
|
+
import RemoteDatabase from "../remotedb";
|
|
6
|
+
import { Device, MediaSlot, PlaylistContents, Waveforms } from "../types";
|
|
7
|
+
import * as GetArtworkFromFile from './getArtworkFromFile';
|
|
8
|
+
import * as GetArtworkThumbnail from './getArtworkThumbnail';
|
|
9
|
+
import * as GetMetadata from './getMetadata';
|
|
10
|
+
import * as GetPlaylist from './getPlaylist';
|
|
11
|
+
/**
|
|
12
|
+
* A Database is the central service used to query devices on the prolink
|
|
13
|
+
* network for information from their databases.
|
|
14
|
+
*/
|
|
15
|
+
declare class Database {
|
|
16
|
+
#private;
|
|
17
|
+
constructor(hostDevice: Device, local: LocalDatabase, remote: RemoteDatabase, deviceManager: DeviceManager);
|
|
18
|
+
/**
|
|
19
|
+
* Reports weather or not the CDJs can be communicated to over the remote
|
|
20
|
+
* database protocol. This is important when trying to query for unanalyzed or
|
|
21
|
+
* compact disc tracks.
|
|
22
|
+
*/
|
|
23
|
+
get cdjSupportsRemotedb(): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* Get the database type (oneLibrary or pdb) for a loaded device slot.
|
|
26
|
+
* Returns null if the slot uses remote database or no database is loaded.
|
|
27
|
+
*/
|
|
28
|
+
getDatabaseType(deviceId: number, slot: MediaSlot.USB | MediaSlot.SD): DatabaseType | null;
|
|
29
|
+
/**
|
|
30
|
+
* Retrieve metadata for a track on a specific device slot.
|
|
31
|
+
*/
|
|
32
|
+
getMetadata(opts: GetMetadata.Options): Promise<Track | null>;
|
|
33
|
+
/**
|
|
34
|
+
* Retrieves the file off a specific device slot.
|
|
35
|
+
*/
|
|
36
|
+
getFile(opts: GetArtworkThumbnail.Options): Promise<Buffer<ArrayBufferLike> | null>;
|
|
37
|
+
/**
|
|
38
|
+
* Retrieves the low-resolution artwork thumbnail from the rekordbox database.
|
|
39
|
+
*
|
|
40
|
+
* This returns the pre-generated thumbnail stored in the rekordbox database,
|
|
41
|
+
* which is typically small (around 80x80 pixels).
|
|
42
|
+
*
|
|
43
|
+
* For full-resolution artwork extracted from the audio file, use getArtwork().
|
|
44
|
+
*/
|
|
45
|
+
getArtworkThumbnail(opts: GetArtworkThumbnail.Options): Promise<Buffer<ArrayBufferLike> | null>;
|
|
46
|
+
/**
|
|
47
|
+
* Retrieves artwork for a track by extracting it from the audio file via NFS.
|
|
48
|
+
*
|
|
49
|
+
* This is the primary method for getting artwork. It reads embedded artwork
|
|
50
|
+
* from the audio file (ID3 tags for MP3, metadata atoms for M4A, PICTURE
|
|
51
|
+
* blocks for FLAC, etc.) using partial file reads to minimize data transfer.
|
|
52
|
+
*
|
|
53
|
+
* For low-resolution thumbnails from the rekordbox database, use
|
|
54
|
+
* getArtworkThumbnail() instead.
|
|
55
|
+
*/
|
|
56
|
+
getArtwork(opts: GetArtworkFromFile.Options): Promise<Buffer<ArrayBufferLike> | null>;
|
|
57
|
+
/**
|
|
58
|
+
* Retrieves the waveforms for a track on a specific device slot.
|
|
59
|
+
*/
|
|
60
|
+
getWaveforms(opts: GetArtworkThumbnail.Options): Promise<Waveforms | null>;
|
|
61
|
+
/**
|
|
62
|
+
* Retrieve folders, playlists, and tracks within the playlist tree. The id
|
|
63
|
+
* may be left undefined to query the root of the playlist tree.
|
|
64
|
+
*
|
|
65
|
+
* NOTE: You will never receive a track list and playlists or folders at the
|
|
66
|
+
* same time. But the API is simpler to combine the lookup for these.
|
|
67
|
+
*/
|
|
68
|
+
getPlaylist(opts: GetPlaylist.Options): Promise<PlaylistContents | null>;
|
|
69
|
+
}
|
|
70
|
+
export default Database;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Device, MediaSlot } from "../types";
|
|
2
|
+
interface AnlzLoaderOpts {
|
|
3
|
+
device: Device;
|
|
4
|
+
slot: MediaSlot.RB | MediaSlot.USB | MediaSlot.SD;
|
|
5
|
+
}
|
|
6
|
+
export declare function anlzLoader(opts: AnlzLoaderOpts): (path: string) => Promise<Buffer<ArrayBuffer>>;
|
|
7
|
+
export {};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import StrictEventEmitter from 'strict-event-emitter-types';
|
|
2
|
+
import { Socket } from 'dgram';
|
|
3
|
+
import { EventEmitter } from 'events';
|
|
4
|
+
import { Device, DeviceID } from "../types";
|
|
5
|
+
interface Config {
|
|
6
|
+
/**
|
|
7
|
+
* Time in milliseconds after which a device is considered to have
|
|
8
|
+
* disconnected if it has not broadcast an announcement.
|
|
9
|
+
*
|
|
10
|
+
* @default 10000 ms
|
|
11
|
+
*/
|
|
12
|
+
deviceTimeout?: number;
|
|
13
|
+
/**
|
|
14
|
+
* The name of the virtual CDJ to filter out from device announcements.
|
|
15
|
+
* This prevents our own device from appearing in the device list.
|
|
16
|
+
*
|
|
17
|
+
* @default VIRTUAL_CDJ_NAME constant
|
|
18
|
+
*/
|
|
19
|
+
vcdjName?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* The configuration object that may be passed to reconfigure the manager
|
|
23
|
+
*/
|
|
24
|
+
type ConfigEditable = Omit<Config, 'announceSocket'>;
|
|
25
|
+
/**
|
|
26
|
+
* The interface the device manager event emitter should follow
|
|
27
|
+
*/
|
|
28
|
+
interface DeviceEvents {
|
|
29
|
+
/**
|
|
30
|
+
* Fired when a new device becomes available on the network
|
|
31
|
+
*/
|
|
32
|
+
connected: (device: Device) => void;
|
|
33
|
+
/**
|
|
34
|
+
* Fired when a device has not announced itself on the network for the
|
|
35
|
+
* specified timeout.
|
|
36
|
+
*/
|
|
37
|
+
disconnected: (device: Device) => void;
|
|
38
|
+
/**
|
|
39
|
+
* Fired every time the device announces itself on the network
|
|
40
|
+
*/
|
|
41
|
+
announced: (device: Device) => void;
|
|
42
|
+
}
|
|
43
|
+
type Emitter = StrictEventEmitter<EventEmitter, DeviceEvents>;
|
|
44
|
+
/**
|
|
45
|
+
* The device manager is responsible for tracking devices that appear on the
|
|
46
|
+
* prolink network, providing an API to react to devices livecycle events as
|
|
47
|
+
* they connect and disconnect form the network.
|
|
48
|
+
*/
|
|
49
|
+
declare class DeviceManager {
|
|
50
|
+
#private;
|
|
51
|
+
constructor(announceSocket: Socket, config?: Config);
|
|
52
|
+
on: Emitter['on'];
|
|
53
|
+
off: Emitter['off'];
|
|
54
|
+
once: Emitter['once'];
|
|
55
|
+
/**
|
|
56
|
+
* Get active devices on the network.
|
|
57
|
+
*/
|
|
58
|
+
get devices(): Map<number, Device>;
|
|
59
|
+
/**
|
|
60
|
+
* Waits for a specific device ID to appear on the network, with a
|
|
61
|
+
* configurable timeout, in which case it will resolve with null.
|
|
62
|
+
*/
|
|
63
|
+
getDeviceEnsured(id: DeviceID, timeout?: number): Promise<Device | null>;
|
|
64
|
+
reconfigure(config: ConfigEditable): void;
|
|
65
|
+
}
|
|
66
|
+
export default DeviceManager;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { BeatGrid, CueAndLoop, WaveformHD } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Documentation type strictly for use with entities that have foreign key
|
|
4
|
+
* attributes.
|
|
5
|
+
*/
|
|
6
|
+
export declare enum EntityFK {
|
|
7
|
+
WithFKs = 0,
|
|
8
|
+
WithRelations = 1
|
|
9
|
+
}
|
|
10
|
+
export interface Artwork {
|
|
11
|
+
id: number;
|
|
12
|
+
path?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface Key {
|
|
15
|
+
id: number;
|
|
16
|
+
name: string;
|
|
17
|
+
}
|
|
18
|
+
export interface Label {
|
|
19
|
+
id: number;
|
|
20
|
+
name: string;
|
|
21
|
+
}
|
|
22
|
+
export interface Color {
|
|
23
|
+
id: number;
|
|
24
|
+
name: string;
|
|
25
|
+
}
|
|
26
|
+
export interface Genre {
|
|
27
|
+
id: number;
|
|
28
|
+
name: string;
|
|
29
|
+
}
|
|
30
|
+
export interface Album {
|
|
31
|
+
id: number;
|
|
32
|
+
name: string;
|
|
33
|
+
}
|
|
34
|
+
export interface Artist {
|
|
35
|
+
id: number;
|
|
36
|
+
name: string;
|
|
37
|
+
}
|
|
38
|
+
export interface Playlist {
|
|
39
|
+
id: number;
|
|
40
|
+
name: string;
|
|
41
|
+
isFolder: boolean;
|
|
42
|
+
parentId: number | null;
|
|
43
|
+
}
|
|
44
|
+
interface PlaylistEntryRelations {
|
|
45
|
+
track: Track;
|
|
46
|
+
}
|
|
47
|
+
interface PlaylistEntryFks {
|
|
48
|
+
playlistId: number;
|
|
49
|
+
trackId: number;
|
|
50
|
+
}
|
|
51
|
+
export type PlaylistEntry<withFKs extends EntityFK = EntityFK.WithRelations> = {
|
|
52
|
+
id: number;
|
|
53
|
+
sortIndex: number;
|
|
54
|
+
} & (withFKs extends EntityFK.WithFKs ? PlaylistEntryFks : PlaylistEntryRelations);
|
|
55
|
+
interface TrackRelations {
|
|
56
|
+
artwork: Artwork | null;
|
|
57
|
+
artist: Artist | null;
|
|
58
|
+
originalArtist: Artist | null;
|
|
59
|
+
remixer: Artist | null;
|
|
60
|
+
composer: Artist | null;
|
|
61
|
+
album: Album | null;
|
|
62
|
+
label: Label | null;
|
|
63
|
+
genre: Genre | null;
|
|
64
|
+
color: Color | null;
|
|
65
|
+
key: Key | null;
|
|
66
|
+
}
|
|
67
|
+
interface TrackFks {
|
|
68
|
+
artworkId?: number;
|
|
69
|
+
artistId?: number;
|
|
70
|
+
originalArtistId?: number;
|
|
71
|
+
remixerId?: number;
|
|
72
|
+
composerId?: number;
|
|
73
|
+
albumId?: number;
|
|
74
|
+
labelId?: number;
|
|
75
|
+
genreId?: number;
|
|
76
|
+
colorId?: number;
|
|
77
|
+
keyId?: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Represents a track.
|
|
81
|
+
*
|
|
82
|
+
* Note, fields that are not optional will be set for all database request
|
|
83
|
+
* methods.
|
|
84
|
+
*/
|
|
85
|
+
export type Track<withFKs extends EntityFK = EntityFK.WithRelations> = {
|
|
86
|
+
id: number;
|
|
87
|
+
title: string;
|
|
88
|
+
duration: number;
|
|
89
|
+
bitrate?: number;
|
|
90
|
+
tempo: number;
|
|
91
|
+
rating: number;
|
|
92
|
+
comment: string;
|
|
93
|
+
filePath: string;
|
|
94
|
+
fileName: string;
|
|
95
|
+
trackNumber?: number;
|
|
96
|
+
discNumber?: number;
|
|
97
|
+
sampleRate?: number;
|
|
98
|
+
sampleDepth?: number;
|
|
99
|
+
playCount?: number;
|
|
100
|
+
year?: number;
|
|
101
|
+
mixName?: string;
|
|
102
|
+
autoloadHotcues?: boolean;
|
|
103
|
+
kuvoPublic?: boolean;
|
|
104
|
+
fileSize?: number;
|
|
105
|
+
analyzePath?: string;
|
|
106
|
+
releaseDate?: string;
|
|
107
|
+
analyzeDate?: Date;
|
|
108
|
+
dateAdded?: Date;
|
|
109
|
+
/**
|
|
110
|
+
* Embedded beat grid information
|
|
111
|
+
*/
|
|
112
|
+
beatGrid: BeatGrid | null;
|
|
113
|
+
/**
|
|
114
|
+
* Embedded cue and loop information
|
|
115
|
+
*/
|
|
116
|
+
cueAndLoops: CueAndLoop[] | null;
|
|
117
|
+
/**
|
|
118
|
+
* Embedded HD Waveform information
|
|
119
|
+
*/
|
|
120
|
+
waveformHd: WaveformHD | null;
|
|
121
|
+
} & (withFKs extends EntityFK.WithFKs ? TrackFks : TrackRelations);
|
|
122
|
+
export {};
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './entities';
|
|
2
|
+
export * from './mixstatus';
|
|
3
|
+
export * from './network';
|
|
4
|
+
export { default as PositionEmitter } from './status/position';
|
|
5
|
+
export * from './passive';
|
|
6
|
+
export { extractArtwork, extractArtworkFromDevice, isArtworkExtractionSupported, PictureType, } from './artwork';
|
|
7
|
+
export type { ExtractedArtwork, FileReader as ArtworkFileReader } from './artwork';
|
|
8
|
+
export type { DatabaseAdapter, DatabasePreference, DatabaseType, PlaylistQueryResult, } from './localdb/database-adapter';
|
|
9
|
+
export { OneLibraryAdapter } from './localdb/onelibrary';
|
|
10
|
+
export * from './types';
|