@discord-player/plugin-host 8.0.0-dev.0 → 8.0.0-dev.2
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/README.md +199 -29
- package/dist/compat/base-extractor.d.ts +6 -0
- package/dist/compat/base-extractor.js.map +1 -1
- package/dist/compat/extractor-execution-context.js.map +1 -1
- package/dist/compat/extractor-plugin.js +109 -68
- package/dist/compat/extractor-plugin.js.map +1 -1
- package/dist/compat/utils.js.map +1 -1
- package/dist/errors.d.ts +0 -2
- package/dist/errors.js +0 -2
- package/dist/errors.js.map +1 -1
- package/dist/host.d.ts +24 -3
- package/dist/host.js +198 -50
- package/dist/host.js.map +1 -1
- package/dist/index.d.ts +5 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/legacy-player.d.ts +1 -1
- package/dist/lyrics.d.ts +56 -0
- package/dist/lyrics.js +110 -0
- package/dist/lyrics.js.map +1 -0
- package/dist/media.d.ts +15 -0
- package/dist/media.js +193 -0
- package/dist/media.js.map +1 -0
- package/dist/plugins/execution-options.d.ts +2 -0
- package/dist/plugins/operation-dispatch.js +30 -11
- package/dist/plugins/operation-dispatch.js.map +1 -1
- package/dist/plugins/plugin-error.js.map +1 -1
- package/dist/plugins/registry-internals.d.ts +2 -2
- package/dist/plugins/registry.d.ts +48 -6
- package/dist/plugins/registry.js +180 -18
- package/dist/plugins/registry.js.map +1 -1
- package/dist/plugins/stream-resolver.js +24 -4
- package/dist/plugins/stream-resolver.js.map +1 -1
- package/dist/plugins/types.d.ts +28 -23
- package/dist/plugins/types.js.map +1 -1
- package/dist/protocol.d.ts +43 -3
- package/dist/protocol.js +11 -1
- package/dist/protocol.js.map +1 -1
- package/dist/providers/lrclib.d.ts +120 -0
- package/dist/providers/lrclib.js +183 -0
- package/dist/providers/lrclib.js.map +1 -0
- package/dist/remote.d.ts +29 -0
- package/dist/remote.js +142 -0
- package/dist/remote.js.map +1 -0
- package/dist/runtime.d.ts +2 -8
- package/dist/runtime.js +42 -44
- package/dist/runtime.js.map +1 -1
- package/dist/structures/search-result.js.map +1 -1
- package/dist/structures/track-types.d.ts +7 -3
- package/dist/structures/track.d.ts +6 -11
- package/dist/structures/track.js +10 -10
- package/dist/structures/track.js.map +1 -1
- package/dist/types.d.ts +4 -4
- package/dist/utils/legacy-serialization-schemas.d.ts +12 -0
- package/dist/utils/serialization-schemas.d.ts +18 -0
- package/dist/utils/serialization-schemas.js +6 -1
- package/dist/utils/serialization-schemas.js.map +1 -1
- package/dist/utils/serialization.js.map +1 -1
- package/docs/remedia-contract.md +55 -0
- package/package.json +5 -4
package/dist/errors.js
CHANGED
|
@@ -4,8 +4,6 @@ export const DiscordPlayerErrorCode = {
|
|
|
4
4
|
QueueCapacity: 'ERR_QUEUE_CAPACITY',
|
|
5
5
|
/** A required queue, session, or track could not be resolved. */
|
|
6
6
|
NoResult: 'ERR_NO_RESULT',
|
|
7
|
-
/** The installed Remedia client does not provide a requested capability. */
|
|
8
|
-
UnsupportedRemediaCapability: 'ERR_UNSUPPORTED_REMEDIA_CAPABILITY',
|
|
9
7
|
/** A track has no source plugin to resolve a Remedia source. */
|
|
10
8
|
SourceUnavailable: 'ERR_SOURCE_UNAVAILABLE',
|
|
11
9
|
/** Data could not be serialized or reconstructed. */
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,wDAAwD;IACxD,aAAa,EAAE,oBAAoB;IACnC,iEAAiE;IACjE,QAAQ,EAAE,eAAe;IACzB,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,wDAAwD;IACxD,aAAa,EAAE,oBAAoB;IACnC,iEAAiE;IACjE,QAAQ,EAAE,eAAe;IACzB,gEAAgE;IAChE,iBAAiB,EAAE,wBAAwB;IAC3C,qDAAqD;IACrD,aAAa,EAAE,mBAAmB;CAC1B,CAAC;AAKX,8DAA8D;AAC9D,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,0CAA0C;IAC1B,IAAI,CAAyB;IAE7C;;;;;OAKG;IACH;IACE,kCAAkC;IAClC,OAAe;IACf,oCAAoC;IACpC,IAA4B;IAC5B,uCAAuC;IACvC,OAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,uFAAuF;AACvF,MAAM,OAAO,sBAAuB,SAAQ,kBAAkB;IAC5D;;;OAGG;IACH;IACE,4DAA4D;IAC5D,KAAa;QAEb,KAAK,CAAC,mDAAmD,KAAK,IAAI,EAAE,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;IAChH,CAAC;CACF;AAED,4EAA4E;AAC5E,MAAM,OAAO,kBAAmB,SAAQ,kBAAkB;IACxD;;;;OAIG;IACH;IACE,4CAA4C;IAC5C,OAAO,GAAG,uDAAuD;IACjE,uCAAuC;IACvC,OAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,sBAAsB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;CACF"}
|
package/dist/host.d.ts
CHANGED
|
@@ -1,12 +1,27 @@
|
|
|
1
|
+
import { type MediaAccessPolicy } from './media.js';
|
|
1
2
|
import { type PluginHostOptions, type PluginRequest, type ExecuteResult } from '@remedia/plugin-host';
|
|
2
3
|
import { SourcePluginRuntime, type SourcePluginRuntimeOptions } from './runtime.js';
|
|
3
4
|
/** Stable aggregate protocol registration identifier. */
|
|
4
5
|
export declare const SOURCE_PLUGIN_ID = "discord-player.source";
|
|
5
6
|
/** Standalone source host configuration. */
|
|
6
7
|
export interface SourcePluginHostOptions extends PluginHostOptions, Omit<SourcePluginRuntimeOptions, 'player'> {
|
|
7
|
-
/**
|
|
8
|
+
/** Stable non-secret deployment ID. Required for HTTP; generated only for local handle() usage. */
|
|
9
|
+
hostId?: string;
|
|
10
|
+
/** Return provider URLs directly when no byte transforms are needed. Default proxy.
|
|
11
|
+
* Opt in only when the consuming node can enforce its own DNS/redirect policy and access these URLs.
|
|
12
|
+
* Declared URL-only providers resolve at source.stream invocation; all byte sources remain deferred.
|
|
13
|
+
*/
|
|
14
|
+
mediaDelivery?: 'proxy' | 'direct-url';
|
|
15
|
+
/** Providers guaranteed to return only URLs without opening byte resources during track.stream.
|
|
16
|
+
* Required for direct URL optimization; other providers stay lazy. Applicable transforms always force proxying.
|
|
17
|
+
* A provider that violates this promise fails explicitly; legacy and mixed-source providers should be omitted.
|
|
18
|
+
*/
|
|
19
|
+
directUrlProviders?: readonly string[];
|
|
20
|
+
/** Remote materialization policy; files and private networks are denied by default. */
|
|
21
|
+
mediaPolicy?: MediaAccessPolicy;
|
|
22
|
+
/** Maximum retained process-local Track references; default 1000. */
|
|
8
23
|
maxTrackStates?: number;
|
|
9
|
-
/** State lifetime in milliseconds; default
|
|
24
|
+
/** State lifetime in milliseconds; default ten minutes. Expired tracks are reconstructed by URL. */
|
|
10
25
|
trackStateTtlMs?: number;
|
|
11
26
|
}
|
|
12
27
|
/** Source runtime and the published Remedia transport sharing one set of handlers. */
|
|
@@ -19,6 +34,11 @@ export declare class SourcePluginHost {
|
|
|
19
34
|
readonly extractors: import("./index.js").ExtractorExecutionContext;
|
|
20
35
|
/** Underlying generic host; exposes discovery, middleware matching and transport. */
|
|
21
36
|
readonly remedia: import("@remedia/plugin-host").PluginHost<import("@remedia/plugin-host").PluginOperations>;
|
|
37
|
+
/** Stable deployment identity, independent of provider identifiers and network addresses. */
|
|
38
|
+
readonly hostId: string;
|
|
39
|
+
private readonly mediaPolicy;
|
|
40
|
+
private readonly sweep;
|
|
41
|
+
private readonly explicitHostId;
|
|
22
42
|
private boundary;
|
|
23
43
|
private states;
|
|
24
44
|
private ttl;
|
|
@@ -33,12 +53,13 @@ export declare class SourcePluginHost {
|
|
|
33
53
|
private prune;
|
|
34
54
|
private portable;
|
|
35
55
|
private restore;
|
|
56
|
+
private assertHost;
|
|
36
57
|
/** Execute directly without serialization; caller owns returned media.
|
|
37
58
|
* @param request Generic Remedia request targeting discord-player.source.
|
|
38
59
|
*/
|
|
39
60
|
handle(request: PluginRequest): Promise<ExecuteResult>;
|
|
40
61
|
/** Execute HTTP through Remedia's transport and the same operation handlers.
|
|
41
|
-
* @param request Fetch request.
|
|
62
|
+
* @param request Fetch request. An explicitly configured hostId is required even without publicUrl.
|
|
42
63
|
*/
|
|
43
64
|
fetch(request: Request): Promise<Response>;
|
|
44
65
|
/** Identify Remedia routes for Node middleware.
|
package/dist/host.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
import { normalizeLyrics } from './lyrics.js';
|
|
2
|
+
import { authorizeMediaURL, openMedia } from './media.js';
|
|
1
3
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
4
|
import { randomUUID } from 'node:crypto';
|
|
3
|
-
import { createReadStream } from 'node:fs';
|
|
4
|
-
import { Readable } from 'node:stream';
|
|
5
5
|
import { createMediaSource, createPluginHost, } from '@remedia/plugin-host';
|
|
6
6
|
import { SourcePluginRuntime } from './runtime.js';
|
|
7
7
|
import { Track } from './structures/track.js';
|
|
8
8
|
import { deserialize } from './utils/serde.js';
|
|
9
|
+
import { DeferredSourceRequired } from './plugins/stream-resolver.js';
|
|
10
|
+
import { serializeSourceTrack } from './protocol.js';
|
|
9
11
|
import { cloneJSONValue } from './utils/serialization.js';
|
|
10
12
|
/** Stable aggregate protocol registration identifier. */
|
|
11
13
|
export const SOURCE_PLUGIN_ID = 'discord-player.source';
|
|
@@ -19,6 +21,11 @@ export class SourcePluginHost {
|
|
|
19
21
|
extractors;
|
|
20
22
|
/** Underlying generic host; exposes discovery, middleware matching and transport. */
|
|
21
23
|
remedia;
|
|
24
|
+
/** Stable deployment identity, independent of provider identifiers and network addresses. */
|
|
25
|
+
hostId;
|
|
26
|
+
mediaPolicy;
|
|
27
|
+
sweep;
|
|
28
|
+
explicitHostId;
|
|
22
29
|
boundary = new AsyncLocalStorage();
|
|
23
30
|
states = new Map();
|
|
24
31
|
ttl;
|
|
@@ -27,18 +34,72 @@ export class SourcePluginHost {
|
|
|
27
34
|
* @param options Transport and source settings.
|
|
28
35
|
*/
|
|
29
36
|
constructor(options) {
|
|
30
|
-
this.ttl = options.trackStateTtlMs ??
|
|
31
|
-
this.capacity = options.maxTrackStates ??
|
|
37
|
+
this.ttl = options.trackStateTtlMs ?? 600000;
|
|
38
|
+
this.capacity = options.maxTrackStates ?? 1000;
|
|
32
39
|
if (!Number.isSafeInteger(this.ttl) || this.ttl < 1 || !Number.isSafeInteger(this.capacity) || this.capacity < 1) {
|
|
33
40
|
throw new RangeError('Track state limits must be positive safe integers.');
|
|
34
41
|
}
|
|
35
|
-
this.
|
|
42
|
+
this.explicitHostId = options.hostId !== undefined;
|
|
43
|
+
if (options.publicUrl !== undefined && !this.explicitHostId)
|
|
44
|
+
throw new TypeError('HTTP source hosts require an explicit hostId');
|
|
45
|
+
this.hostId = options.hostId ?? randomUUID();
|
|
46
|
+
if (!/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,127}$/.test(this.hostId))
|
|
47
|
+
throw new TypeError('Invalid hostId');
|
|
48
|
+
this.mediaPolicy = { ...options.mediaPolicy };
|
|
49
|
+
this.remedia = createPluginHost(options);
|
|
50
|
+
this.runtime = new SourcePluginRuntime({ ...options, hostId: this.hostId });
|
|
51
|
+
this.sweep = setInterval(() => this.prune(), Math.max(1000, Math.min(this.ttl, 30000)));
|
|
52
|
+
this.sweep.unref();
|
|
36
53
|
this.plugins = this.runtime.plugins;
|
|
37
54
|
this.extractors = this.runtime.extractors;
|
|
38
|
-
this.remedia = createPluginHost(options);
|
|
39
55
|
this.remedia.register({
|
|
40
56
|
id: SOURCE_PLUGIN_ID,
|
|
41
57
|
operations: {
|
|
58
|
+
'metadata.execute': async (input, { signal }) => {
|
|
59
|
+
const request = this.record(input);
|
|
60
|
+
if (typeof request.providerId !== 'string')
|
|
61
|
+
throw new TypeError('providerId is required');
|
|
62
|
+
if (request.operation === 'search.query.resolve' || request.operation === 'search.query.match') {
|
|
63
|
+
const query = this.record(request.input);
|
|
64
|
+
if (typeof query.query !== 'string')
|
|
65
|
+
throw new TypeError('query must be a string');
|
|
66
|
+
const normalized = {
|
|
67
|
+
query: query.query,
|
|
68
|
+
options: this.searchOptions(query.options),
|
|
69
|
+
...(typeof query.protocol === 'string' ? { protocol: query.protocol } : {}),
|
|
70
|
+
...(typeof query.providerHint === 'string' ? { providerHint: query.providerHint } : {}),
|
|
71
|
+
};
|
|
72
|
+
if (request.operation === 'search.query.match')
|
|
73
|
+
return this.plugins.execute('search.query.match', normalized, { pluginId: request.providerId, signal });
|
|
74
|
+
const result = await this.plugins.execute('search.query.resolve', normalized, {
|
|
75
|
+
pluginId: request.providerId,
|
|
76
|
+
signal,
|
|
77
|
+
});
|
|
78
|
+
return result
|
|
79
|
+
? this.boundary.getStore()
|
|
80
|
+
? this.portable(result)
|
|
81
|
+
: result
|
|
82
|
+
: { tracks: [], playlist: null };
|
|
83
|
+
}
|
|
84
|
+
if (request.operation === 'track.related') {
|
|
85
|
+
const track = await this.restore(this.record(request.input).track, signal);
|
|
86
|
+
const result = await this.plugins.execute('track.related', { track }, { pluginId: request.providerId, signal });
|
|
87
|
+
return result
|
|
88
|
+
? this.boundary.getStore()
|
|
89
|
+
? this.portable(result)
|
|
90
|
+
: result
|
|
91
|
+
: { tracks: [], playlist: null };
|
|
92
|
+
}
|
|
93
|
+
if (request.operation === 'lyrics.search') {
|
|
94
|
+
const value = this.record(request.input).input;
|
|
95
|
+
const restored = typeof value === 'string' || value instanceof Track ? value : deserialize(value);
|
|
96
|
+
if (!(typeof restored === 'string' || restored instanceof Track))
|
|
97
|
+
throw new TypeError('Lyrics input must be a string or serialized Track');
|
|
98
|
+
const groups = await this.plugins.execute('lyrics.search', { input: restored }, { pluginId: request.providerId, signal });
|
|
99
|
+
return groups.map((group) => group?.map(normalizeLyrics) ?? null);
|
|
100
|
+
}
|
|
101
|
+
throw new Error('Unsupported metadata operation');
|
|
102
|
+
},
|
|
42
103
|
'source.search': async (input, { signal }) => {
|
|
43
104
|
const request = this.record(input);
|
|
44
105
|
if (typeof request.query !== 'string')
|
|
@@ -47,17 +108,6 @@ export class SourcePluginHost {
|
|
|
47
108
|
const result = await this.runtime.search(request.query, { ...hints, signal });
|
|
48
109
|
return this.boundary.getStore() ? this.portable(result) : result;
|
|
49
110
|
},
|
|
50
|
-
'source.resolve': async (input, { signal }) => {
|
|
51
|
-
const request = this.record(input);
|
|
52
|
-
if (typeof request.query !== 'string' || typeof request.pluginId !== 'string')
|
|
53
|
-
throw new TypeError('query and pluginId are required');
|
|
54
|
-
const result = await this.runtime.search(request.query, {
|
|
55
|
-
...this.searchOptions(request.options),
|
|
56
|
-
pluginId: request.pluginId,
|
|
57
|
-
signal,
|
|
58
|
-
});
|
|
59
|
-
return this.boundary.getStore() ? this.portable(result) : result;
|
|
60
|
-
},
|
|
61
111
|
'source.related': async (input, { signal }) => {
|
|
62
112
|
const track = await this.restore(this.record(input).track, signal);
|
|
63
113
|
const result = await this.plugins.execute('track.related', { track }, { pluginId: track.sourceReference?.pluginId, signal });
|
|
@@ -67,14 +117,50 @@ export class SourcePluginHost {
|
|
|
67
117
|
if (!this.boundary.getStore()) {
|
|
68
118
|
return this.plugins.resolveStream(await this.restore(this.record(input).track, signal), { signal });
|
|
69
119
|
}
|
|
70
|
-
|
|
71
|
-
const payload = cloneJSONValue(
|
|
120
|
+
const value = this.record(input).track;
|
|
121
|
+
const payload = cloneJSONValue(value instanceof Track ? serializeSourceTrack(value) : value);
|
|
122
|
+
const { sourceState: _state, ...entity } = this.record(payload);
|
|
123
|
+
const metadata = deserialize(entity);
|
|
124
|
+
if (!(metadata instanceof Track))
|
|
125
|
+
throw new TypeError('Expected a serialized Track');
|
|
126
|
+
this.assertHost(metadata);
|
|
127
|
+
const providerId = metadata.sourceReference?.pluginId;
|
|
128
|
+
await this.plugins.ready();
|
|
129
|
+
const registration = this.plugins.registrationSignal(providerId ?? '');
|
|
130
|
+
if (options.mediaDelivery === 'direct-url' &&
|
|
131
|
+
providerId &&
|
|
132
|
+
options.directUrlProviders?.includes(providerId) &&
|
|
133
|
+
!this.plugins.hasStreamTransforms(providerId)) {
|
|
134
|
+
try {
|
|
135
|
+
const track = await this.restore(payload, signal);
|
|
136
|
+
return await this.plugins.resolveStream(track, {
|
|
137
|
+
signal,
|
|
138
|
+
directUrlOnly: true,
|
|
139
|
+
prepareSource: async (media, lifetime) => {
|
|
140
|
+
if (!('url' in media))
|
|
141
|
+
throw new Error('Expected a direct media URL');
|
|
142
|
+
await authorizeMediaURL(new URL(media.url), this.mediaPolicy, lifetime ?? signal);
|
|
143
|
+
if ('expiresAtMs' in media &&
|
|
144
|
+
(!Number.isFinite(Number(media.expiresAtMs)) || Number(media.expiresAtMs) <= Date.now()))
|
|
145
|
+
throw new Error('Media source credentials have expired');
|
|
146
|
+
return media;
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
if (!(error instanceof DeferredSourceRequired))
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Unknown source types and transformed URLs resolve only on grant redemption.
|
|
72
156
|
return createMediaSource({
|
|
73
157
|
open: async ({ signal: mediaSignal }) => {
|
|
74
|
-
const
|
|
158
|
+
const lifetime = registration ? AbortSignal.any([mediaSignal, registration]) : mediaSignal;
|
|
159
|
+
lifetime.throwIfAborted();
|
|
160
|
+
const track = await this.restore(payload, lifetime);
|
|
75
161
|
const source = await this.plugins.resolveStream(track, {
|
|
76
|
-
signal:
|
|
77
|
-
prepareSource: (media,
|
|
162
|
+
signal: lifetime,
|
|
163
|
+
prepareSource: (media, sourceSignal) => this.prepareMedia(media, sourceSignal),
|
|
78
164
|
});
|
|
79
165
|
if ('stream' in source)
|
|
80
166
|
return source.stream;
|
|
@@ -84,29 +170,14 @@ export class SourcePluginHost {
|
|
|
84
170
|
},
|
|
85
171
|
},
|
|
86
172
|
dispose: async () => {
|
|
173
|
+
clearInterval(this.sweep);
|
|
87
174
|
this.states.clear();
|
|
88
175
|
await this.runtime.destroy();
|
|
89
176
|
},
|
|
90
177
|
});
|
|
91
178
|
}
|
|
92
179
|
async prepareMedia(source, signal) {
|
|
93
|
-
|
|
94
|
-
return source;
|
|
95
|
-
if ('buffer' in source)
|
|
96
|
-
return { stream: Readable.from([source.buffer]) };
|
|
97
|
-
if ('file' in source)
|
|
98
|
-
return {
|
|
99
|
-
stream: createReadStream(source.file.startsWith('file:') ? new URL(source.file) : source.file, { signal }),
|
|
100
|
-
};
|
|
101
|
-
const url = new URL(source.url);
|
|
102
|
-
if (!['http:', 'https:'].includes(url.protocol) || url.username || url.password)
|
|
103
|
-
throw new Error('Expected a public HTTP(S) media URL');
|
|
104
|
-
const response = await fetch(url, { signal });
|
|
105
|
-
if (!response.ok || !response.body) {
|
|
106
|
-
await response.body?.cancel();
|
|
107
|
-
throw new Error(`Media upstream returned ${response.status}`);
|
|
108
|
-
}
|
|
109
|
-
return { stream: Readable.fromWeb(response.body) };
|
|
180
|
+
return openMedia(source, this.mediaPolicy, signal);
|
|
110
181
|
}
|
|
111
182
|
record(input) {
|
|
112
183
|
if (!input || typeof input !== 'object' || Array.isArray(input))
|
|
@@ -121,13 +192,18 @@ export class SourcePluginHost {
|
|
|
121
192
|
const value = this.record(input);
|
|
122
193
|
// Only portable hints cross the boundary. Request options and credentials never do.
|
|
123
194
|
const result = {};
|
|
124
|
-
for (const key of ['
|
|
195
|
+
for (const key of ['searchEngine']) {
|
|
125
196
|
if (value[key] !== undefined) {
|
|
126
197
|
if (typeof value[key] !== 'string')
|
|
127
198
|
throw new TypeError(`${key} must be a string`);
|
|
128
199
|
result[key] = value[key];
|
|
129
200
|
}
|
|
130
201
|
}
|
|
202
|
+
if (value.resolveCustomProtocols !== undefined) {
|
|
203
|
+
if (typeof value.resolveCustomProtocols !== 'boolean')
|
|
204
|
+
throw new TypeError('resolveCustomProtocols must be a boolean');
|
|
205
|
+
result.resolveCustomProtocols = value.resolveCustomProtocols;
|
|
206
|
+
}
|
|
131
207
|
if (value.limit !== undefined) {
|
|
132
208
|
if (!Number.isSafeInteger(value.limit) || Number(value.limit) < 1)
|
|
133
209
|
throw new TypeError('limit must be positive');
|
|
@@ -156,10 +232,16 @@ export class SourcePluginHost {
|
|
|
156
232
|
this.prune();
|
|
157
233
|
const tracks = result.tracks.map((track) => {
|
|
158
234
|
// serialize first; never retain an invalid or unsafe response.
|
|
235
|
+
if (track.sourceReference)
|
|
236
|
+
track.sourceReference.hostId = this.hostId;
|
|
159
237
|
const serialized = track.serialize();
|
|
160
238
|
const stateId = randomUUID();
|
|
161
239
|
this.states.set(stateId, {
|
|
162
|
-
track,
|
|
240
|
+
track: Object.assign(Object.create(Object.getPrototypeOf(track)), track, {
|
|
241
|
+
playlist: null,
|
|
242
|
+
raw: { ...track.raw, playlist: undefined, requestMetadata: undefined },
|
|
243
|
+
metadataProvider: undefined,
|
|
244
|
+
}),
|
|
163
245
|
expires: Date.now() + this.ttl,
|
|
164
246
|
signal: this.plugins.registrationSignal(track.sourceReference?.pluginId ?? ''),
|
|
165
247
|
});
|
|
@@ -170,44 +252,110 @@ export class SourcePluginHost {
|
|
|
170
252
|
return { tracks, playlist: result.playlist?.serialize() ?? null };
|
|
171
253
|
}
|
|
172
254
|
async restore(input, signal) {
|
|
173
|
-
|
|
255
|
+
signal.throwIfAborted();
|
|
256
|
+
if (input instanceof Track && !this.boundary.getStore()) {
|
|
257
|
+
this.assertHost(input);
|
|
258
|
+
// A consumer-side model has no host-local engine. Ordinary local models retain identity.
|
|
259
|
+
if (input.sourceState || (this.extractors.get(input.sourceReference?.pluginId ?? '') && !input.extractor)) {
|
|
260
|
+
return this.restore(serializeSourceTrack(input), signal);
|
|
261
|
+
}
|
|
174
262
|
return input;
|
|
263
|
+
}
|
|
175
264
|
const payload = this.record(input);
|
|
176
265
|
const { sourceState: _state, ...entity } = payload;
|
|
177
266
|
const track = deserialize(entity);
|
|
178
267
|
if (!(track instanceof Track))
|
|
179
268
|
throw new TypeError('Expected a serialized Track');
|
|
269
|
+
this.assertHost(track);
|
|
180
270
|
this.prune();
|
|
181
271
|
const cached = typeof payload.sourceState === 'string' ? this.states.get(payload.sourceState)?.track : undefined;
|
|
182
272
|
if (cached &&
|
|
183
273
|
cached.id === track.id &&
|
|
184
274
|
cached.url === track.url &&
|
|
185
|
-
cached.sourceReference?.pluginId === track.sourceReference?.pluginId)
|
|
186
|
-
|
|
275
|
+
cached.sourceReference?.pluginId === track.sourceReference?.pluginId) {
|
|
276
|
+
// Copy mutable extractor data per invocation. Opaque/non-cloneable engines are reconstructed below.
|
|
277
|
+
try {
|
|
278
|
+
const { requestMetadata: _callback, playlist: _playlist, ...rawData } = cached.raw;
|
|
279
|
+
const engine = rawData.engine;
|
|
280
|
+
if (engine &&
|
|
281
|
+
typeof engine === 'object' &&
|
|
282
|
+
!Array.isArray(engine) &&
|
|
283
|
+
Object.getPrototypeOf(engine) !== Object.prototype)
|
|
284
|
+
throw new Error('Opaque engine requires reconstruction');
|
|
285
|
+
const raw = structuredClone(rawData);
|
|
286
|
+
const copy = Object.assign(Object.create(Object.getPrototypeOf(cached)), cached, { raw });
|
|
287
|
+
copy.sourceReference = structuredClone(cached.sourceReference);
|
|
288
|
+
copy.trackMetadata = structuredClone(cached.metadata);
|
|
289
|
+
copy.metadataProvider = undefined;
|
|
290
|
+
copy.requestedBy = track.requestedBy;
|
|
291
|
+
copy.playlist = null;
|
|
292
|
+
copy.bridgedTrack = null;
|
|
293
|
+
copy.bridgedExtractor = null;
|
|
294
|
+
return copy;
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
// Legacy callbacks/classes cannot be safely copied; resolve their public location again.
|
|
298
|
+
}
|
|
299
|
+
}
|
|
187
300
|
const pluginId = track.sourceReference?.pluginId;
|
|
188
301
|
if (!pluginId || !this.plugins.has(pluginId))
|
|
189
302
|
throw new Error('Track source is unavailable; register its provider and search again');
|
|
190
303
|
if (!this.extractors.get(pluginId))
|
|
191
304
|
return track;
|
|
192
305
|
// Re-run legacy metadata resolution rather than guessing the meaning of raw.engine.
|
|
193
|
-
const
|
|
194
|
-
const
|
|
306
|
+
const data = track.sourceReference?.data;
|
|
307
|
+
const queryType = data && typeof data === 'object' && 'queryType' in data ? data.queryType : undefined;
|
|
308
|
+
const result = await this.plugins.execute('search.query.resolve', {
|
|
309
|
+
query: track.url,
|
|
310
|
+
providerHint: typeof queryType === 'string' ? queryType : undefined,
|
|
311
|
+
}, { pluginId, signal });
|
|
312
|
+
const restored = result?.tracks.find((item) => item.url === track.url);
|
|
195
313
|
if (!restored)
|
|
196
314
|
throw new Error(`Source ${pluginId} could not reconstruct expired Track state; search again`);
|
|
197
315
|
restored.requestedBy = track.requestedBy;
|
|
316
|
+
restored.sourceReference = track.sourceReference;
|
|
198
317
|
return restored;
|
|
199
318
|
}
|
|
319
|
+
assertHost(track) {
|
|
320
|
+
if (track.sourceReference?.hostId !== this.hostId) {
|
|
321
|
+
throw new Error('Track belongs to another source host or has no host affinity; resolve it on this host first');
|
|
322
|
+
}
|
|
323
|
+
}
|
|
200
324
|
/** Execute directly without serialization; caller owns returned media.
|
|
201
325
|
* @param request Generic Remedia request targeting discord-player.source.
|
|
202
326
|
*/
|
|
203
327
|
handle(request) {
|
|
204
|
-
return this.remedia.handle(request);
|
|
328
|
+
return this.boundary.run(false, () => this.remedia.handle(request));
|
|
205
329
|
}
|
|
206
330
|
/** Execute HTTP through Remedia's transport and the same operation handlers.
|
|
207
|
-
* @param request Fetch request.
|
|
331
|
+
* @param request Fetch request. An explicitly configured hostId is required even without publicUrl.
|
|
208
332
|
*/
|
|
209
|
-
fetch(request) {
|
|
210
|
-
|
|
333
|
+
async fetch(request) {
|
|
334
|
+
if (!this.explicitHostId)
|
|
335
|
+
return Promise.reject(new TypeError('HTTP source hosts require an explicit hostId'));
|
|
336
|
+
const response = await this.boundary.run(true, () => this.remedia.fetch(request));
|
|
337
|
+
if (new URL(request.url).pathname !== '/.well-known/remedia' || !response.ok)
|
|
338
|
+
return response;
|
|
339
|
+
await this.plugins.ready();
|
|
340
|
+
const manifest = await response.json();
|
|
341
|
+
const providers = this.plugins.describe();
|
|
342
|
+
const operations = new Set(providers.flatMap((provider) => provider.operations));
|
|
343
|
+
for (const plugin of manifest.plugins) {
|
|
344
|
+
if (plugin.id !== SOURCE_PLUGIN_ID)
|
|
345
|
+
continue;
|
|
346
|
+
plugin.operations = plugin.operations.filter((name) => {
|
|
347
|
+
if (name === 'metadata.execute')
|
|
348
|
+
return (operations.has('search.query.resolve') || operations.has('lyrics.search') || operations.has('track.related'));
|
|
349
|
+
if (name === 'source.search')
|
|
350
|
+
return operations.has('search.query.resolve');
|
|
351
|
+
if (name === 'source.related')
|
|
352
|
+
return operations.has('track.related');
|
|
353
|
+
if (name === 'source.stream')
|
|
354
|
+
return operations.has('track.stream') || operations.has('track.bridge');
|
|
355
|
+
return false;
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
return Response.json({ ...manifest, hostId: this.hostId, providers }, { status: response.status, headers: response.headers });
|
|
211
359
|
}
|
|
212
360
|
/** Identify Remedia routes for Node middleware.
|
|
213
361
|
* @param path URL pathname.
|
package/dist/host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"host.js","sourceRoot":"","sources":["../src/host.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,3 +14,8 @@ export * from './host.js';
|
|
|
14
14
|
export * from './protocol.js';
|
|
15
15
|
export { cloneJSONValue } from './utils/serialization.js';
|
|
16
16
|
export { SafeEventEmitter, type EventMap } from './utils/safe-event-emitter.js';
|
|
17
|
+
export type { MediaAccessPolicy } from './media.js';
|
|
18
|
+
export { parseLyrics, normalizeLyrics, searchLyrics } from './lyrics.js';
|
|
19
|
+
export type { LyricsLine, LyricsResult, LyricsRequest } from './lyrics.js';
|
|
20
|
+
export * from './providers/lrclib.js';
|
|
21
|
+
export type { RemotePluginHostOptions } from './remote.js';
|
package/dist/index.js
CHANGED
|
@@ -14,4 +14,6 @@ export * from './host.js';
|
|
|
14
14
|
export * from './protocol.js';
|
|
15
15
|
export { cloneJSONValue } from './utils/serialization.js';
|
|
16
16
|
export { SafeEventEmitter } from './utils/safe-event-emitter.js';
|
|
17
|
+
export { parseLyrics, normalizeLyrics, searchLyrics } from './lyrics.js';
|
|
18
|
+
export * from './providers/lrclib.js';
|
|
17
19
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAiB,MAAM,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAiB,MAAM,+BAA+B,CAAC;AAIhF,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEzE,cAAc,uBAAuB,CAAC"}
|
package/dist/legacy-player.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export interface SourceRuntimeEvents {
|
|
|
11
11
|
/** Non-fatal source errors. */
|
|
12
12
|
error: [error: Error];
|
|
13
13
|
/** Compatibility event forwarded by a real Player. */
|
|
14
|
-
voiceStateUpdate: [guildId: string, event: unknown];
|
|
14
|
+
voiceStateUpdate: [guildId: string, event: Record<string, unknown>];
|
|
15
15
|
}
|
|
16
16
|
/** Source-related Player surface shared by actual Players and standalone hosts. */
|
|
17
17
|
export interface LegacyPlayerContext {
|
package/dist/lyrics.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Track } from './structures/track.js';
|
|
2
|
+
import type { ProviderReference } from './plugins/types.js';
|
|
3
|
+
import type { PluginRegistry } from './plugins/registry.js';
|
|
4
|
+
import type { JSONValue } from './utils/serialization.js';
|
|
5
|
+
/** One normalized synchronized lyric line. */
|
|
6
|
+
export interface LyricsLine {
|
|
7
|
+
/** Position in the source timeline, in milliseconds. */
|
|
8
|
+
timestampMs: number;
|
|
9
|
+
/** Text displayed from this timestamp until the next line. */
|
|
10
|
+
line: string;
|
|
11
|
+
}
|
|
12
|
+
/** Provider-neutral lyrics record; either representation may be absent. */
|
|
13
|
+
export interface LyricsResult {
|
|
14
|
+
/** Canonical Track ID when lookup used Track input, preventing stale queue loads. */
|
|
15
|
+
trackId?: string;
|
|
16
|
+
/** Stable provider identity, stamped by dispatch when absent. */
|
|
17
|
+
provider?: ProviderReference;
|
|
18
|
+
/** Plain text availability and contents. */
|
|
19
|
+
plain: {
|
|
20
|
+
available: false;
|
|
21
|
+
} | {
|
|
22
|
+
available: true;
|
|
23
|
+
text: string;
|
|
24
|
+
};
|
|
25
|
+
/** Synchronized representation, sorted by timestamp. */
|
|
26
|
+
synced: {
|
|
27
|
+
available: false;
|
|
28
|
+
} | {
|
|
29
|
+
available: true;
|
|
30
|
+
lines: readonly LyricsLine[];
|
|
31
|
+
};
|
|
32
|
+
/** Optional provider-owned, serializable metadata. */
|
|
33
|
+
metadata?: JSONValue;
|
|
34
|
+
}
|
|
35
|
+
/** Normalize and validate a lyrics record once, including sorted synchronized timestamps.
|
|
36
|
+
* @param result Provider record.
|
|
37
|
+
* @returns Validated record with duplicate timestamps resolved deterministically.
|
|
38
|
+
*/
|
|
39
|
+
export declare function normalizeLyrics(result: LyricsResult): LyricsResult;
|
|
40
|
+
/** Lookup input shared by local plugins and HTTP metadata transport. */
|
|
41
|
+
export interface LyricsRequest {
|
|
42
|
+
/** Caller input. Remote transport serializes Tracks before delivery. */
|
|
43
|
+
input: Track | string;
|
|
44
|
+
}
|
|
45
|
+
/** Parse LRC once, including multiple timestamps and decimal-second fractions.
|
|
46
|
+
* @param text LRC text.
|
|
47
|
+
* @returns Sorted normalized lines, with the last line winning duplicate timestamps.
|
|
48
|
+
*/
|
|
49
|
+
export declare function parseLyrics(text: string): LyricsLine[];
|
|
50
|
+
/** Resolve lyrics through the same operation registry as source metadata.
|
|
51
|
+
* @param plugins Shared registry.
|
|
52
|
+
* @param input Track or raw query.
|
|
53
|
+
* @param signal Caller lifetime.
|
|
54
|
+
* @returns Results in provider priority order, preferring explicit and source affinity.
|
|
55
|
+
*/
|
|
56
|
+
export declare function searchLyrics(plugins: PluginRegistry, input: Track | string, signal?: AbortSignal): Promise<LyricsResult[]>;
|