djay-connect 2.0.0 → 2.2.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/dist/djayConnect.d.ts +8 -1
- package/dist/djayConnect.js +43 -19
- package/dist/djayConnect.js.map +1 -1
- package/dist/sources.d.ts +1 -1
- package/dist/sources.js +8 -0
- package/dist/sources.js.map +1 -1
- package/dist/tsaf.d.ts +6 -1
- package/dist/tsaf.js +9 -4
- package/dist/tsaf.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +12 -3
- package/package.json +13 -2
package/dist/djayConnect.d.ts
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* polls that collection for new rows, parses each row's TSAF blob, and emits
|
|
7
7
|
* `track` events as they arrive. The same schema is used on macOS and Windows.
|
|
8
8
|
*/
|
|
9
|
-
import type { DjayConnectOptions, TypedEmitter } from
|
|
9
|
+
import type { DjayConnectOptions, TypedEmitter } from "./types.js";
|
|
10
10
|
declare const DjayConnect_base: new () => TypedEmitter;
|
|
11
11
|
/**
|
|
12
12
|
* DjayConnect monitors djay Pro's MediaLibrary.db for new history entries
|
|
@@ -29,6 +29,13 @@ export declare class DjayConnect extends DjayConnect_base {
|
|
|
29
29
|
get path(): string;
|
|
30
30
|
private openDatabase;
|
|
31
31
|
private poll;
|
|
32
|
+
/**
|
|
33
|
+
* Return the highest rowid currently present in `historySessionItems`, or 0
|
|
34
|
+
* when the collection is empty. Used to pin the poll cursor at start() so
|
|
35
|
+
* pre-existing history is never replayed as live playback — even when the
|
|
36
|
+
* latest row's blob fails to parse.
|
|
37
|
+
*/
|
|
38
|
+
private readMaxHistoryRowId;
|
|
32
39
|
private readLatestHistoryItem;
|
|
33
40
|
private toTrack;
|
|
34
41
|
/**
|
package/dist/djayConnect.js
CHANGED
|
@@ -23,12 +23,12 @@ const logger_js_1 = require("./types/logger.js");
|
|
|
23
23
|
* djay URL-encodes backslashes (`%5C`) and spaces (`%20`) on Windows.
|
|
24
24
|
*/
|
|
25
25
|
function fileUriToPath(uri) {
|
|
26
|
-
if (!uri.startsWith(
|
|
26
|
+
if (!uri.startsWith("file://"))
|
|
27
27
|
return undefined;
|
|
28
28
|
// Strip the scheme + the authority slashes; on Windows the authority is
|
|
29
29
|
// empty and the path begins with a drive letter, e.g. "file:///D:%5C..."
|
|
30
|
-
let path = uri.slice(
|
|
31
|
-
if (path.startsWith(
|
|
30
|
+
let path = uri.slice("file://".length);
|
|
31
|
+
if (path.startsWith("/") && /^\/[A-Za-z]:/.test(path)) {
|
|
32
32
|
path = path.slice(1);
|
|
33
33
|
}
|
|
34
34
|
try {
|
|
@@ -39,8 +39,8 @@ function fileUriToPath(uri) {
|
|
|
39
39
|
}
|
|
40
40
|
// On Windows, normalize forward slashes that came from URL decoding into
|
|
41
41
|
// backslashes so the path is usable by fs.readFile etc.
|
|
42
|
-
if (process.platform ===
|
|
43
|
-
path = path.replace(/\//g,
|
|
42
|
+
if (process.platform === "win32") {
|
|
43
|
+
path = path.replace(/\//g, "\\");
|
|
44
44
|
}
|
|
45
45
|
return path;
|
|
46
46
|
}
|
|
@@ -70,21 +70,29 @@ class DjayConnect extends node_events_1.default {
|
|
|
70
70
|
}
|
|
71
71
|
catch (err) {
|
|
72
72
|
const error = err instanceof Error ? err : new Error(String(err));
|
|
73
|
-
this.logger.error(
|
|
74
|
-
this.emit(
|
|
73
|
+
this.logger.error("Failed to open djay Pro database: %s", error.message);
|
|
74
|
+
this.emit("error", error);
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
77
|
this.isRunning = true;
|
|
78
78
|
this.logger.info(`Watching djay Pro library at ${this.databasePath}`);
|
|
79
|
-
this.emit(
|
|
80
|
-
//
|
|
79
|
+
this.emit("ready", { databasePath: this.databasePath });
|
|
80
|
+
// Pin the poll cursor to the highest existing rowid BEFORE anything else.
|
|
81
|
+
// Using a dedicated MAX(rowid) query (rather than inferring it from the
|
|
82
|
+
// parsed latest row) guarantees the cursor is seeded even when the most
|
|
83
|
+
// recent row fails to parse — otherwise lastRowId would stay 0 and the very
|
|
84
|
+
// first poll would replay the entire history backlog as if every old track
|
|
85
|
+
// were playing right now.
|
|
86
|
+
this.lastRowId = this.readMaxHistoryRowId();
|
|
87
|
+
// Emit the most-recent row as the initial "current" track, flagged with
|
|
88
|
+
// `isInitial` so consumers can tell it apart from live plays: it is whatever
|
|
89
|
+
// was already in djay Pro's history when monitoring began, not a new play.
|
|
81
90
|
const initial = this.readLatestHistoryItem();
|
|
82
91
|
if (initial) {
|
|
83
|
-
this.lastRowId = initial.rowid;
|
|
84
92
|
const track = this.toTrack(initial.fields);
|
|
85
93
|
if (track) {
|
|
86
94
|
this.logger.debug(`Initial track: ${track.artist} - ${track.title} [deck ${track.deckNumber}]`);
|
|
87
|
-
this.emit(
|
|
95
|
+
this.emit("track", { track, isInitial: true });
|
|
88
96
|
}
|
|
89
97
|
}
|
|
90
98
|
this.pollTimer = setInterval(() => this.poll(), this.pollIntervalMs);
|
|
@@ -99,13 +107,13 @@ class DjayConnect extends node_events_1.default {
|
|
|
99
107
|
this.db.close();
|
|
100
108
|
}
|
|
101
109
|
catch (err) {
|
|
102
|
-
this.logger.warn(
|
|
110
|
+
this.logger.warn("Error closing database: %s", String(err));
|
|
103
111
|
}
|
|
104
112
|
this.db = null;
|
|
105
113
|
}
|
|
106
114
|
this.lastRowId = 0;
|
|
107
115
|
this.isRunning = false;
|
|
108
|
-
this.logger.debug(
|
|
116
|
+
this.logger.debug("Stopped");
|
|
109
117
|
}
|
|
110
118
|
get running() {
|
|
111
119
|
return this.isRunning;
|
|
@@ -135,13 +143,13 @@ class DjayConnect extends node_events_1.default {
|
|
|
135
143
|
// djay Pro keeps the database in WAL mode while running. Enabling
|
|
136
144
|
// read_uncommitted lets us observe writes that haven't been checkpointed
|
|
137
145
|
// yet, so new history rows appear in near real time.
|
|
138
|
-
this.db.pragma(
|
|
146
|
+
this.db.pragma("read_uncommitted = true");
|
|
139
147
|
}
|
|
140
148
|
poll() {
|
|
141
149
|
if (!this.db)
|
|
142
150
|
return;
|
|
143
151
|
try {
|
|
144
|
-
this.emit(
|
|
152
|
+
this.emit("poll");
|
|
145
153
|
const rows = this.db
|
|
146
154
|
.prepare(`SELECT rowid, key, data
|
|
147
155
|
FROM database2
|
|
@@ -160,15 +168,31 @@ class DjayConnect extends node_events_1.default {
|
|
|
160
168
|
if (!track)
|
|
161
169
|
continue;
|
|
162
170
|
this.logger.debug(`New track: ${track.artist} - ${track.title} [deck ${track.deckNumber}]`);
|
|
163
|
-
this.emit(
|
|
171
|
+
this.emit("track", { track });
|
|
164
172
|
}
|
|
165
173
|
}
|
|
166
174
|
catch (err) {
|
|
167
175
|
const error = err instanceof Error ? err : new Error(String(err));
|
|
168
|
-
this.logger.error(
|
|
169
|
-
this.emit(
|
|
176
|
+
this.logger.error("Poll error: %s", error.message);
|
|
177
|
+
this.emit("error", error);
|
|
170
178
|
}
|
|
171
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* Return the highest rowid currently present in `historySessionItems`, or 0
|
|
182
|
+
* when the collection is empty. Used to pin the poll cursor at start() so
|
|
183
|
+
* pre-existing history is never replayed as live playback — even when the
|
|
184
|
+
* latest row's blob fails to parse.
|
|
185
|
+
*/
|
|
186
|
+
readMaxHistoryRowId() {
|
|
187
|
+
if (!this.db)
|
|
188
|
+
return 0;
|
|
189
|
+
const row = this.db
|
|
190
|
+
.prepare(`SELECT MAX(rowid) AS maxRowId
|
|
191
|
+
FROM database2
|
|
192
|
+
WHERE collection = 'historySessionItems'`)
|
|
193
|
+
.get();
|
|
194
|
+
return row?.maxRowId ?? 0;
|
|
195
|
+
}
|
|
172
196
|
readLatestHistoryItem() {
|
|
173
197
|
if (!this.db)
|
|
174
198
|
return null;
|
|
@@ -208,7 +232,7 @@ class DjayConnect extends node_events_1.default {
|
|
|
208
232
|
if (uris.length > 0) {
|
|
209
233
|
track.sourceURIs = uris;
|
|
210
234
|
for (const uri of uris) {
|
|
211
|
-
if (uri.startsWith(
|
|
235
|
+
if (uri.startsWith("file://")) {
|
|
212
236
|
const decoded = fileUriToPath(uri);
|
|
213
237
|
if (decoded) {
|
|
214
238
|
track.filePath = decoded;
|
package/dist/djayConnect.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"djayConnect.js","sourceRoot":"","sources":["../src/djayConnect.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;AAEH,8DAAuC;AACvC,qCAAqC;AACrC,sGAEyC;AACzC,2CAAqD;AACrD,uCAImB;AACnB,iDAA4D;AAY5D;;;GAGG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACjD,wEAAwE;IACxE,yEAAyE;IACzE,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACvC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,CAAC;QACH,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,yEAAyE;IACzE,wDAAwD;IACxD,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACjC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAC/B,MAAM,qBAAqB,GAAG,IAAI,CAAC;AAQnC;;;GAGG;AACH,MAAa,WAAY,SAAS,qBAAuC;IASvE,YAAY,UAA8B,EAAE;QAC1C,KAAK,EAAE,CAAC;QANF,OAAE,GAAgC,IAAI,CAAC;QACvC,cAAS,GAA0C,IAAI,CAAC;QACxD,cAAS,GAAW,CAAC,CAAC;QACtB,cAAS,GAAY,KAAK,CAAC;QAIjC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,sBAAU,CAAC;QAC3C,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAA,kCAAsB,GAAE,CAAC;QACrE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAC5B,OAAO,CAAC,cAAc,IAAI,qBAAqB,EAC/C,iBAAiB,CAClB,CAAC;IACJ,CAAC;IAED,KAAK;QACH,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YACzE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gCAAgC,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QACtE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAExD,
|
|
1
|
+
{"version":3,"file":"djayConnect.js","sourceRoot":"","sources":["../src/djayConnect.ts"],"names":[],"mappings":"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"}
|
package/dist/sources.d.ts
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* Inferred: beatsource, tidal, applemusic
|
|
12
12
|
*/
|
|
13
13
|
/** Every track source djay Pro is known (or believed) to support. */
|
|
14
|
-
export type DjayOriginSourceID = 'explorer' | 'music' | 'beatport' | 'beatsource' | 'soundcloud' | 'spotify' | 'tidal' | 'applemusic';
|
|
14
|
+
export type DjayOriginSourceID = 'explorer' | 'music' | 'beatport' | 'beatsource' | 'soundcloud' | 'spotify' | 'tidal' | 'applemusic' | 'youtube';
|
|
15
15
|
export interface DjaySourceInfo {
|
|
16
16
|
/** The originSourceID string as written by djay Pro. */
|
|
17
17
|
id: DjayOriginSourceID;
|
package/dist/sources.js
CHANGED
|
@@ -74,6 +74,13 @@ exports.DJAY_SOURCES = {
|
|
|
74
74
|
label: 'Apple Music',
|
|
75
75
|
uriSchemePrefix: 'applemusic:track:',
|
|
76
76
|
},
|
|
77
|
+
youtube: {
|
|
78
|
+
id: 'youtube',
|
|
79
|
+
observed: false,
|
|
80
|
+
kind: 'streaming',
|
|
81
|
+
label: 'YouTube',
|
|
82
|
+
uriSchemePrefix: 'youtube:video:',
|
|
83
|
+
},
|
|
77
84
|
};
|
|
78
85
|
/**
|
|
79
86
|
* Returns true if the given `originSourceID` represents a streaming service
|
|
@@ -105,6 +112,7 @@ function toNowPlayingStreamingSource(id) {
|
|
|
105
112
|
case 'spotify':
|
|
106
113
|
case 'beatsource':
|
|
107
114
|
case 'applemusic':
|
|
115
|
+
case 'youtube':
|
|
108
116
|
return 'streaming-direct-play';
|
|
109
117
|
default:
|
|
110
118
|
return undefined;
|
package/dist/sources.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../src/sources.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;
|
|
1
|
+
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../src/sources.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAsGH,8CAIC;AASD,kEAwBC;AA7GD;;;GAGG;AACU,QAAA,YAAY,GAA+C;IACtE,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU;QACd,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,eAAe;KACvB;IACD,KAAK,EAAE;QACL,EAAE,EAAE,OAAO;QACX,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,kBAAkB;KAC1B;IACD,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU;QACd,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,UAAU;QACjB,eAAe,EAAE,iBAAiB;KACnC;IACD,UAAU,EAAE;QACV,EAAE,EAAE,YAAY;QAChB,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,YAAY;QACnB,eAAe,EAAE,mBAAmB;KACrC;IACD,UAAU,EAAE;QACV,EAAE,EAAE,YAAY;QAChB,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,YAAY;QACnB,eAAe,EAAE,oBAAoB;KACtC;IACD,OAAO,EAAE;QACP,EAAE,EAAE,SAAS;QACb,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,SAAS;QAChB,eAAe,EAAE,gBAAgB;KAClC;IACD,KAAK,EAAE;QACL,EAAE,EAAE,OAAO;QACX,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,OAAO;QACd,eAAe,EAAE,cAAc;KAChC;IACD,UAAU,EAAE;QACV,EAAE,EAAE,YAAY;QAChB,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,aAAa;QACpB,eAAe,EAAE,mBAAmB;KACrC;IACD,OAAO,EAAE;QACP,EAAE,EAAE,SAAS;QACb,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,SAAS;QAChB,eAAe,EAAE,gBAAgB;KAClC;CACF,CAAC;AAEF;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,EAAsB;IACtD,IAAI,CAAC,EAAE;QAAE,OAAO,KAAK,CAAC;IACtB,MAAM,IAAI,GAAG,oBAAY,CAAC,EAAwB,CAAC,CAAC;IACpD,OAAO,IAAI,EAAE,IAAI,KAAK,WAAW,CAAC;AACpC,CAAC;AAED;;;;;;GAMG;AACH,SAAgB,2BAA2B,CACzC,EAAsB;IAOtB,IAAI,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAC1B,QAAQ,EAAE,EAAE,CAAC;QACX,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,YAAY;YACf,OAAO,YAAY,CAAC;QACtB,KAAK,SAAS,CAAC;QACf,KAAK,YAAY,CAAC;QAClB,KAAK,YAAY,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,uBAAuB,CAAC;QACjC;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
|
package/dist/tsaf.d.ts
CHANGED
|
@@ -52,7 +52,12 @@ export interface DjayHistoryItemFields {
|
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
54
|
* Parse a historySessionItems blob into a typed record.
|
|
55
|
-
*
|
|
55
|
+
*
|
|
56
|
+
* Returns `null` only when the item names neither a title nor an artist, since
|
|
57
|
+
* there is nothing to report about such a row. An item carrying just one of the
|
|
58
|
+
* two is kept: a music video — or any file whose tags were never filled in —
|
|
59
|
+
* routinely has a title and no artist, and requiring both here silently dropped
|
|
60
|
+
* every one of those plays before it could reach the caller (NP3-381).
|
|
56
61
|
*/
|
|
57
62
|
export declare function parseHistorySessionItem(blob: Buffer): DjayHistoryItemFields | null;
|
|
58
63
|
/**
|
package/dist/tsaf.js
CHANGED
|
@@ -136,12 +136,17 @@ function extractTitleID(blob) {
|
|
|
136
136
|
}
|
|
137
137
|
/**
|
|
138
138
|
* Parse a historySessionItems blob into a typed record.
|
|
139
|
-
*
|
|
139
|
+
*
|
|
140
|
+
* Returns `null` only when the item names neither a title nor an artist, since
|
|
141
|
+
* there is nothing to report about such a row. An item carrying just one of the
|
|
142
|
+
* two is kept: a music video — or any file whose tags were never filled in —
|
|
143
|
+
* routinely has a title and no artist, and requiring both here silently dropped
|
|
144
|
+
* every one of those plays before it could reach the caller (NP3-381).
|
|
140
145
|
*/
|
|
141
146
|
function parseHistorySessionItem(blob) {
|
|
142
147
|
const title = extractString(blob, 'title');
|
|
143
148
|
const artist = extractString(blob, 'artist');
|
|
144
|
-
if (!title
|
|
149
|
+
if (!title && !artist)
|
|
145
150
|
return null;
|
|
146
151
|
const uuid = extractString(blob, 'uuid') ?? '';
|
|
147
152
|
const sessionUUID = extractString(blob, 'sessionUUID') ?? '';
|
|
@@ -156,8 +161,8 @@ function parseHistorySessionItem(blob) {
|
|
|
156
161
|
uuid,
|
|
157
162
|
sessionUUID,
|
|
158
163
|
titleID,
|
|
159
|
-
title,
|
|
160
|
-
artist,
|
|
164
|
+
title: title ?? '',
|
|
165
|
+
artist: artist ?? '',
|
|
161
166
|
duration,
|
|
162
167
|
deckNumber,
|
|
163
168
|
startTime,
|
package/dist/tsaf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tsaf.js","sourceRoot":"","sources":["../src/tsaf.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;GAkBG;;AAwDH,sCAIC;AAED,sCAIC;AAED,kCAMC;AAcD,wCAiBC;
|
|
1
|
+
{"version":3,"file":"tsaf.js","sourceRoot":"","sources":["../src/tsaf.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/detect.ts","../src/
|
|
1
|
+
{"root":["../src/detect.ts","../src/djayConnect.ts","../src/index.ts","../src/sources.ts","../src/tsaf.ts","../src/types.ts","../src/types/logger.ts"],"version":"5.9.3"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import EventEmitter from
|
|
2
|
-
import type { StrictEventEmitter } from
|
|
3
|
-
import type { Logger } from
|
|
1
|
+
import EventEmitter from "node:events";
|
|
2
|
+
import type { StrictEventEmitter } from "strict-event-emitter-types";
|
|
3
|
+
import type { Logger } from "./types/logger.js";
|
|
4
4
|
/**
|
|
5
5
|
* Configuration options for DjayConnect.
|
|
6
6
|
*/
|
|
@@ -70,6 +70,15 @@ export type DjayReadyInfo = {
|
|
|
70
70
|
export type DjayTrackPayload = {
|
|
71
71
|
/** The track that was detected */
|
|
72
72
|
track: DjayNowPlayingTrack;
|
|
73
|
+
/**
|
|
74
|
+
* True only for the seed track emitted synchronously on `start()`. It is the
|
|
75
|
+
* most-recent pre-existing history row — i.e. whatever was already playing or
|
|
76
|
+
* last played when monitoring began — not a new play. Consumers that
|
|
77
|
+
* broadcast live plays (overlay, Twitch, Discord) should skip it so a fresh
|
|
78
|
+
* connection never re-announces a stale track. Absent (falsy) for every
|
|
79
|
+
* genuinely new play detected by polling.
|
|
80
|
+
*/
|
|
81
|
+
isInitial?: boolean;
|
|
73
82
|
};
|
|
74
83
|
/**
|
|
75
84
|
* Events emitted by DjayConnect.
|
package/package.json
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "djay-connect",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Library to read djay Pro's MediaLibrary.db and emit track change events",
|
|
5
5
|
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/chrisle/djay-connect.git"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/chrisle/djay-connect",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/chrisle/djay-connect/issues"
|
|
13
|
+
},
|
|
6
14
|
"private": false,
|
|
7
15
|
"type": "commonjs",
|
|
8
16
|
"main": "dist/index.js",
|
|
@@ -34,7 +42,7 @@
|
|
|
34
42
|
"node": ">=22.0.0"
|
|
35
43
|
},
|
|
36
44
|
"dependencies": {
|
|
37
|
-
"better-sqlite3-multiple-ciphers": "^
|
|
45
|
+
"better-sqlite3-multiple-ciphers": "^12.9.0",
|
|
38
46
|
"strict-event-emitter-types": "^2.0.0"
|
|
39
47
|
},
|
|
40
48
|
"devDependencies": {
|
|
@@ -47,5 +55,8 @@
|
|
|
47
55
|
},
|
|
48
56
|
"overrides": {
|
|
49
57
|
"rollup": ">=4.59.0"
|
|
58
|
+
},
|
|
59
|
+
"allowScripts": {
|
|
60
|
+
"better-sqlite3-multiple-ciphers": true
|
|
50
61
|
}
|
|
51
62
|
}
|