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.
Files changed (77) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +166 -0
  3. package/lib/artwork/index.d.ts +9 -0
  4. package/lib/artwork/parsers/aiff.d.ts +2 -0
  5. package/lib/artwork/parsers/flac.d.ts +2 -0
  6. package/lib/artwork/parsers/id3.d.ts +2 -0
  7. package/lib/artwork/parsers/index.d.ts +5 -0
  8. package/lib/artwork/parsers/mp4.d.ts +2 -0
  9. package/lib/artwork/parsers/utils.d.ts +3 -0
  10. package/lib/artwork/reader.d.ts +15 -0
  11. package/lib/artwork/types.d.ts +44 -0
  12. package/lib/cli/index.d.ts +1 -0
  13. package/lib/cli.js +11431 -0
  14. package/lib/cli.js.map +1 -0
  15. package/lib/constants.d.ts +40 -0
  16. package/lib/control/index.d.ts +20 -0
  17. package/lib/db/getArtworkFromFile.d.ts +13 -0
  18. package/lib/db/getArtworkThumbnail.d.ts +29 -0
  19. package/lib/db/getFile.d.ts +29 -0
  20. package/lib/db/getMetadata.d.ts +28 -0
  21. package/lib/db/getPlaylist.d.ts +26 -0
  22. package/lib/db/getWaveforms.d.ts +29 -0
  23. package/lib/db/index.d.ts +70 -0
  24. package/lib/db/utils.d.ts +7 -0
  25. package/lib/devices/index.d.ts +66 -0
  26. package/lib/devices/utils.d.ts +5 -0
  27. package/lib/entities.d.ts +122 -0
  28. package/lib/index.d.ts +10 -0
  29. package/lib/index.js +13381 -0
  30. package/lib/index.js.map +1 -0
  31. package/lib/localdb/database-adapter.d.ts +49 -0
  32. package/lib/localdb/index.d.ts +104 -0
  33. package/lib/localdb/onelibrary-schema.d.ts +250 -0
  34. package/lib/localdb/onelibrary.d.ts +185 -0
  35. package/lib/localdb/orm.d.ts +60 -0
  36. package/lib/localdb/rekordbox.d.ts +112 -0
  37. package/lib/localdb/schema.d.ts +1 -0
  38. package/lib/localdb/utils.d.ts +5 -0
  39. package/lib/mixstatus/index.d.ts +109 -0
  40. package/lib/mixstatus/utils.d.ts +9 -0
  41. package/lib/network.d.ts +201 -0
  42. package/lib/nfs/index.d.ts +63 -0
  43. package/lib/nfs/programs.d.ts +61 -0
  44. package/lib/nfs/rpc.d.ts +60 -0
  45. package/lib/nfs/utils.d.ts +4 -0
  46. package/lib/nfs/xdr.d.ts +17 -0
  47. package/lib/passive/alphatheta.d.ts +94 -0
  48. package/lib/passive/devices.d.ts +64 -0
  49. package/lib/passive/index.d.ts +169 -0
  50. package/lib/passive/localdb.d.ts +122 -0
  51. package/lib/passive/pcap-adapter.d.ts +77 -0
  52. package/lib/passive/position.d.ts +32 -0
  53. package/lib/passive/remotedb.d.ts +49 -0
  54. package/lib/passive/status.d.ts +41 -0
  55. package/lib/remotedb/constants.d.ts +8 -0
  56. package/lib/remotedb/fields.d.ts +169 -0
  57. package/lib/remotedb/index.d.ts +160 -0
  58. package/lib/remotedb/message/index.d.ts +39 -0
  59. package/lib/remotedb/message/item.d.ts +530 -0
  60. package/lib/remotedb/message/response.d.ts +18 -0
  61. package/lib/remotedb/message/types.d.ts +227 -0
  62. package/lib/remotedb/queries.d.ts +99 -0
  63. package/lib/remotedb/utils.d.ts +23 -0
  64. package/lib/status/index.d.ts +39 -0
  65. package/lib/status/media.d.ts +22 -0
  66. package/lib/status/position.d.ts +29 -0
  67. package/lib/status/types.d.ts +170 -0
  68. package/lib/status/utils.d.ts +19 -0
  69. package/lib/types.d.ts +457 -0
  70. package/lib/types.js +274 -0
  71. package/lib/types.js.map +1 -0
  72. package/lib/utils/converters.d.ts +17 -0
  73. package/lib/utils/index.d.ts +28 -0
  74. package/lib/utils/telemetry.d.ts +82 -0
  75. package/lib/utils/udp.d.ts +20 -0
  76. package/lib/virtualcdj/index.d.ts +33 -0
  77. package/package.json +93 -0
@@ -0,0 +1,169 @@
1
+ import { PromiseReadable } from 'promise-readable';
2
+ /**
3
+ * Field type is a leading byte that indicates what the field is.
4
+ */
5
+ export declare enum FieldType {
6
+ UInt8 = 15,
7
+ UInt16 = 16,
8
+ UInt32 = 17,
9
+ Binary = 20,
10
+ String = 38
11
+ }
12
+ export declare abstract class BaseField {
13
+ ['constructor']: typeof BaseField;
14
+ /**
15
+ * The raw field data
16
+ */
17
+ data: Buffer;
18
+ /**
19
+ * Corce the field into a buffer. This differs from reading the data
20
+ * property in that it will include the field type header.
21
+ */
22
+ abstract buffer: Buffer;
23
+ /**
24
+ * Declares the type of field this class represents
25
+ */
26
+ static type: FieldType;
27
+ /**
28
+ * The number of bytes to read for this field. If the field is not a fixed size,
29
+ * set this to a function which will receive the UInt32 value just after
30
+ * reading the field type, returning the next number of bytes to read.
31
+ */
32
+ static bytesToRead: number | ((reportedLength: number) => number);
33
+ }
34
+ export type NumberField<T extends number = number> = BaseField & {
35
+ /**
36
+ * The fields number value
37
+ */
38
+ value: T;
39
+ };
40
+ export type StringField<T extends string = string> = BaseField & {
41
+ /**
42
+ * The fields decoded string value
43
+ */
44
+ value: T;
45
+ };
46
+ export type BinaryField = BaseField & {
47
+ /**
48
+ * The binary value encapsulated in the field
49
+ */
50
+ value: Buffer;
51
+ };
52
+ export type Field = NumberField | StringField | BinaryField;
53
+ type NumberFieldType = FieldType.UInt32 | FieldType.UInt16 | FieldType.UInt8;
54
+ /**
55
+ * Field representing a UInt8
56
+ */
57
+ export declare const UInt8: {
58
+ new (value: number | Buffer): {
59
+ value: number;
60
+ get buffer(): Buffer<ArrayBuffer>;
61
+ constructor: typeof BaseField;
62
+ /**
63
+ * The raw field data
64
+ */
65
+ data: Buffer;
66
+ };
67
+ type: NumberFieldType;
68
+ bytesToRead: 1 | 4 | 2;
69
+ };
70
+ /**
71
+ * Field representing a UInt16
72
+ */
73
+ export declare const UInt16: {
74
+ new (value: number | Buffer): {
75
+ value: number;
76
+ get buffer(): Buffer<ArrayBuffer>;
77
+ constructor: typeof BaseField;
78
+ /**
79
+ * The raw field data
80
+ */
81
+ data: Buffer;
82
+ };
83
+ type: NumberFieldType;
84
+ bytesToRead: 1 | 4 | 2;
85
+ };
86
+ /**
87
+ * Field representing a UInt32
88
+ */
89
+ export declare const UInt32: {
90
+ new (value: number | Buffer): {
91
+ value: number;
92
+ get buffer(): Buffer<ArrayBuffer>;
93
+ constructor: typeof BaseField;
94
+ /**
95
+ * The raw field data
96
+ */
97
+ data: Buffer;
98
+ };
99
+ type: NumberFieldType;
100
+ bytesToRead: 1 | 4 | 2;
101
+ };
102
+ /**
103
+ * Field representing a null-terminated big endian UTF-16 string
104
+ */
105
+ export declare class String extends BaseField implements StringField {
106
+ static type: FieldType.String;
107
+ static bytesToRead: (length: number) => number;
108
+ value: string;
109
+ constructor(value: Buffer | string);
110
+ get buffer(): Buffer<ArrayBuffer>;
111
+ }
112
+ /**
113
+ * Field representing binary data
114
+ */
115
+ export declare class Binary extends BaseField implements BinaryField {
116
+ static type: FieldType.Binary;
117
+ static bytesToRead: (bytes: number) => number;
118
+ value: Buffer;
119
+ constructor(value: Buffer);
120
+ get buffer(): Buffer<ArrayBuffer>;
121
+ }
122
+ declare const fieldMap: {
123
+ readonly 15: {
124
+ new (value: number | Buffer): {
125
+ value: number;
126
+ get buffer(): Buffer<ArrayBuffer>;
127
+ constructor: typeof BaseField;
128
+ /**
129
+ * The raw field data
130
+ */
131
+ data: Buffer;
132
+ };
133
+ type: NumberFieldType;
134
+ bytesToRead: 1 | 4 | 2;
135
+ };
136
+ readonly 16: {
137
+ new (value: number | Buffer): {
138
+ value: number;
139
+ get buffer(): Buffer<ArrayBuffer>;
140
+ constructor: typeof BaseField;
141
+ /**
142
+ * The raw field data
143
+ */
144
+ data: Buffer;
145
+ };
146
+ type: NumberFieldType;
147
+ bytesToRead: 1 | 4 | 2;
148
+ };
149
+ readonly 17: {
150
+ new (value: number | Buffer): {
151
+ value: number;
152
+ get buffer(): Buffer<ArrayBuffer>;
153
+ constructor: typeof BaseField;
154
+ /**
155
+ * The raw field data
156
+ */
157
+ data: Buffer;
158
+ };
159
+ type: NumberFieldType;
160
+ bytesToRead: 1 | 4 | 2;
161
+ };
162
+ readonly 20: typeof Binary;
163
+ readonly 38: typeof String;
164
+ };
165
+ /**
166
+ * Read a single field from a socket stream.
167
+ */
168
+ export declare function readField<T extends FieldType, F extends InstanceType<(typeof fieldMap)[T]>>(stream: PromiseReadable<any>, expect: T): Promise<F>;
169
+ export {};
@@ -0,0 +1,160 @@
1
+ import { Mutex } from 'async-mutex';
2
+ import PromiseSocket from 'promise-socket';
3
+ import { Socket } from 'net';
4
+ import DeviceManager from "../devices";
5
+ import { Device, DeviceID, MediaSlot, TrackType } from "../types";
6
+ import { TelemetrySpan as Span } from "../utils/telemetry";
7
+ import { Response } from './message/types';
8
+ import { Message } from './message';
9
+ import { HandlerArgs, HandlerReturn, queryHandlers } from './queries';
10
+ type Await<T> = T extends PromiseLike<infer U> ? U : T;
11
+ /**
12
+ * Menu target specifies where a menu should be "rendered" This differs based
13
+ * on the request being made.
14
+ */
15
+ export declare enum MenuTarget {
16
+ Main = 1
17
+ }
18
+ /**
19
+ * Used to specify where to lookup data when making queries
20
+ */
21
+ export interface QueryDescriptor {
22
+ menuTarget: MenuTarget;
23
+ trackSlot: MediaSlot;
24
+ trackType: TrackType;
25
+ }
26
+ /**
27
+ * Used internally when making queries.
28
+ */
29
+ export type LookupDescriptor = QueryDescriptor & {
30
+ targetDevice: Device;
31
+ hostDevice: Device;
32
+ };
33
+ /**
34
+ * Used to specify the query type that is being made
35
+ */
36
+ export type Query = keyof typeof queryHandlers;
37
+ export declare const Query: {
38
+ readonly [x: number]: string;
39
+ readonly GetMetadata: import("./message/types").DataRequest.GetMetadata;
40
+ readonly GetArtwork: import("./message/types").DataRequest.GetArtwork;
41
+ readonly GetWaveformPreview: import("./message/types").DataRequest.GetWaveformPreview;
42
+ readonly GetTrackInfo: import("./message/types").DataRequest.GetTrackInfo;
43
+ readonly GetGenericMetadata: import("./message/types").DataRequest.GetGenericMetadata;
44
+ readonly GetCueAndLoops: import("./message/types").DataRequest.GetCueAndLoops;
45
+ readonly GetBeatGrid: import("./message/types").DataRequest.GetBeatGrid;
46
+ readonly GetWaveformDetailed: import("./message/types").DataRequest.GetWaveformDetailed;
47
+ readonly GetAdvCueAndLoops: import("./message/types").DataRequest.GetAdvCueAndLoops;
48
+ readonly GetWaveformHD: import("./message/types").DataRequest.GetWaveformHD;
49
+ readonly MenuRoot: import("./message/types").MenuRequest.MenuRoot;
50
+ readonly MenuGenre: import("./message/types").MenuRequest.MenuGenre;
51
+ readonly MenuArtist: import("./message/types").MenuRequest.MenuArtist;
52
+ readonly MenuAlbum: import("./message/types").MenuRequest.MenuAlbum;
53
+ readonly MenuTrack: import("./message/types").MenuRequest.MenuTrack;
54
+ readonly MenuBPM: import("./message/types").MenuRequest.MenuBPM;
55
+ readonly MenuRating: import("./message/types").MenuRequest.MenuRating;
56
+ readonly MenuYear: import("./message/types").MenuRequest.MenuYear;
57
+ readonly MenuLabel: import("./message/types").MenuRequest.MenuLabel;
58
+ readonly MenuColor: import("./message/types").MenuRequest.MenuColor;
59
+ readonly MenuTime: import("./message/types").MenuRequest.MenuTime;
60
+ readonly MenuBitrate: import("./message/types").MenuRequest.MenuBitrate;
61
+ readonly MenuHistory: import("./message/types").MenuRequest.MenuHistory;
62
+ readonly MenuFilename: import("./message/types").MenuRequest.MenuFilename;
63
+ readonly MenuKey: import("./message/types").MenuRequest.MenuKey;
64
+ readonly MenuOriginalArtist: import("./message/types").MenuRequest.MenuOriginalArtist;
65
+ readonly MenuRemixer: import("./message/types").MenuRequest.MenuRemixer;
66
+ readonly MenuPlaylist: import("./message/types").MenuRequest.MenuPlaylist;
67
+ readonly MenuArtistsOfGenre: import("./message/types").MenuRequest.MenuArtistsOfGenre;
68
+ readonly MenuAlbumsOfArtist: import("./message/types").MenuRequest.MenuAlbumsOfArtist;
69
+ readonly MenuTracksOfAlbum: import("./message/types").MenuRequest.MenuTracksOfAlbum;
70
+ readonly MenuTracksOfRating: import("./message/types").MenuRequest.MenuTracksOfRating;
71
+ readonly MenuYearsOfDecade: import("./message/types").MenuRequest.MenuYearsOfDecade;
72
+ readonly MenuArtistsOfLabel: import("./message/types").MenuRequest.MenuArtistsOfLabel;
73
+ readonly MenuTracksOfColor: import("./message/types").MenuRequest.MenuTracksOfColor;
74
+ readonly MenuTracksOfTime: import("./message/types").MenuRequest.MenuTracksOfTime;
75
+ readonly MenuTracksOfHistory: import("./message/types").MenuRequest.MenuTracksOfHistory;
76
+ readonly MenuDistancesOfKey: import("./message/types").MenuRequest.MenuDistancesOfKey;
77
+ readonly MenuAlbumsOfOriginalArtist: import("./message/types").MenuRequest.MenuAlbumsOfOriginalArtist;
78
+ readonly MenuAlbumsOfRemixer: import("./message/types").MenuRequest.MenuAlbumsOfRemixer;
79
+ readonly MenuAlbumsOfGenreAndArtist: import("./message/types").MenuRequest.MenuAlbumsOfGenreAndArtist;
80
+ readonly MenuTracksOfArtistAndAlbum: import("./message/types").MenuRequest.MenuTracksOfArtistAndAlbum;
81
+ readonly MenuTracksOfBPMPercentRange: import("./message/types").MenuRequest.MenuTracksOfBPMPercentRange;
82
+ readonly MenuTracksOfDecadeAndYear: import("./message/types").MenuRequest.MenuTracksOfDecadeAndYear;
83
+ readonly MenuAlbumsOfLabelAndArtist: import("./message/types").MenuRequest.MenuAlbumsOfLabelAndArtist;
84
+ readonly MenuTracksNearKey: import("./message/types").MenuRequest.MenuTracksNearKey;
85
+ readonly MenuTracksOfOriginalArtistAndAlbum: import("./message/types").MenuRequest.MenuTracksOfOriginalArtistAndAlbum;
86
+ readonly MenuTracksOfRemixerAndAlbum: import("./message/types").MenuRequest.MenuTracksOfRemixerAndAlbum;
87
+ readonly MenuTracksOfGenreArtistAndAlbum: import("./message/types").MenuRequest.MenuTracksOfGenreArtistAndAlbum;
88
+ readonly MenuTracksOfLabelArtistAndAlbum: import("./message/types").MenuRequest.MenuTracksOfLabelArtistAndAlbum;
89
+ readonly MenuSearch: import("./message/types").MenuRequest.MenuSearch;
90
+ readonly MenuFolder: import("./message/types").MenuRequest.MenuFolder;
91
+ readonly Introduce: import("./message/types").ControlRequest.Introduce;
92
+ readonly Disconnect: import("./message/types").ControlRequest.Disconnect;
93
+ readonly RenderMenu: import("./message/types").ControlRequest.RenderMenu;
94
+ };
95
+ /**
96
+ * Returns a string representation of a remote query
97
+ */
98
+ export declare function getQueryName(query: Query): string;
99
+ /**
100
+ * Options used to make a remotedb query
101
+ */
102
+ interface QueryOpts<T extends Query> {
103
+ queryDescriptor: QueryDescriptor;
104
+ /**
105
+ * The query type to make
106
+ */
107
+ query: T;
108
+ /**
109
+ * Arguments to pass to the query. These are query specific
110
+ */
111
+ args: HandlerArgs<T>;
112
+ /**
113
+ * The sentry span to associate the query with
114
+ */
115
+ span?: Span;
116
+ }
117
+ /**
118
+ * Manages a connection to a single device
119
+ */
120
+ export declare class Connection {
121
+ #private;
122
+ device: Device;
123
+ constructor(device: Device, socket: PromiseSocket<Socket>);
124
+ writeMessage(message: Message, span: Span): Promise<void>;
125
+ readMessage<T extends Response>(expect: T, span: Span): Promise<Message<T>>;
126
+ close(): void;
127
+ }
128
+ export declare class QueryInterface {
129
+ #private;
130
+ constructor(conn: Connection, lock: Mutex, hostDevice: Device);
131
+ /**
132
+ * Make a query to the remote database connection.
133
+ */
134
+ query<T extends Query>(opts: QueryOpts<T>): Promise<Await<HandlerReturn<T>>>;
135
+ }
136
+ /**
137
+ * Service that maintains remote database connections with devices on the network.
138
+ */
139
+ export default class RemoteDatabase {
140
+ #private;
141
+ constructor(deviceManager: DeviceManager, hostDevice: Device);
142
+ /**
143
+ * Open a connection to the specified device for querying
144
+ */
145
+ connectToDevice: (device: Device) => Promise<void>;
146
+ /**
147
+ * Disconnect from the specified device
148
+ */
149
+ disconnectFromDevice: (device: Device) => Promise<void>;
150
+ /**
151
+ * Gets the remote database query interface for the given device.
152
+ *
153
+ * If we have not already established a connection with the specified device,
154
+ * we will attempt to first connect.
155
+ *
156
+ * @returns null if the device does not export a remote database service
157
+ */
158
+ get(deviceId: DeviceID): Promise<QueryInterface | null>;
159
+ }
160
+ export {};
@@ -0,0 +1,39 @@
1
+ import { TelemetrySpan as Span } from "../../utils/telemetry";
2
+ import { PromiseReadable } from 'promise-readable';
3
+ import { Field } from "../fields";
4
+ import { responseTransform } from "./response";
5
+ import { MessageType, Response } from "./types";
6
+ interface Options<T extends MessageType> {
7
+ transactionId?: number;
8
+ type: T;
9
+ args: Field[];
10
+ }
11
+ type ResponseType<T> = T extends Response ? T : never;
12
+ type Data<T> = ReturnType<(typeof responseTransform)[ResponseType<T>]>;
13
+ /**
14
+ * Representation of a set of fields sequenced into a known message format.
15
+ */
16
+ export declare class Message<T extends MessageType = MessageType> {
17
+ /**
18
+ * Read a single mesasge via a readable stream
19
+ */
20
+ static fromStream<T extends Response>(stream: PromiseReadable<any>, expect: T, span: Span): Promise<Message<T>>;
21
+ /**
22
+ * The transaction ID is used to associate responses to their requests.
23
+ */
24
+ transactionId?: number;
25
+ readonly type: T;
26
+ readonly args: Field[];
27
+ constructor({ transactionId, type, args }: Options<T>);
28
+ /**
29
+ * The byte serialization of the message
30
+ */
31
+ get buffer(): Buffer<ArrayBuffer>;
32
+ /**
33
+ * The JS representation of the message.
34
+ *
35
+ * Currently only supports representing response messages.
36
+ */
37
+ get data(): Data<T>;
38
+ }
39
+ export {};