@media-engine/core 0.1.1 → 1.0.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/README.md +32 -6
- package/README.ru.md +32 -6
- package/dist/cache/memory.js +10 -8
- package/dist/cache/memory.js.map +1 -1
- package/dist/details/types.d.ts +6 -0
- package/dist/engine/availability.d.ts +1 -0
- package/dist/engine/availability.js +8 -0
- package/dist/engine/availability.js.map +1 -1
- package/dist/engine/circuit-breaker.d.ts +1 -0
- package/dist/engine/circuit-breaker.js +11 -0
- package/dist/engine/circuit-breaker.js.map +1 -1
- package/dist/engine/concurrency-limiter.js +2 -2
- package/dist/engine/concurrency-limiter.js.map +1 -1
- package/dist/engine/engine.d.ts +9 -4
- package/dist/engine/engine.js +277 -102
- package/dist/engine/engine.js.map +1 -1
- package/dist/engine/in-flight.d.ts +12 -1
- package/dist/engine/in-flight.js +69 -14
- package/dist/engine/in-flight.js.map +1 -1
- package/dist/engine/operation.d.ts +7 -0
- package/dist/engine/operation.js +49 -0
- package/dist/engine/operation.js.map +1 -0
- package/dist/engine/provider-calls.d.ts +10 -0
- package/dist/engine/provider-calls.js +62 -12
- package/dist/engine/provider-calls.js.map +1 -1
- package/dist/engine/query.d.ts +5 -0
- package/dist/engine/query.js +223 -34
- package/dist/engine/query.js.map +1 -1
- package/dist/engine/response-meta.d.ts +3 -1
- package/dist/engine/response-meta.js +8 -1
- package/dist/engine/response-meta.js.map +1 -1
- package/dist/engine/runtime.d.ts +2 -0
- package/dist/engine/runtime.js +19 -0
- package/dist/engine/runtime.js.map +1 -1
- package/dist/engine/search-discovery.d.ts +3 -0
- package/dist/engine/search-discovery.js +35 -0
- package/dist/engine/search-discovery.js.map +1 -0
- package/dist/engine/search-enrichment-shared.d.ts +23 -0
- package/dist/engine/search-enrichment-shared.js +68 -0
- package/dist/engine/search-enrichment-shared.js.map +1 -0
- package/dist/engine/search-enrichment.d.ts +21 -7
- package/dist/engine/search-enrichment.js +135 -75
- package/dist/engine/search-enrichment.js.map +1 -1
- package/dist/engine/search-identity-snapshot.d.ts +15 -0
- package/dist/engine/search-identity-snapshot.js +101 -0
- package/dist/engine/search-identity-snapshot.js.map +1 -0
- package/dist/engine/search-outcomes.d.ts +32 -0
- package/dist/engine/search-outcomes.js +118 -0
- package/dist/engine/search-outcomes.js.map +1 -0
- package/dist/engine/search-poster-enrichment.d.ts +31 -0
- package/dist/engine/search-poster-enrichment.js +93 -0
- package/dist/engine/search-poster-enrichment.js.map +1 -0
- package/dist/engine/search-result-freeze.d.ts +13 -0
- package/dist/engine/search-result-freeze.js +155 -0
- package/dist/engine/search-result-freeze.js.map +1 -0
- package/dist/engine/torrents.d.ts +22 -0
- package/dist/engine/torrents.js +188 -0
- package/dist/engine/torrents.js.map +1 -0
- package/dist/engine/types.d.ts +6 -1
- package/dist/errors/types.d.ts +1 -1
- package/dist/errors/types.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/media/types.d.ts +1 -1
- package/dist/merge/diversity.d.ts +15 -0
- package/dist/merge/diversity.js +52 -0
- package/dist/merge/diversity.js.map +1 -0
- package/dist/merge/priority.js +3 -1
- package/dist/merge/priority.js.map +1 -1
- package/dist/merge/scoring.d.ts +10 -0
- package/dist/merge/scoring.js +132 -28
- package/dist/merge/scoring.js.map +1 -1
- package/dist/merge/strategy.js +53 -13
- package/dist/merge/strategy.js.map +1 -1
- package/dist/providers/registry.d.ts +4 -2
- package/dist/providers/registry.js +11 -2
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/types.d.ts +3 -0
- package/dist/response/types.d.ts +20 -0
- package/dist/search/types.d.ts +34 -0
- package/dist/testing/providers.js +2 -0
- package/dist/testing/providers.js.map +1 -1
- package/dist/torrent/index.d.ts +1 -0
- package/dist/torrent/index.js +2 -0
- package/dist/torrent/index.js.map +1 -0
- package/dist/torrent/types.d.ts +132 -0
- package/dist/torrent/types.js +2 -0
- package/dist/torrent/types.js.map +1 -0
- package/package.json +8 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/providers/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,11 +2,14 @@ import type { ExternalIds, MediaDetails, MediaItem, MediaType, ProviderSource }
|
|
|
2
2
|
export type ProviderKind = "metadata";
|
|
3
3
|
export type ExternalIdSource = "imdb" | "tmdb" | "kinopoisk" | "shikimori" | "myAnimeList" | "aniList" | "worldArt";
|
|
4
4
|
export type ProviderFeature = "posters" | "backdrops" | "ratings" | "genres" | "persons" | "seasons" | "episodes" | "alternative_titles";
|
|
5
|
+
export type TitleDiscoveryRole = "primary" | "fallback";
|
|
5
6
|
export interface ProviderCapabilities {
|
|
6
7
|
mediaTypes: MediaType[];
|
|
8
|
+
searchEnrichment?: boolean;
|
|
7
9
|
search: {
|
|
8
10
|
byTitle: boolean;
|
|
9
11
|
byExternalIds: ExternalIdSource[];
|
|
12
|
+
titleDiscovery?: TitleDiscoveryRole;
|
|
10
13
|
};
|
|
11
14
|
details: {
|
|
12
15
|
byExternalIds: ExternalIdSource[];
|
package/dist/response/types.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
export type ProviderExecutionPhase = "primary" | "retry" | "fallback" | "provider_fallback" | "id_enrichment" | "poster_enrichment";
|
|
1
2
|
export interface ProviderFailure {
|
|
2
3
|
provider: string;
|
|
3
4
|
code: string;
|
|
4
5
|
retryable: boolean;
|
|
5
6
|
message: string;
|
|
7
|
+
phase?: ProviderExecutionPhase;
|
|
6
8
|
}
|
|
7
9
|
export interface ProviderExecutionMeta {
|
|
8
10
|
requested: string[];
|
|
@@ -13,15 +15,33 @@ export interface ProviderTimingMeta {
|
|
|
13
15
|
provider: string;
|
|
14
16
|
status: "success" | "failed";
|
|
15
17
|
tookMs: number;
|
|
18
|
+
phase?: ProviderExecutionPhase;
|
|
16
19
|
}
|
|
17
20
|
export interface EngineWarning {
|
|
18
21
|
code: string;
|
|
19
22
|
message: string;
|
|
20
23
|
provider?: string;
|
|
21
24
|
}
|
|
25
|
+
export interface SearchEnrichmentCounters {
|
|
26
|
+
attempted: number;
|
|
27
|
+
skipped: number;
|
|
28
|
+
succeeded: number;
|
|
29
|
+
failed: number;
|
|
30
|
+
}
|
|
31
|
+
export interface SearchEnrichmentDebugMeta {
|
|
32
|
+
id: SearchEnrichmentCounters;
|
|
33
|
+
poster: SearchEnrichmentCounters;
|
|
34
|
+
}
|
|
35
|
+
export interface SearchIdentitySnapshotDebugMeta {
|
|
36
|
+
applied: true;
|
|
37
|
+
restored: number;
|
|
38
|
+
reordered: number;
|
|
39
|
+
}
|
|
22
40
|
export interface ResponseDebugMeta {
|
|
23
41
|
providers: string[];
|
|
24
42
|
timings: ProviderTimingMeta[];
|
|
43
|
+
enrichment?: SearchEnrichmentDebugMeta;
|
|
44
|
+
identitySnapshot?: SearchIdentitySnapshotDebugMeta;
|
|
25
45
|
}
|
|
26
46
|
export interface ResponseMeta {
|
|
27
47
|
providers: ProviderExecutionMeta;
|
package/dist/search/types.d.ts
CHANGED
|
@@ -14,10 +14,44 @@ export interface SearchQuery {
|
|
|
14
14
|
limit?: number;
|
|
15
15
|
language?: string;
|
|
16
16
|
}
|
|
17
|
+
export type SearchTitleMatchKind = "not_applicable" | "none" | "exact_primary" | "exact_alias" | "joined" | "prefix" | "contains" | "all_tokens" | "fuzzy";
|
|
18
|
+
export interface SearchRankSignal {
|
|
19
|
+
value: number;
|
|
20
|
+
weight: number;
|
|
21
|
+
contribution: number;
|
|
22
|
+
}
|
|
23
|
+
export interface SearchRankEvidence {
|
|
24
|
+
formula: "external_id" | "non_text" | "text";
|
|
25
|
+
matchStrength: "exact_id" | "exact_title_year_type" | "normalized_title_year_type" | "weak" | "none";
|
|
26
|
+
titleMatch: {
|
|
27
|
+
kind: SearchTitleMatchKind;
|
|
28
|
+
score: number;
|
|
29
|
+
matchedTitle?: string;
|
|
30
|
+
};
|
|
31
|
+
signals: {
|
|
32
|
+
base: SearchRankSignal;
|
|
33
|
+
title: SearchRankSignal;
|
|
34
|
+
exactPrimaryTitle: SearchRankSignal;
|
|
35
|
+
popularity: SearchRankSignal;
|
|
36
|
+
rating: SearchRankSignal;
|
|
37
|
+
externalIds: SearchRankSignal;
|
|
38
|
+
sourceCoverage: SearchRankSignal;
|
|
39
|
+
sourceAuthority: SearchRankSignal;
|
|
40
|
+
};
|
|
41
|
+
preBoundedScore: number;
|
|
42
|
+
scorePosition: number;
|
|
43
|
+
diversityPosition: number;
|
|
44
|
+
finalPosition: number;
|
|
45
|
+
diversity: {
|
|
46
|
+
family: string;
|
|
47
|
+
adjusted: boolean;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
17
50
|
export interface MediaSearchResult {
|
|
18
51
|
item: MediaItem;
|
|
19
52
|
score: number;
|
|
20
53
|
sources: ProviderSource[];
|
|
54
|
+
ranking?: SearchRankEvidence;
|
|
21
55
|
}
|
|
22
56
|
export interface SearchResponse {
|
|
23
57
|
query: SearchQuery;
|
|
@@ -110,6 +110,7 @@ export function createDetailsResult(provider, details = sampleMovie) {
|
|
|
110
110
|
function createCapabilities(overrides = {}) {
|
|
111
111
|
return {
|
|
112
112
|
mediaTypes: overrides.mediaTypes ?? ["movie", "series", "anime"],
|
|
113
|
+
searchEnrichment: overrides.searchEnrichment,
|
|
113
114
|
search: {
|
|
114
115
|
byTitle: overrides.search?.byTitle ?? true,
|
|
115
116
|
byExternalIds: overrides.search?.byExternalIds ?? [
|
|
@@ -118,6 +119,7 @@ function createCapabilities(overrides = {}) {
|
|
|
118
119
|
"shikimori",
|
|
119
120
|
"myAnimeList",
|
|
120
121
|
],
|
|
122
|
+
titleDiscovery: overrides.search?.titleDiscovery,
|
|
121
123
|
},
|
|
122
124
|
details: {
|
|
123
125
|
byExternalIds: overrides.details?.byExternalIds ?? [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/testing/providers.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/testing/providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type * from "./types.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/torrent/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import type { ExternalIds, MediaType } from "../media/index.js";
|
|
2
|
+
import type { ExternalIdSource, ProviderContext } from "../providers/index.js";
|
|
3
|
+
import type { ResponseMeta } from "../response/index.js";
|
|
4
|
+
export interface TorrentDiscoveryQuery {
|
|
5
|
+
type: MediaType;
|
|
6
|
+
ids?: ExternalIds;
|
|
7
|
+
imdb?: string;
|
|
8
|
+
tmdb?: string;
|
|
9
|
+
kinopoisk?: string;
|
|
10
|
+
shikimori?: string;
|
|
11
|
+
myAnimeList?: string;
|
|
12
|
+
aniList?: string;
|
|
13
|
+
title?: string;
|
|
14
|
+
alternativeTitles?: string[];
|
|
15
|
+
year?: number;
|
|
16
|
+
seasonNumber?: number;
|
|
17
|
+
episodeNumber?: number;
|
|
18
|
+
absoluteEpisodeNumber?: number;
|
|
19
|
+
providers?: string[];
|
|
20
|
+
language?: string;
|
|
21
|
+
limit?: number;
|
|
22
|
+
}
|
|
23
|
+
export interface TorrentMediaItem {
|
|
24
|
+
type: MediaType;
|
|
25
|
+
title?: string;
|
|
26
|
+
originalTitle?: string;
|
|
27
|
+
year?: number;
|
|
28
|
+
ids?: ExternalIds;
|
|
29
|
+
}
|
|
30
|
+
export interface TorrentEpisodeRef {
|
|
31
|
+
seasonNumber?: number;
|
|
32
|
+
episodeNumber?: number;
|
|
33
|
+
absoluteEpisodeNumber?: number;
|
|
34
|
+
episodeNumberEnd?: number;
|
|
35
|
+
absoluteEpisodeNumberEnd?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface TorrentFile {
|
|
38
|
+
index?: number;
|
|
39
|
+
path: string;
|
|
40
|
+
sizeBytes?: number;
|
|
41
|
+
mediaType?: "video" | "audio" | "subtitle" | "other";
|
|
42
|
+
}
|
|
43
|
+
export interface TorrentReleaseInfo {
|
|
44
|
+
source?: "bluray" | "web" | "hdtv" | "dvd" | "cam" | "unknown";
|
|
45
|
+
resolution?: string;
|
|
46
|
+
height?: number;
|
|
47
|
+
videoCodec?: string;
|
|
48
|
+
audioCodec?: string;
|
|
49
|
+
container?: string;
|
|
50
|
+
hdr?: string[];
|
|
51
|
+
audioLanguages?: string[];
|
|
52
|
+
subtitleLanguages?: string[];
|
|
53
|
+
}
|
|
54
|
+
export interface TorrentPeerInfo {
|
|
55
|
+
seeders?: number;
|
|
56
|
+
leechers?: number;
|
|
57
|
+
checkedAt?: string;
|
|
58
|
+
}
|
|
59
|
+
export interface TorrentCatalogSource {
|
|
60
|
+
id: string;
|
|
61
|
+
displayName?: string;
|
|
62
|
+
}
|
|
63
|
+
export type TorrentHandoffKind = "magnet" | "torrent_file" | "external";
|
|
64
|
+
export interface TorrentHandoff {
|
|
65
|
+
kind: TorrentHandoffKind;
|
|
66
|
+
uri: string;
|
|
67
|
+
method?: "GET" | "POST";
|
|
68
|
+
headers?: Record<string, string>;
|
|
69
|
+
referer?: string;
|
|
70
|
+
}
|
|
71
|
+
export type TorrentAvailabilityStatus = "available" | "unseeded" | "unknown";
|
|
72
|
+
export interface TorrentCandidate {
|
|
73
|
+
id: string;
|
|
74
|
+
provider: string;
|
|
75
|
+
title: string;
|
|
76
|
+
infoHash?: string;
|
|
77
|
+
sizeBytes?: number;
|
|
78
|
+
publishedAt?: string;
|
|
79
|
+
episode?: TorrentEpisodeRef;
|
|
80
|
+
files?: TorrentFile[];
|
|
81
|
+
release?: TorrentReleaseInfo;
|
|
82
|
+
peers?: TorrentPeerInfo;
|
|
83
|
+
handoff: TorrentHandoff;
|
|
84
|
+
availability: TorrentAvailabilityStatus;
|
|
85
|
+
catalogSource?: TorrentCatalogSource;
|
|
86
|
+
expiresAt?: string;
|
|
87
|
+
sourceUrl?: string;
|
|
88
|
+
}
|
|
89
|
+
export interface TorrentProviderSource {
|
|
90
|
+
provider: string;
|
|
91
|
+
url?: string;
|
|
92
|
+
ids?: ExternalIds;
|
|
93
|
+
}
|
|
94
|
+
export interface TorrentDiscoveryResponse {
|
|
95
|
+
query: TorrentDiscoveryQuery;
|
|
96
|
+
item?: TorrentMediaItem;
|
|
97
|
+
candidates: TorrentCandidate[];
|
|
98
|
+
sourceProviders: TorrentProviderSource[];
|
|
99
|
+
checkedAt: string;
|
|
100
|
+
meta?: ResponseMeta;
|
|
101
|
+
}
|
|
102
|
+
export type TorrentProviderFeature = "magnet" | "torrent_file" | "external" | "file_list" | "peer_stats" | "release_metadata";
|
|
103
|
+
export interface TorrentProviderCapabilities {
|
|
104
|
+
mediaTypes: MediaType[];
|
|
105
|
+
lookup: {
|
|
106
|
+
byTitle: boolean;
|
|
107
|
+
byExternalIds: ExternalIdSource[];
|
|
108
|
+
byEpisode: boolean;
|
|
109
|
+
};
|
|
110
|
+
features?: TorrentProviderFeature[];
|
|
111
|
+
}
|
|
112
|
+
export type TorrentProviderCatalogScope = "regional" | "international";
|
|
113
|
+
export interface TorrentProviderCatalog {
|
|
114
|
+
displayName: string;
|
|
115
|
+
scope: TorrentProviderCatalogScope;
|
|
116
|
+
locale?: string;
|
|
117
|
+
}
|
|
118
|
+
export interface TorrentProviderInfo {
|
|
119
|
+
name: string;
|
|
120
|
+
version?: string;
|
|
121
|
+
kind: "torrent";
|
|
122
|
+
catalog?: TorrentProviderCatalog;
|
|
123
|
+
capabilities: TorrentProviderCapabilities;
|
|
124
|
+
}
|
|
125
|
+
export interface TorrentProvider {
|
|
126
|
+
name: string;
|
|
127
|
+
version?: string;
|
|
128
|
+
kind: "torrent";
|
|
129
|
+
catalog?: TorrentProviderCatalog;
|
|
130
|
+
capabilities: TorrentProviderCapabilities;
|
|
131
|
+
discoverTorrents(query: TorrentDiscoveryQuery, context: ProviderContext): Promise<TorrentDiscoveryResponse | null>;
|
|
132
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/torrent/types.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@media-engine/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0",
|
|
4
4
|
"description": "Core TypeScript engine for Media Engine.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/Yaneart/media-engine#readme",
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
"movies",
|
|
19
19
|
"series",
|
|
20
20
|
"anime",
|
|
21
|
+
"torrent",
|
|
21
22
|
"shikimori"
|
|
22
23
|
],
|
|
23
24
|
"type": "module",
|
|
@@ -48,8 +49,12 @@
|
|
|
48
49
|
"access": "public"
|
|
49
50
|
},
|
|
50
51
|
"scripts": {
|
|
51
|
-
"
|
|
52
|
+
"clean": "node ../../scripts/clean-package-dist.mjs",
|
|
53
|
+
"build": "pnpm clean && tsc -p tsconfig.json",
|
|
54
|
+
"coverage": "pnpm build && pnpm coverage:unit",
|
|
55
|
+
"coverage:unit": "node ../../scripts/run-node-tests.mjs --coverage --lines=96 --branches=92 --functions=95",
|
|
52
56
|
"typecheck": "tsc -p tsconfig.json --noEmit",
|
|
53
|
-
"test": "pnpm build &&
|
|
57
|
+
"test": "pnpm build && pnpm test:unit",
|
|
58
|
+
"test:unit": "node ../../scripts/run-node-tests.mjs"
|
|
54
59
|
}
|
|
55
60
|
}
|