@discord-player/plugin-host 8.0.0-dev.2 → 8.0.0-dev.3
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 +19 -0
- package/dist/errors.d.ts +15 -0
- package/dist/errors.js +17 -0
- package/dist/errors.js.map +1 -1
- package/dist/plugins/execution-options.d.ts +2 -0
- package/dist/plugins/operation-dispatch.js +34 -5
- package/dist/plugins/operation-dispatch.js.map +1 -1
- package/dist/plugins/registry-internals.d.ts +3 -1
- package/dist/plugins/registry.d.ts +61 -3
- package/dist/plugins/registry.js +276 -31
- package/dist/plugins/registry.js.map +1 -1
- package/dist/plugins/stream-resolver.js +34 -1
- package/dist/plugins/stream-resolver.js.map +1 -1
- package/dist/plugins/types.d.ts +36 -2
- package/dist/plugins/types.js.map +1 -1
- package/dist/runtime.js +15 -2
- package/dist/runtime.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -391,3 +391,22 @@ Metadata currently travels over direct HTTP. Remedia dev.7 can forward generic p
|
|
|
391
391
|
operations to server-configured hosts (`client.plugins.list` / `execute`), but Discord Player
|
|
392
392
|
does not use that path yet. `remote.ts` isolates this boundary for a future supported
|
|
393
393
|
transport without introducing a second search dispatcher.
|
|
394
|
+
|
|
395
|
+
## Modern capabilities
|
|
396
|
+
|
|
397
|
+
`ctx.on()` supports shared `search.beforeQuery`, `search.afterResults`,
|
|
398
|
+
`media.beforeResolve`, `media.descriptor`, and encoded `media.transform` operations.
|
|
399
|
+
Transform handlers run sequentially in priority order. Pass the invocation's
|
|
400
|
+
`signal` to asynchronous work; registration removal aborts and drains it before
|
|
401
|
+
cleanup. `plugins.describe()` includes actual owned subscriptions and priorities.
|
|
402
|
+
|
|
403
|
+
Byte transformations use proxy delivery when direct URLs would bypass processing.
|
|
404
|
+
Descriptor interception runs before host media authorization. A standalone runtime
|
|
405
|
+
has no live queue or Gateway context; local Player/queue/playback/voice capability
|
|
406
|
+
registrations fail setup. Legacy extractors retain their existing post-stream
|
|
407
|
+
adapter and do not acquire modern lifecycle capabilities.
|
|
408
|
+
|
|
409
|
+
Use `await plugins.serialize(entity)` and `await plugins.restore(payload)` for
|
|
410
|
+
validated `serialization.afterSerialize` / `serialization.beforeRestore`
|
|
411
|
+
transformations. The existing synchronous model and global serialization APIs
|
|
412
|
+
retain their behavior.
|
package/dist/errors.d.ts
CHANGED
|
@@ -8,6 +8,8 @@ export declare const DiscordPlayerErrorCode: {
|
|
|
8
8
|
readonly SourceUnavailable: 'ERR_SOURCE_UNAVAILABLE';
|
|
9
9
|
/** Data could not be serialized or reconstructed. */
|
|
10
10
|
readonly Serialization: 'ERR_SERIALIZATION';
|
|
11
|
+
/** A guild-scoped hook was invoked without a valid context or explicit guild. */
|
|
12
|
+
readonly IllegalHookInvocation: 'ERR_ILLEGAL_HOOK_INVOCATION';
|
|
11
13
|
};
|
|
12
14
|
/** Error code union for Discord Player errors. */
|
|
13
15
|
export type DiscordPlayerErrorCode = (typeof DiscordPlayerErrorCode)[keyof typeof DiscordPlayerErrorCode];
|
|
@@ -39,6 +41,19 @@ export declare class SourceUnavailableError extends DiscordPlayerError {
|
|
|
39
41
|
/** Track title or identifier that could not be resolved. */
|
|
40
42
|
track: string);
|
|
41
43
|
}
|
|
44
|
+
/** Error thrown when a guild-scoped hook cannot resolve a Player or guild queue. */
|
|
45
|
+
export declare class IllegalHookInvocationError extends DiscordPlayerError {
|
|
46
|
+
/**
|
|
47
|
+
* Create a hook invocation error.
|
|
48
|
+
* @param target Hook name or subsystem that was invoked illegally.
|
|
49
|
+
* @param message Additional explanation of the required invocation.
|
|
50
|
+
*/
|
|
51
|
+
constructor(
|
|
52
|
+
/** Hook name or subsystem that was invoked illegally. */
|
|
53
|
+
target: string,
|
|
54
|
+
/** Additional explanation of the required invocation. */
|
|
55
|
+
message?: string);
|
|
56
|
+
}
|
|
42
57
|
/** Error thrown when a serialization input cannot be encoded or decoded. */
|
|
43
58
|
export declare class SerializationError extends DiscordPlayerError {
|
|
44
59
|
/**
|
package/dist/errors.js
CHANGED
|
@@ -8,6 +8,8 @@ export const DiscordPlayerErrorCode = {
|
|
|
8
8
|
SourceUnavailable: 'ERR_SOURCE_UNAVAILABLE',
|
|
9
9
|
/** Data could not be serialized or reconstructed. */
|
|
10
10
|
Serialization: 'ERR_SERIALIZATION',
|
|
11
|
+
/** A guild-scoped hook was invoked without a valid context or explicit guild. */
|
|
12
|
+
IllegalHookInvocation: 'ERR_ILLEGAL_HOOK_INVOCATION',
|
|
11
13
|
};
|
|
12
14
|
/** Base error carrying a stable Discord Player error code. */
|
|
13
15
|
export class DiscordPlayerError extends Error {
|
|
@@ -43,6 +45,21 @@ export class SourceUnavailableError extends DiscordPlayerError {
|
|
|
43
45
|
super(`No source plugin is available to resolve Track "${track}".`, DiscordPlayerErrorCode.SourceUnavailable);
|
|
44
46
|
}
|
|
45
47
|
}
|
|
48
|
+
/** Error thrown when a guild-scoped hook cannot resolve a Player or guild queue. */
|
|
49
|
+
export class IllegalHookInvocationError extends DiscordPlayerError {
|
|
50
|
+
/**
|
|
51
|
+
* Create a hook invocation error.
|
|
52
|
+
* @param target Hook name or subsystem that was invoked illegally.
|
|
53
|
+
* @param message Additional explanation of the required invocation.
|
|
54
|
+
*/
|
|
55
|
+
constructor(
|
|
56
|
+
/** Hook name or subsystem that was invoked illegally. */
|
|
57
|
+
target,
|
|
58
|
+
/** Additional explanation of the required invocation. */
|
|
59
|
+
message) {
|
|
60
|
+
super(`Illegal invocation of ${target} hook.${message ? ` ${message}` : ''}`, DiscordPlayerErrorCode.IllegalHookInvocation);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
46
63
|
/** Error thrown when a serialization input cannot be encoded or decoded. */
|
|
47
64
|
export class SerializationError extends DiscordPlayerError {
|
|
48
65
|
/**
|
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,gEAAgE;IAChE,iBAAiB,EAAE,wBAAwB;IAC3C,qDAAqD;IACrD,aAAa,EAAE,mBAAmB;
|
|
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;IAClC,iFAAiF;IACjF,qBAAqB,EAAE,6BAA6B;CAC5C,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,oFAAoF;AACpF,MAAM,OAAO,0BAA2B,SAAQ,kBAAkB;IAChE;;;;OAIG;IACH;IACE,yDAAyD;IACzD,MAAc;IACd,yDAAyD;IACzD,OAAgB;QAEhB,KAAK,CACH,yBAAyB,MAAM,SAAS,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EACtE,sBAAsB,CAAC,qBAAqB,CAC7C,CAAC;IACJ,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"}
|
|
@@ -12,6 +12,8 @@ export interface ExecuteOptions {
|
|
|
12
12
|
}
|
|
13
13
|
/** Playback resolution configuration selected after the Remedia session is connected. */
|
|
14
14
|
export interface StreamResolutionOptions {
|
|
15
|
+
/** Portable queue scope when resolution belongs to a live Player, otherwise null. */
|
|
16
|
+
guildId?: string | null;
|
|
15
17
|
/** Materialize encoded media inside a transport adapter before post-stream processing.
|
|
16
18
|
* @param source Resolved media descriptor.
|
|
17
19
|
* @param signal Combined caller and provider lifetime.
|
|
@@ -9,9 +9,13 @@ import { PluginError } from './plugin-error.js';
|
|
|
9
9
|
* @returns Ordered applicable subscriptions without invoking them.
|
|
10
10
|
*/
|
|
11
11
|
export function selectHandlers(operation, input, options, state) {
|
|
12
|
-
return state.handlers
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
return (state.handlers.get(operation) ?? []).filter((handler) => handler.entry.active &&
|
|
13
|
+
(!handler.guildIds ||
|
|
14
|
+
(typeof input === 'object' &&
|
|
15
|
+
input !== null &&
|
|
16
|
+
'guildId' in input &&
|
|
17
|
+
typeof input.guildId === 'string' &&
|
|
18
|
+
handler.guildIds.includes(input.guildId))) &&
|
|
15
19
|
(!options.pluginId || handler.entry.id === options.pluginId) &&
|
|
16
20
|
(options.hostId === undefined ||
|
|
17
21
|
(handler.entry.registration.definition.remoteHost?.hostId ?? null) === options.hostId) &&
|
|
@@ -19,8 +23,7 @@ export function selectHandlers(operation, input, options, state) {
|
|
|
19
23
|
!state.blocked().includes(handler.entry.id) &&
|
|
20
24
|
(!input.protocol ||
|
|
21
25
|
!handler.protocols?.length ||
|
|
22
|
-
handler.protocols?.includes(input.protocol)))
|
|
23
|
-
.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0) || a.order - b.order);
|
|
26
|
+
handler.protocols?.includes(input.protocol)));
|
|
24
27
|
}
|
|
25
28
|
/** Dispatch a typed operation against initialized host state.
|
|
26
29
|
* @internal
|
|
@@ -66,6 +69,12 @@ export async function dispatchOperation(operation, input, options, state, handle
|
|
|
66
69
|
}
|
|
67
70
|
}
|
|
68
71
|
catch (error) {
|
|
72
|
+
if ((operation === 'stream.transform' || operation === 'media.transform') &&
|
|
73
|
+
value &&
|
|
74
|
+
typeof value === 'object' &&
|
|
75
|
+
'stream' in value &&
|
|
76
|
+
value.stream instanceof Readable)
|
|
77
|
+
value.stream.destroy();
|
|
69
78
|
if (signal.aborted) {
|
|
70
79
|
throw signal.reason;
|
|
71
80
|
}
|
|
@@ -103,6 +112,26 @@ export async function dispatchOperation(operation, input, options, state, handle
|
|
|
103
112
|
return result;
|
|
104
113
|
}
|
|
105
114
|
if (policy === 'pipe') {
|
|
115
|
+
if (operation === 'stream.transform' || operation === 'media.transform') {
|
|
116
|
+
const previous = value;
|
|
117
|
+
const next = result;
|
|
118
|
+
if (!next || next.track !== previous.track || !(next.stream instanceof Readable)) {
|
|
119
|
+
previous.stream.destroy();
|
|
120
|
+
if (next?.stream instanceof Readable)
|
|
121
|
+
next.stream.destroy();
|
|
122
|
+
throw new PluginError(handler.entry.id, operation, new TypeError('Encoded transforms must preserve Track identity and return a Readable.'));
|
|
123
|
+
}
|
|
124
|
+
const dispose = () => {
|
|
125
|
+
previous.stream.destroy();
|
|
126
|
+
next.stream.destroy();
|
|
127
|
+
};
|
|
128
|
+
signal.addEventListener('abort', dispose, { once: true });
|
|
129
|
+
next.stream.once('close', () => {
|
|
130
|
+
signal.removeEventListener('abort', dispose);
|
|
131
|
+
if (previous.stream !== next.stream)
|
|
132
|
+
previous.stream.destroy();
|
|
133
|
+
});
|
|
134
|
+
}
|
|
106
135
|
value = result;
|
|
107
136
|
}
|
|
108
137
|
if (policy === 'collect') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation-dispatch.js","sourceRoot":"","sources":["../../src/plugins/operation-dispatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAKhD;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAwB,EACxB,KAAc,EACd,OAAuB,EACvB,KAAoB;IAEpB,OAAO,KAAK,CAAC,QAAQ
|
|
1
|
+
{"version":3,"file":"operation-dispatch.js","sourceRoot":"","sources":["../../src/plugins/operation-dispatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@ export type Entry = {
|
|
|
12
12
|
controller: AbortController;
|
|
13
13
|
/** Owned cleanup callbacks in registration order. */
|
|
14
14
|
cleanups: Array<() => void | Promise<void>>;
|
|
15
|
+
/** Subscriptions owned by this registration, including dynamic additions. */
|
|
16
|
+
handlers: Set<Handler>;
|
|
15
17
|
/** Handler promises that teardown must drain. */
|
|
16
18
|
pending: Set<Promise<unknown>>;
|
|
17
19
|
/** Setup completion, including failed-setup cleanup. */
|
|
@@ -48,7 +50,7 @@ export type OperationRunner = <K extends OperationName>(operation: K, input: Ope
|
|
|
48
50
|
/** Host state read by operation dispatch. */
|
|
49
51
|
export interface DispatchState {
|
|
50
52
|
/** Subscriptions visible to the current dispatch. */
|
|
51
|
-
handlers: Handler[]
|
|
53
|
+
handlers: ReadonlyMap<OperationName, readonly Handler[]>;
|
|
52
54
|
/** Operation dispatch policies. */
|
|
53
55
|
definitions: Map<OperationName, DispatchPolicy>;
|
|
54
56
|
/** Owning Player's disabled provider IDs. */
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { type SerializedEntityUnion } from '../utils/serde.js';
|
|
2
|
+
import type { Playlist } from '../structures/playlist.js';
|
|
1
3
|
import { type RemotePluginHostOptions } from '../remote.js';
|
|
2
4
|
import type { MediaSource } from '@remedia/client';
|
|
3
5
|
import type { Track } from '../structures/track.js';
|
|
4
6
|
import type { ExecuteOptions, StreamResolutionOptions } from './execution-options.js';
|
|
5
|
-
import type { OperationInput, OperationName, OperationResult, PluginRegistration, ProviderReference, OperationMap } from './types.js';
|
|
7
|
+
import type { OperationInput, OperationName, OperationResult, PluginRegistration, ProviderReference, OperationMap, ProviderMap } from './types.js';
|
|
6
8
|
import type { LegacyPlayerContext } from '../legacy-player.js';
|
|
7
9
|
export { PluginError } from './plugin-error.js';
|
|
8
10
|
export type { ExecuteOptions, StreamResolutionOptions } from './execution-options.js';
|
|
@@ -11,9 +13,31 @@ export declare class PluginRegistry {
|
|
|
11
13
|
readonly player: LegacyPlayerContext;
|
|
12
14
|
private readonly blocked;
|
|
13
15
|
private readonly hostId?;
|
|
16
|
+
private providerNames;
|
|
17
|
+
private sealedProviders;
|
|
18
|
+
private providersIndex;
|
|
19
|
+
/** Enable a local singleton capability before setup. Source hosts do not enable playback providers.
|
|
20
|
+
* @param name Provider capability name.
|
|
21
|
+
*/
|
|
22
|
+
defineProvider<K extends keyof ProviderMap>(name: K): void;
|
|
23
|
+
/** Read the selected provider registration lifetime.
|
|
24
|
+
* @param name Provider capability name.
|
|
25
|
+
* @returns Registration cancellation signal, absent for the default implementation.
|
|
26
|
+
*/
|
|
27
|
+
providerSignal<K extends keyof ProviderMap>(name: K): AbortSignal | undefined;
|
|
28
|
+
/** Select and seal a provider before resource initialization. Later replacement registrations fail.
|
|
29
|
+
* @param name Provider capability name.
|
|
30
|
+
* @param dispose Release owned framework resources before plugin teardown.
|
|
31
|
+
* @returns The active implementation, or undefined for the framework default.
|
|
32
|
+
*/
|
|
33
|
+
selectProvider<K extends keyof ProviderMap>(name: K, dispose: () => Promise<void>): ProviderMap[K] | undefined;
|
|
14
34
|
private advertisements;
|
|
15
35
|
private entries;
|
|
16
36
|
private handlers;
|
|
37
|
+
private synchronous;
|
|
38
|
+
private dispatching;
|
|
39
|
+
private calls;
|
|
40
|
+
private initializing;
|
|
17
41
|
private order;
|
|
18
42
|
private resultOwners;
|
|
19
43
|
private destroyed;
|
|
@@ -28,8 +52,9 @@ export declare class PluginRegistry {
|
|
|
28
52
|
/** Define a declaration-merged operation before registering handlers.
|
|
29
53
|
* @param name Operation name.
|
|
30
54
|
* @param policy Dispatch policy matching its contract.
|
|
55
|
+
* @param synchronous Whether callbacks must complete before returning; required for interception.
|
|
31
56
|
*/
|
|
32
|
-
defineOperation<K extends OperationName>(name: K, policy: OperationMap[K]['policy']): void;
|
|
57
|
+
defineOperation<K extends OperationName>(name: K, policy: OperationMap[K]['policy'], synchronous?: boolean): void;
|
|
33
58
|
/** Whether an ID is reserved or active.
|
|
34
59
|
* @param id Plugin ID.
|
|
35
60
|
* @param hostId Optional deployment constraint.
|
|
@@ -44,16 +69,23 @@ export declare class PluginRegistry {
|
|
|
44
69
|
* @param hostId Deployment identity.
|
|
45
70
|
*/
|
|
46
71
|
hasHost(hostId: string): boolean;
|
|
47
|
-
/** Advertise only
|
|
72
|
+
/** Advertise only active local operation handlers and supplied provider capabilities.
|
|
48
73
|
* @returns Serializable provider capability descriptions.
|
|
49
74
|
*/
|
|
50
75
|
describe(): {
|
|
51
76
|
id: string;
|
|
77
|
+
provides: never[];
|
|
52
78
|
operations: (keyof OperationMap)[];
|
|
53
79
|
protocols: string[];
|
|
54
80
|
priorities: {
|
|
55
81
|
[k: string]: number;
|
|
56
82
|
};
|
|
83
|
+
subscriptions: {
|
|
84
|
+
operation: keyof OperationMap;
|
|
85
|
+
priority: number;
|
|
86
|
+
guildIds: readonly string[] | undefined;
|
|
87
|
+
order: number;
|
|
88
|
+
}[];
|
|
57
89
|
}[];
|
|
58
90
|
/** Register all advertised providers from an existing HTTP deployment.
|
|
59
91
|
* @param host Existing deployment and authentication.
|
|
@@ -90,6 +122,20 @@ export declare class PluginRegistry {
|
|
|
90
122
|
ready(): Promise<void>;
|
|
91
123
|
/** Destroy all registrations, attempting every cleanup even when one fails. */
|
|
92
124
|
destroy(): Promise<void>;
|
|
125
|
+
/** Whether an operation has active subscribers. Does not scan unrelated registrations.
|
|
126
|
+
* @param operation Capability name.
|
|
127
|
+
* @returns Whether at least one active handler exists.
|
|
128
|
+
*/
|
|
129
|
+
hasCapability(operation: OperationName): boolean;
|
|
130
|
+
/** Reject reentrant application operations from synchronous capability handlers. */
|
|
131
|
+
assertNotDispatching(): void;
|
|
132
|
+
/** Dispatch a synchronous local capability without scheduling promises.
|
|
133
|
+
* @param operation Capability defined with synchronous execution.
|
|
134
|
+
* @param input Validated operation payload.
|
|
135
|
+
* @param options Scope and cancellation constraints.
|
|
136
|
+
* @returns The selected result, or transformed input for pipe operations.
|
|
137
|
+
*/
|
|
138
|
+
executeSync<K extends OperationName>(operation: K, input: OperationInput<K>, options?: ExecuteOptions): OperationResult<K>;
|
|
93
139
|
/** Execute using the operation's declared policy. Genuine failures reject immediately.
|
|
94
140
|
* @param operation Typed operation name.
|
|
95
141
|
* @param input Operation payload.
|
|
@@ -98,6 +144,18 @@ export declare class PluginRegistry {
|
|
|
98
144
|
*/
|
|
99
145
|
execute<K extends OperationName>(operation: K, input: OperationInput<K>, options?: ExecuteOptions): Promise<OperationResult<K>>;
|
|
100
146
|
private run;
|
|
147
|
+
/** Serialize using modern application-metadata transformations. Plain model serialization remains synchronous.
|
|
148
|
+
* @param entity Track or playlist to persist.
|
|
149
|
+
* @param options Cancellation and provider scope.
|
|
150
|
+
* @returns A validated JSON persistence payload, without playback grants or live streams.
|
|
151
|
+
*/
|
|
152
|
+
serialize(entity: Track | Playlist, options?: ExecuteOptions): Promise<SerializedEntityUnion>;
|
|
153
|
+
/** Restore through modern metadata transformations and the existing schema validator.
|
|
154
|
+
* @param payload Untrusted persistence payload.
|
|
155
|
+
* @param options Cancellation and provider scope.
|
|
156
|
+
* @returns A restored entity without ephemeral playback state.
|
|
157
|
+
*/
|
|
158
|
+
restore(payload: unknown, options?: ExecuteOptions): Promise<Track | Playlist>;
|
|
101
159
|
/** Resolve and normalize a track for the already selected Remedia node.
|
|
102
160
|
* @param track Data model with a portable provider reference.
|
|
103
161
|
* @param options Target node mode and cancellation.
|
package/dist/plugins/registry.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { serialize, deserialize } from '../utils/serde.js';
|
|
2
|
+
import { parseEntity } from '../utils/parse-serialized-entity.js';
|
|
3
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
1
4
|
import { registerRemote, discoverRemote } from '../remote.js';
|
|
2
5
|
import { PluginError } from './plugin-error.js';
|
|
3
6
|
import { dispatchOperation, selectHandlers } from './operation-dispatch.js';
|
|
@@ -8,9 +11,44 @@ export class PluginRegistry {
|
|
|
8
11
|
player;
|
|
9
12
|
blocked;
|
|
10
13
|
hostId;
|
|
14
|
+
providerNames = new Set();
|
|
15
|
+
sealedProviders = new Set();
|
|
16
|
+
providersIndex = new Map();
|
|
17
|
+
/** Enable a local singleton capability before setup. Source hosts do not enable playback providers.
|
|
18
|
+
* @param name Provider capability name.
|
|
19
|
+
*/
|
|
20
|
+
defineProvider(name) {
|
|
21
|
+
this.providerNames.add(name);
|
|
22
|
+
}
|
|
23
|
+
/** Read the selected provider registration lifetime.
|
|
24
|
+
* @param name Provider capability name.
|
|
25
|
+
* @returns Registration cancellation signal, absent for the default implementation.
|
|
26
|
+
*/
|
|
27
|
+
providerSignal(name) {
|
|
28
|
+
return this.providersIndex.get(name)?.entry.controller.signal;
|
|
29
|
+
}
|
|
30
|
+
/** Select and seal a provider before resource initialization. Later replacement registrations fail.
|
|
31
|
+
* @param name Provider capability name.
|
|
32
|
+
* @param dispose Release owned framework resources before plugin teardown.
|
|
33
|
+
* @returns The active implementation, or undefined for the framework default.
|
|
34
|
+
*/
|
|
35
|
+
selectProvider(name, dispose) {
|
|
36
|
+
if (this.sealedProviders.has(name))
|
|
37
|
+
throw new Error(`Provider already selected: ${String(name)}`);
|
|
38
|
+
this.sealedProviders.add(name);
|
|
39
|
+
const provider = this.providersIndex.get(name);
|
|
40
|
+
if (!provider?.entry.active)
|
|
41
|
+
return undefined;
|
|
42
|
+
provider.dispose = dispose;
|
|
43
|
+
return provider.value;
|
|
44
|
+
}
|
|
11
45
|
advertisements = new WeakMap();
|
|
12
46
|
entries = new Map();
|
|
13
|
-
handlers =
|
|
47
|
+
handlers = new Map();
|
|
48
|
+
synchronous = new Set();
|
|
49
|
+
dispatching = false;
|
|
50
|
+
calls = new AsyncLocalStorage();
|
|
51
|
+
initializing = new Set();
|
|
14
52
|
order = 0;
|
|
15
53
|
resultOwners = new WeakMap();
|
|
16
54
|
destroyed = false;
|
|
@@ -26,6 +64,13 @@ export class PluginRegistry {
|
|
|
26
64
|
this.hostId = hostId;
|
|
27
65
|
}
|
|
28
66
|
definitions = new Map([
|
|
67
|
+
['serialization.beforeRestore', 'pipe'],
|
|
68
|
+
['serialization.afterSerialize', 'pipe'],
|
|
69
|
+
['media.beforeResolve', 'pipe'],
|
|
70
|
+
['search.beforeQuery', 'pipe'],
|
|
71
|
+
['search.afterResults', 'pipe'],
|
|
72
|
+
['media.descriptor', 'pipe'],
|
|
73
|
+
['media.transform', 'pipe'],
|
|
29
74
|
['lyrics.search', 'collect'],
|
|
30
75
|
['search.query.match', 'collect'],
|
|
31
76
|
['search.query.resolve', 'first'],
|
|
@@ -38,12 +83,19 @@ export class PluginRegistry {
|
|
|
38
83
|
/** Define a declaration-merged operation before registering handlers.
|
|
39
84
|
* @param name Operation name.
|
|
40
85
|
* @param policy Dispatch policy matching its contract.
|
|
86
|
+
* @param synchronous Whether callbacks must complete before returning; required for interception.
|
|
41
87
|
*/
|
|
42
|
-
defineOperation(name, policy) {
|
|
88
|
+
defineOperation(name, policy, synchronous = false) {
|
|
89
|
+
if (policy === 'intercept' && !synchronous)
|
|
90
|
+
throw new TypeError('Interception requires synchronous dispatch.');
|
|
91
|
+
if (synchronous && policy === 'collect')
|
|
92
|
+
throw new TypeError('Synchronous collection dispatch is unsupported.');
|
|
43
93
|
if (this.definitions.has(name)) {
|
|
44
94
|
throw new Error(`Operation already defined: ${name}`);
|
|
45
95
|
}
|
|
46
96
|
this.definitions.set(name, policy);
|
|
97
|
+
if (synchronous)
|
|
98
|
+
this.synchronous.add(name);
|
|
47
99
|
}
|
|
48
100
|
/** Whether an ID is reserved or active.
|
|
49
101
|
* @param id Plugin ID.
|
|
@@ -87,31 +139,41 @@ export class PluginRegistry {
|
|
|
87
139
|
hasHost(hostId) {
|
|
88
140
|
return [...this.entries.values()].some((entry) => entry.registration.definition.remoteHost?.hostId === hostId);
|
|
89
141
|
}
|
|
90
|
-
/** Advertise only
|
|
142
|
+
/** Advertise only active local operation handlers and supplied provider capabilities.
|
|
91
143
|
* @returns Serializable provider capability descriptions.
|
|
92
144
|
*/
|
|
93
145
|
describe() {
|
|
94
146
|
return [...this.entries.values()]
|
|
95
147
|
.filter((entry) => entry.active)
|
|
96
|
-
.map((entry) =>
|
|
97
|
-
|
|
98
|
-
operations
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
148
|
+
.map((entry) => {
|
|
149
|
+
const handlers = [...entry.handlers];
|
|
150
|
+
const operations = [...new Set(handlers.map((handler) => handler.operation))];
|
|
151
|
+
const provides = [...this.providersIndex]
|
|
152
|
+
.filter(([, provider]) => provider.entry === entry)
|
|
153
|
+
.map(([name]) => name);
|
|
154
|
+
return {
|
|
155
|
+
id: entry.id,
|
|
156
|
+
provides,
|
|
157
|
+
operations,
|
|
158
|
+
protocols: [
|
|
159
|
+
...new Set(handlers
|
|
160
|
+
.filter((handler) => handler.operation.startsWith('search.query.'))
|
|
161
|
+
.flatMap((handler) => handler.protocols ?? [])),
|
|
162
|
+
],
|
|
163
|
+
priorities: Object.fromEntries(operations.map((operation) => [
|
|
164
|
+
operation,
|
|
165
|
+
Math.max(...handlers
|
|
166
|
+
.filter((handler) => handler.operation === operation)
|
|
167
|
+
.map((handler) => handler.priority ?? 0)),
|
|
168
|
+
])),
|
|
169
|
+
subscriptions: handlers.map((handler) => ({
|
|
170
|
+
operation: handler.operation,
|
|
171
|
+
priority: handler.priority ?? 0,
|
|
172
|
+
guildIds: handler.guildIds,
|
|
173
|
+
order: handler.order,
|
|
174
|
+
})),
|
|
175
|
+
};
|
|
176
|
+
});
|
|
115
177
|
}
|
|
116
178
|
/** Register all advertised providers from an existing HTTP deployment.
|
|
117
179
|
* @param host Existing deployment and authentication.
|
|
@@ -150,7 +212,9 @@ export class PluginRegistry {
|
|
|
150
212
|
* @param options Source targeting and block list.
|
|
151
213
|
*/
|
|
152
214
|
supportsProtocol(protocol, options = {}) {
|
|
153
|
-
return
|
|
215
|
+
return ['search.query.match', 'search.query.resolve']
|
|
216
|
+
.flatMap((name) => this.handlers.get(name) ?? [])
|
|
217
|
+
.some((handler) => (handler.operation === 'search.query.match' || handler.operation === 'search.query.resolve') &&
|
|
154
218
|
handler.entry.active &&
|
|
155
219
|
(!options.pluginId || handler.entry.id === options.pluginId) &&
|
|
156
220
|
(options.hostId === undefined ||
|
|
@@ -208,6 +272,7 @@ export class PluginRegistry {
|
|
|
208
272
|
registration,
|
|
209
273
|
controller,
|
|
210
274
|
cleanups: [],
|
|
275
|
+
handlers: new Set(),
|
|
211
276
|
pending: new Set(),
|
|
212
277
|
active: false,
|
|
213
278
|
ready: Promise.resolve(),
|
|
@@ -217,11 +282,27 @@ export class PluginRegistry {
|
|
|
217
282
|
player: this.player,
|
|
218
283
|
options: registration.options,
|
|
219
284
|
signal: controller.signal,
|
|
285
|
+
provide: (name, value) => {
|
|
286
|
+
controller.signal.throwIfAborted();
|
|
287
|
+
if (!this.providerNames.has(name))
|
|
288
|
+
throw new Error(`Unsupported local provider: ${String(name)}`);
|
|
289
|
+
if (this.sealedProviders.has(name))
|
|
290
|
+
throw new Error(`Provider selection is sealed: ${String(name)}`);
|
|
291
|
+
if (this.providersIndex.has(name))
|
|
292
|
+
throw new Error(`Duplicate provider: ${String(name)}`);
|
|
293
|
+
if (!value)
|
|
294
|
+
throw new TypeError(`Provider implementation is required: ${String(name)}`);
|
|
295
|
+
this.providersIndex.set(name, { entry, value });
|
|
296
|
+
},
|
|
220
297
|
on: (operation, fn, options = {}) => {
|
|
221
298
|
controller.signal.throwIfAborted();
|
|
222
299
|
if (!this.definitions.has(operation)) {
|
|
223
300
|
throw new Error(`Undefined operation: ${operation}`);
|
|
224
301
|
}
|
|
302
|
+
if (this.synchronous.has(operation) && fn.constructor.name === 'AsyncFunction')
|
|
303
|
+
throw new TypeError(`Capability ${operation} requires a synchronous callback.`);
|
|
304
|
+
if (!Number.isFinite(options.priority ?? definition.priority ?? 0))
|
|
305
|
+
throw new TypeError('Handler priority must be finite.');
|
|
225
306
|
const handler = {
|
|
226
307
|
entry,
|
|
227
308
|
operation,
|
|
@@ -229,11 +310,19 @@ export class PluginRegistry {
|
|
|
229
310
|
priority: definition.priority,
|
|
230
311
|
...options,
|
|
231
312
|
...(definition.remoteHost && definition.priority !== undefined ? { priority: definition.priority } : {}),
|
|
313
|
+
...(options.guildIds ? { guildIds: Object.freeze([...options.guildIds]) } : {}),
|
|
232
314
|
order: this.order++,
|
|
233
315
|
};
|
|
234
|
-
|
|
316
|
+
entry.handlers.add(handler);
|
|
317
|
+
const list = this.handlers.get(operation) ?? [];
|
|
318
|
+
this.handlers.set(operation, [...list, handler].sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0) || a.order - b.order));
|
|
235
319
|
return () => {
|
|
236
|
-
|
|
320
|
+
entry.handlers.delete(handler);
|
|
321
|
+
const remaining = this.handlers.get(operation)?.filter((item) => item !== handler) ?? [];
|
|
322
|
+
if (remaining.length)
|
|
323
|
+
this.handlers.set(operation, remaining);
|
|
324
|
+
else
|
|
325
|
+
this.handlers.delete(operation);
|
|
237
326
|
};
|
|
238
327
|
},
|
|
239
328
|
onCleanup: (callback) => {
|
|
@@ -260,11 +349,35 @@ export class PluginRegistry {
|
|
|
260
349
|
throw new PluginError(entry.id, 'setup', cause);
|
|
261
350
|
}
|
|
262
351
|
});
|
|
263
|
-
|
|
352
|
+
this.initializing.add(entry.ready);
|
|
353
|
+
try {
|
|
354
|
+
await entry.ready;
|
|
355
|
+
}
|
|
356
|
+
finally {
|
|
357
|
+
this.initializing.delete(entry.ready);
|
|
358
|
+
}
|
|
264
359
|
}
|
|
265
360
|
async cleanup(entry) {
|
|
266
|
-
|
|
361
|
+
for (const operation of new Set([...entry.handlers].map((handler) => handler.operation))) {
|
|
362
|
+
const remaining = this.handlers.get(operation)?.filter((handler) => handler.entry !== entry) ?? [];
|
|
363
|
+
if (remaining.length)
|
|
364
|
+
this.handlers.set(operation, remaining);
|
|
365
|
+
else
|
|
366
|
+
this.handlers.delete(operation);
|
|
367
|
+
}
|
|
368
|
+
entry.handlers.clear();
|
|
267
369
|
const errors = [];
|
|
370
|
+
for (const [name, provider] of this.providersIndex) {
|
|
371
|
+
if (provider.entry !== entry)
|
|
372
|
+
continue;
|
|
373
|
+
this.providersIndex.delete(name);
|
|
374
|
+
try {
|
|
375
|
+
await provider.dispose?.();
|
|
376
|
+
}
|
|
377
|
+
catch (error) {
|
|
378
|
+
errors.push(new PluginError(entry.id, String(name), error));
|
|
379
|
+
}
|
|
380
|
+
}
|
|
268
381
|
try {
|
|
269
382
|
await entry.registration.definition.destroy?.(entry.context);
|
|
270
383
|
}
|
|
@@ -319,7 +432,8 @@ export class PluginRegistry {
|
|
|
319
432
|
}
|
|
320
433
|
/** Initialize pending registrations before dispatch. */
|
|
321
434
|
async ready() {
|
|
322
|
-
|
|
435
|
+
if (this.initializing.size)
|
|
436
|
+
await Promise.all(this.initializing);
|
|
323
437
|
}
|
|
324
438
|
/** Destroy all registrations, attempting every cleanup even when one fails. */
|
|
325
439
|
async destroy() {
|
|
@@ -331,6 +445,90 @@ export class PluginRegistry {
|
|
|
331
445
|
throw new AggregateError(errors, 'Plugin cleanup failed');
|
|
332
446
|
}
|
|
333
447
|
}
|
|
448
|
+
/** Whether an operation has active subscribers. Does not scan unrelated registrations.
|
|
449
|
+
* @param operation Capability name.
|
|
450
|
+
* @returns Whether at least one active handler exists.
|
|
451
|
+
*/
|
|
452
|
+
hasCapability(operation) {
|
|
453
|
+
return this.handlers.get(operation)?.some((handler) => handler.entry.active) ?? false;
|
|
454
|
+
}
|
|
455
|
+
/** Reject reentrant application operations from synchronous capability handlers. */
|
|
456
|
+
assertNotDispatching() {
|
|
457
|
+
if (this.dispatching)
|
|
458
|
+
throw new Error('Reentrant application operations inside a capability handler are unsupported.');
|
|
459
|
+
}
|
|
460
|
+
/** Dispatch a synchronous local capability without scheduling promises.
|
|
461
|
+
* @param operation Capability defined with synchronous execution.
|
|
462
|
+
* @param input Validated operation payload.
|
|
463
|
+
* @param options Scope and cancellation constraints.
|
|
464
|
+
* @returns The selected result, or transformed input for pipe operations.
|
|
465
|
+
*/
|
|
466
|
+
executeSync(operation, input, options = {}) {
|
|
467
|
+
options.signal?.throwIfAborted();
|
|
468
|
+
if (!this.synchronous.has(operation))
|
|
469
|
+
throw new Error(`Operation is not synchronous: ${operation}`);
|
|
470
|
+
const policy = this.definitions.get(operation);
|
|
471
|
+
const list = this.handlers.get(operation);
|
|
472
|
+
if (!list?.length)
|
|
473
|
+
return (policy === 'pipe' ? input : undefined);
|
|
474
|
+
this.assertNotDispatching();
|
|
475
|
+
this.dispatching = true;
|
|
476
|
+
let value = input;
|
|
477
|
+
const errors = [];
|
|
478
|
+
try {
|
|
479
|
+
for (const handler of selectHandlers(operation, input, options, {
|
|
480
|
+
handlers: this.handlers,
|
|
481
|
+
definitions: this.definitions,
|
|
482
|
+
blocked: this.blocked,
|
|
483
|
+
resultOwners: this.resultOwners,
|
|
484
|
+
})) {
|
|
485
|
+
const signal = options.signal
|
|
486
|
+
? AbortSignal.any([options.signal, handler.entry.controller.signal])
|
|
487
|
+
: handler.entry.controller.signal;
|
|
488
|
+
signal.throwIfAborted();
|
|
489
|
+
try {
|
|
490
|
+
const result = handler.fn(policy === 'pipe' || policy === 'intercept' ? value : input, { signal });
|
|
491
|
+
if (result && typeof result === 'object' && 'then' in result) {
|
|
492
|
+
const pending = Promise.resolve(result);
|
|
493
|
+
handler.entry.pending.add(pending);
|
|
494
|
+
void pending.then(() => handler.entry.pending.delete(pending), () => handler.entry.pending.delete(pending));
|
|
495
|
+
throw new TypeError('Synchronous capability handlers must not return promises.');
|
|
496
|
+
}
|
|
497
|
+
signal.throwIfAborted();
|
|
498
|
+
if (result !== undefined && policy === 'intercept') {
|
|
499
|
+
if (!result || typeof result !== 'object' || !('action' in result))
|
|
500
|
+
throw new TypeError('Expected an explicit capability decision.');
|
|
501
|
+
if (result.action === 'cancel') {
|
|
502
|
+
if (!('reason' in result) || typeof result.reason !== 'string')
|
|
503
|
+
throw new TypeError('Cancellation requires a reason.');
|
|
504
|
+
return result;
|
|
505
|
+
}
|
|
506
|
+
if (result.action !== 'replace' || !('value' in result))
|
|
507
|
+
throw new TypeError('Expected cancel or replace.');
|
|
508
|
+
value = result.value;
|
|
509
|
+
}
|
|
510
|
+
if (result !== undefined && policy === 'first')
|
|
511
|
+
return result;
|
|
512
|
+
if (result !== undefined && policy === 'pipe')
|
|
513
|
+
value = result;
|
|
514
|
+
}
|
|
515
|
+
catch (cause) {
|
|
516
|
+
const error = new PluginError(handler.entry.id, operation, cause);
|
|
517
|
+
if (policy !== 'broadcast')
|
|
518
|
+
throw error;
|
|
519
|
+
errors.push(error);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
if (errors.length === 1)
|
|
523
|
+
throw errors[0];
|
|
524
|
+
if (errors.length)
|
|
525
|
+
throw new AggregateError(errors, `Observers failed during ${operation}`);
|
|
526
|
+
return (policy === 'pipe' ? value : policy === 'intercept' ? { action: 'replace', value } : undefined);
|
|
527
|
+
}
|
|
528
|
+
finally {
|
|
529
|
+
this.dispatching = false;
|
|
530
|
+
}
|
|
531
|
+
}
|
|
334
532
|
/** Execute using the operation's declared policy. Genuine failures reject immediately.
|
|
335
533
|
* @param operation Typed operation name.
|
|
336
534
|
* @param input Operation payload.
|
|
@@ -338,13 +536,24 @@ export class PluginRegistry {
|
|
|
338
536
|
* @returns Result inferred from the operation policy.
|
|
339
537
|
*/
|
|
340
538
|
async execute(operation, input, options = {}) {
|
|
341
|
-
|
|
539
|
+
if (this.synchronous.has(operation))
|
|
540
|
+
return this.executeSync(operation, input, options);
|
|
541
|
+
const guarded = operation.startsWith('media.') ||
|
|
542
|
+
operation.startsWith('serialization.') ||
|
|
543
|
+
operation === 'search.beforeQuery' ||
|
|
544
|
+
operation === 'search.afterResults';
|
|
545
|
+
if (!guarded)
|
|
546
|
+
return this.run(operation, input, options);
|
|
547
|
+
const active = this.calls.getStore();
|
|
548
|
+
if (active?.has(operation))
|
|
549
|
+
throw new Error(`Recursive capability dispatch: ${operation}`);
|
|
550
|
+
return this.calls.run(new Set([...(active ?? []), operation]), () => this.run(operation, input, options));
|
|
342
551
|
}
|
|
343
552
|
async run(operation, input, options, handled) {
|
|
344
553
|
const track = input && typeof input === 'object' && 'track' in input ? input.track : undefined;
|
|
345
554
|
if (track?.sourceReference?.hostId &&
|
|
346
555
|
track.sourceReference.hostId !== this.hostId &&
|
|
347
|
-
!this.handlers.some((handler) => handler.operation === operation &&
|
|
556
|
+
!(this.handlers.get(operation) ?? []).some((handler) => handler.operation === operation &&
|
|
348
557
|
handler.entry.active &&
|
|
349
558
|
handler.entry.registration.definition.remoteHost?.hostId === track.sourceReference?.hostId)) {
|
|
350
559
|
throw new Error(`Source host ${track.sourceReference.hostId} is unavailable in this runtime; execute this Track on its owning source host`);
|
|
@@ -373,6 +582,8 @@ export class PluginRegistry {
|
|
|
373
582
|
* @returns Whether a byte transformation would be invoked.
|
|
374
583
|
*/
|
|
375
584
|
hasStreamTransforms(pluginId, options = {}) {
|
|
585
|
+
if (this.hasCapability('media.transform'))
|
|
586
|
+
return true;
|
|
376
587
|
return (selectHandlers('stream.transform', {}, { ...options, pluginId }, {
|
|
377
588
|
handlers: this.handlers,
|
|
378
589
|
definitions: this.definitions,
|
|
@@ -380,12 +591,46 @@ export class PluginRegistry {
|
|
|
380
591
|
resultOwners: this.resultOwners,
|
|
381
592
|
}).length > 0);
|
|
382
593
|
}
|
|
594
|
+
/** Serialize using modern application-metadata transformations. Plain model serialization remains synchronous.
|
|
595
|
+
* @param entity Track or playlist to persist.
|
|
596
|
+
* @param options Cancellation and provider scope.
|
|
597
|
+
* @returns A validated JSON persistence payload, without playback grants or live streams.
|
|
598
|
+
*/
|
|
599
|
+
async serialize(entity, options = {}) {
|
|
600
|
+
const input = serialize(entity);
|
|
601
|
+
const result = this.hasCapability('serialization.afterSerialize')
|
|
602
|
+
? await this.execute('serialization.afterSerialize', input, options)
|
|
603
|
+
: input;
|
|
604
|
+
return parseEntity(result);
|
|
605
|
+
}
|
|
606
|
+
/** Restore through modern metadata transformations and the existing schema validator.
|
|
607
|
+
* @param payload Untrusted persistence payload.
|
|
608
|
+
* @param options Cancellation and provider scope.
|
|
609
|
+
* @returns A restored entity without ephemeral playback state.
|
|
610
|
+
*/
|
|
611
|
+
async restore(payload, options = {}) {
|
|
612
|
+
const input = parseEntity(payload);
|
|
613
|
+
const result = this.hasCapability('serialization.beforeRestore')
|
|
614
|
+
? await this.execute('serialization.beforeRestore', input, options)
|
|
615
|
+
: input;
|
|
616
|
+
return deserialize(parseEntity(result));
|
|
617
|
+
}
|
|
383
618
|
/** Resolve and normalize a track for the already selected Remedia node.
|
|
384
619
|
* @param track Data model with a portable provider reference.
|
|
385
620
|
* @param options Target node mode and cancellation.
|
|
386
621
|
*/
|
|
387
622
|
async resolveStream(track, options = {}) {
|
|
388
|
-
|
|
623
|
+
if (this.hasCapability('media.beforeResolve')) {
|
|
624
|
+
const originalPluginId = track.sourceReference?.pluginId;
|
|
625
|
+
const originalHostId = track.sourceReference?.hostId;
|
|
626
|
+
const prepared = await this.execute('media.beforeResolve', { track }, { signal: options.signal });
|
|
627
|
+
if (!prepared ||
|
|
628
|
+
prepared.track.sourceReference?.pluginId !== originalPluginId ||
|
|
629
|
+
prepared.track.sourceReference?.hostId !== originalHostId)
|
|
630
|
+
throw new TypeError('media.beforeResolve must preserve provider and deployment identity.');
|
|
631
|
+
track = prepared.track;
|
|
632
|
+
}
|
|
633
|
+
return resolveTrackStream(track, options, (operation, input, execution, handled) => this.run(operation, input, execution, handled), (owner) => this.hasStreamTransforms(owner, options), (operation) => this.hasCapability(operation));
|
|
389
634
|
}
|
|
390
635
|
}
|
|
391
636
|
//# sourceMappingURL=registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/plugins/registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/plugins/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,9 +10,10 @@ export class DeferredSourceRequired extends Error {
|
|
|
10
10
|
* @param options Selected node mode and playback lifetime.
|
|
11
11
|
* @param run Shared operation runner.
|
|
12
12
|
* @param hasTransforms Inspect applicable transformations for the resolved owner.
|
|
13
|
+
* @param hasCapability Inspect shared modern media subscriptions.
|
|
13
14
|
* @returns Normalized playable media source.
|
|
14
15
|
*/
|
|
15
|
-
export async function resolveTrackStream(track, options, run, hasTransforms) {
|
|
16
|
+
export async function resolveTrackStream(track, options, run, hasTransforms, hasCapability = () => true) {
|
|
16
17
|
const pluginId = track.sourceReference?.pluginId;
|
|
17
18
|
let owner = pluginId;
|
|
18
19
|
let lifetime;
|
|
@@ -38,6 +39,29 @@ export async function resolveTrackStream(track, options, run, hasTransforms) {
|
|
|
38
39
|
: result instanceof Uint8Array
|
|
39
40
|
? { buffer: result }
|
|
40
41
|
: result;
|
|
42
|
+
// Intercept before transport authorization/materialization so changed URLs pass the same access policy.
|
|
43
|
+
try {
|
|
44
|
+
if (hasCapability('media.descriptor')) {
|
|
45
|
+
const descriptor = await run('media.descriptor', { source, guildId: options.guildId ?? null }, { ...options, pluginId: undefined });
|
|
46
|
+
if (!descriptor || !descriptor.source || typeof descriptor.source !== 'object')
|
|
47
|
+
throw new TypeError('media.descriptor requires a media source.');
|
|
48
|
+
const next = descriptor.source;
|
|
49
|
+
if (!('url' in next && typeof next.url === 'string') &&
|
|
50
|
+
!('file' in next && typeof next.file === 'string') &&
|
|
51
|
+
!('stream' in next && next.stream instanceof Readable) &&
|
|
52
|
+
!('buffer' in next && next.buffer instanceof Uint8Array) &&
|
|
53
|
+
!('hostId' in next && typeof next.hostId === 'string'))
|
|
54
|
+
throw new TypeError('media.descriptor returned an invalid media source.');
|
|
55
|
+
if ('stream' in source && (!('stream' in next) || next.stream !== source.stream))
|
|
56
|
+
throw new TypeError('Use media.transform to replace encoded streams.');
|
|
57
|
+
source = next;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if ('stream' in source)
|
|
62
|
+
source.stream.destroy();
|
|
63
|
+
throw error;
|
|
64
|
+
}
|
|
41
65
|
if (options.directUrlOnly) {
|
|
42
66
|
if (!('url' in source)) {
|
|
43
67
|
if ('stream' in source)
|
|
@@ -76,11 +100,20 @@ export async function resolveTrackStream(track, options, run, hasTransforms) {
|
|
|
76
100
|
}
|
|
77
101
|
if ('stream' in source) {
|
|
78
102
|
const transformed = await run('stream.transform', { track, stream: source.stream }, { ...options, pluginId: owner });
|
|
103
|
+
if (transformed && !(transformed.stream instanceof Readable))
|
|
104
|
+
throw new TypeError('Stream transformation must return a Readable.');
|
|
79
105
|
if (transformed) {
|
|
80
106
|
source = { ...source, stream: transformed.stream };
|
|
81
107
|
streams.add(transformed.stream);
|
|
82
108
|
}
|
|
83
109
|
}
|
|
110
|
+
if ('stream' in source) {
|
|
111
|
+
const transformed = await run('media.transform', { track, stream: source.stream }, { ...options, pluginId: undefined });
|
|
112
|
+
if (!transformed || !(transformed.stream instanceof Readable))
|
|
113
|
+
throw new TypeError('media.transform requires an encoded Readable.');
|
|
114
|
+
streams.add(transformed.stream);
|
|
115
|
+
source = { ...source, stream: transformed.stream };
|
|
116
|
+
}
|
|
84
117
|
await run('track.stream.resolved', { track }, { ...options, pluginId: owner });
|
|
85
118
|
signal?.throwIfAborted();
|
|
86
119
|
if (streams.size && signal) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-resolver.js","sourceRoot":"","sources":["../../src/plugins/stream-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,wFAAwF;AACxF,MAAM,OAAO,sBAAuB,SAAQ,KAAK;CAAG;AAEpD
|
|
1
|
+
{"version":3,"file":"stream-resolver.js","sourceRoot":"","sources":["../../src/plugins/stream-resolver.ts"],"names":[],"mappings":"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"}
|
package/dist/plugins/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SerializedEntityUnion } from '../utils/serde.js';
|
|
1
2
|
import type { RemotePluginHostOptions } from '../remote.js';
|
|
2
3
|
import type { LyricsRequest, LyricsResult } from '../lyrics.js';
|
|
3
4
|
import type { Readable } from 'node:stream';
|
|
@@ -22,7 +23,7 @@ export type SourceStream = (MediaSource & {
|
|
|
22
23
|
expiresAtMs?: number;
|
|
23
24
|
}) | string | Uint8Array | Readable;
|
|
24
25
|
/** Operation dispatch behavior. */
|
|
25
|
-
export type DispatchPolicy = 'first' | 'collect' | 'pipe' | 'broadcast';
|
|
26
|
+
export type DispatchPolicy = 'first' | 'collect' | 'pipe' | 'broadcast' | 'intercept';
|
|
26
27
|
/** Declaration merged operation contract. */
|
|
27
28
|
export interface Operation<Input, Output, Policy extends DispatchPolicy> {
|
|
28
29
|
/** Handler input. */
|
|
@@ -74,6 +75,26 @@ export interface SourceStreamTransform extends SourceTrackRequest {
|
|
|
74
75
|
}
|
|
75
76
|
/** Extensible source operation contracts. Augmented operations also need host definitions. */
|
|
76
77
|
export interface OperationMap {
|
|
78
|
+
/** Transform a validated persistence payload before restoring an entity. */
|
|
79
|
+
'serialization.beforeRestore': Operation<SerializedEntityUnion, SerializedEntityUnion, 'pipe'>;
|
|
80
|
+
/** Transform serialized application metadata; the result is validated again. */
|
|
81
|
+
'serialization.afterSerialize': Operation<SerializedEntityUnion, SerializedEntityUnion, 'pipe'>;
|
|
82
|
+
/** Transform source preparation while preserving portable provider identity. */
|
|
83
|
+
'media.beforeResolve': Operation<SourceTrackRequest, SourceTrackRequest, 'pipe'>;
|
|
84
|
+
/** Transform a portable search query before provider selection. */
|
|
85
|
+
'search.beforeQuery': Operation<SourceQuery, SourceQuery, 'pipe'>;
|
|
86
|
+
/** Transform metadata returned by search orchestration. */
|
|
87
|
+
'search.afterResults': Operation<SearchResultData, SearchResultData, 'pipe'>;
|
|
88
|
+
/** Transform encoded bytes across modern plugins, independent of source ownership. */
|
|
89
|
+
'media.transform': Operation<SourceStreamTransform, SourceStreamTransform, 'pipe'>;
|
|
90
|
+
/** Transform a resolved descriptor. Standalone execution has no guild context. */
|
|
91
|
+
'media.descriptor': Operation<{
|
|
92
|
+
readonly source: MediaSource;
|
|
93
|
+
readonly guildId: string | null;
|
|
94
|
+
}, {
|
|
95
|
+
readonly source: MediaSource;
|
|
96
|
+
readonly guildId: string | null;
|
|
97
|
+
}, 'pipe'>;
|
|
77
98
|
/** Optional lyrics lookup, independent of all source operations. */
|
|
78
99
|
'lyrics.search': Operation<LyricsRequest, LyricsResult[] | null, 'collect'>;
|
|
79
100
|
/** Collect scored providers. */
|
|
@@ -91,6 +112,9 @@ export interface OperationMap {
|
|
|
91
112
|
/** Notification after a source is resolved. */
|
|
92
113
|
'track.stream.resolved': Operation<SourceTrackRequest, void, 'broadcast'>;
|
|
93
114
|
}
|
|
115
|
+
/** Declaration merged names restricted to synchronous callbacks. */
|
|
116
|
+
export interface SynchronousOperationMap {
|
|
117
|
+
}
|
|
94
118
|
/** Names available to source plugins. */
|
|
95
119
|
export type OperationName = keyof OperationMap;
|
|
96
120
|
/** Typed input selected by operation name. */
|
|
@@ -109,13 +133,18 @@ export interface OperationContext {
|
|
|
109
133
|
* @param context Invocation cancellation.
|
|
110
134
|
* @returns A handled result, or undefined to decline.
|
|
111
135
|
*/
|
|
112
|
-
export type OperationHandler<K extends OperationName> = (input: OperationInput<K>, context: OperationContext) => OperationOutput<K> | undefined | Promise<OperationOutput<K> | undefined
|
|
136
|
+
export type OperationHandler<K extends OperationName> = (input: OperationInput<K>, context: OperationContext) => OperationOutput<K> | undefined | (K extends keyof SynchronousOperationMap ? never : Promise<OperationOutput<K> | undefined>);
|
|
113
137
|
/** Handler ordering metadata. */
|
|
114
138
|
export interface HandlerOptions {
|
|
115
139
|
/** Higher values run first; equal priorities preserve registration order. */
|
|
116
140
|
priority?: number;
|
|
117
141
|
/** Protocols accepted by this handler; absent means unrestricted. */
|
|
118
142
|
protocols?: readonly string[];
|
|
143
|
+
/** Local guild constraints; unavailable guild context never matches. */
|
|
144
|
+
guildIds?: readonly string[];
|
|
145
|
+
}
|
|
146
|
+
/** Declaration-merged singleton services supplied only by modern plugins. */
|
|
147
|
+
export interface ProviderMap {
|
|
119
148
|
}
|
|
120
149
|
/** Source setup context shared by embedded and standalone execution. */
|
|
121
150
|
export interface PluginContext<Options> {
|
|
@@ -132,6 +161,11 @@ export interface PluginContext<Options> {
|
|
|
132
161
|
* @returns An idempotent subscription removal function.
|
|
133
162
|
*/
|
|
134
163
|
on<K extends OperationName>(operation: K, handler: OperationHandler<K>, options?: HandlerOptions): () => void;
|
|
164
|
+
/** Supply one locally owned implementation of a declared singleton capability.
|
|
165
|
+
* @param capability Provider capability declared by the embedding Player.
|
|
166
|
+
* @param implementation Registration-owned implementation.
|
|
167
|
+
*/
|
|
168
|
+
provide<K extends keyof ProviderMap>(capability: K, implementation: ProviderMap[K]): void;
|
|
135
169
|
/** Register cleanup, run in reverse order after active handlers settle.
|
|
136
170
|
* @param callback Resource cleanup.
|
|
137
171
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/plugins/types.ts"],"names":[],"mappings":"AAkRA;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,UAAqC;IAErC,OAAO,CAAC,CAAC,OAAO,GAAY,EAAa,EAAE,EAAE,CAAC,CAAC;QAC7C,UAAU;QACV,OAAO;KACR,CAAC,CAA2B,CAAC;AAChC,CAAC"}
|
package/dist/runtime.js
CHANGED
|
@@ -69,7 +69,7 @@ export class SourcePluginRuntime extends SafeEventEmitter {
|
|
|
69
69
|
: null;
|
|
70
70
|
const protocol = prefix && this.plugins.supportsProtocol(prefix[1], { pluginId: target, blocked }) ? prefix[1] : undefined;
|
|
71
71
|
const providerHint = target ? undefined : engine;
|
|
72
|
-
|
|
72
|
+
let input = {
|
|
73
73
|
query: protocol ? prefix[2] : query,
|
|
74
74
|
protocol,
|
|
75
75
|
providerHint,
|
|
@@ -80,6 +80,12 @@ export class SourcePluginRuntime extends SafeEventEmitter {
|
|
|
80
80
|
blockExtractors: options.blockExtractors,
|
|
81
81
|
},
|
|
82
82
|
};
|
|
83
|
+
if (this.plugins.hasCapability('search.beforeQuery')) {
|
|
84
|
+
const transformed = await this.plugins.execute('search.beforeQuery', input, { signal: options.signal });
|
|
85
|
+
if (!transformed || typeof transformed.query !== 'string')
|
|
86
|
+
throw new TypeError('search.beforeQuery requires a string query.');
|
|
87
|
+
input = { ...input, ...transformed };
|
|
88
|
+
}
|
|
83
89
|
const execution = { signal: options.signal, blocked, pluginId: target, hostId: options.hostId };
|
|
84
90
|
const matches = target
|
|
85
91
|
? [{ pluginId: target, score: 0, hostId: options.hostId }]
|
|
@@ -108,7 +114,14 @@ export class SourcePluginRuntime extends SafeEventEmitter {
|
|
|
108
114
|
if (options.requestedBy !== undefined)
|
|
109
115
|
track.requestedBy = options.requestedBy;
|
|
110
116
|
}
|
|
111
|
-
|
|
117
|
+
const transformed = this.plugins.hasCapability('search.afterResults')
|
|
118
|
+
? await this.plugins.execute('search.afterResults', result, { signal: options.signal })
|
|
119
|
+
: result;
|
|
120
|
+
if (!transformed ||
|
|
121
|
+
!Array.isArray(transformed.tracks) ||
|
|
122
|
+
!transformed.tracks.every((track) => track instanceof Track))
|
|
123
|
+
throw new TypeError('search.afterResults requires Track instances.');
|
|
124
|
+
return new SearchResult(transformed);
|
|
112
125
|
}
|
|
113
126
|
return SearchResult.empty();
|
|
114
127
|
}
|
package/dist/runtime.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
|