@media-engine/providers 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.
Files changed (204) hide show
  1. package/README.md +132 -3
  2. package/README.ru.md +134 -3
  3. package/dist/aniliberty-streaming/client.d.ts +33 -0
  4. package/dist/aniliberty-streaming/client.js +188 -0
  5. package/dist/aniliberty-streaming/client.js.map +1 -0
  6. package/dist/aniliberty-streaming/config.d.ts +24 -0
  7. package/dist/aniliberty-streaming/config.js +61 -0
  8. package/dist/aniliberty-streaming/config.js.map +1 -0
  9. package/dist/aniliberty-streaming/index.d.ts +4 -0
  10. package/dist/aniliberty-streaming/index.js +45 -0
  11. package/dist/aniliberty-streaming/index.js.map +1 -0
  12. package/dist/aniliberty-streaming/mapping.d.ts +3 -0
  13. package/dist/aniliberty-streaming/mapping.js +87 -0
  14. package/dist/aniliberty-streaming/mapping.js.map +1 -0
  15. package/dist/aniliberty-streaming/matching.d.ts +4 -0
  16. package/dist/aniliberty-streaming/matching.js +44 -0
  17. package/dist/aniliberty-streaming/matching.js.map +1 -0
  18. package/dist/anilist/graphql.d.ts +2 -0
  19. package/dist/anilist/graphql.js +135 -0
  20. package/dist/anilist/graphql.js.map +1 -0
  21. package/dist/anilist/index.js +8 -6
  22. package/dist/anilist/index.js.map +1 -1
  23. package/dist/bitsearch-torrent/client.d.ts +19 -0
  24. package/dist/bitsearch-torrent/client.js +181 -0
  25. package/dist/bitsearch-torrent/client.js.map +1 -0
  26. package/dist/bitsearch-torrent/config.d.ts +26 -0
  27. package/dist/bitsearch-torrent/config.js +74 -0
  28. package/dist/bitsearch-torrent/config.js.map +1 -0
  29. package/dist/bitsearch-torrent/index.d.ts +4 -0
  30. package/dist/bitsearch-torrent/index.js +35 -0
  31. package/dist/bitsearch-torrent/index.js.map +1 -0
  32. package/dist/bitsearch-torrent/mapping.d.ts +3 -0
  33. package/dist/bitsearch-torrent/mapping.js +53 -0
  34. package/dist/bitsearch-torrent/mapping.js.map +1 -0
  35. package/dist/bitsearch-torrent/matching.d.ts +3 -0
  36. package/dist/bitsearch-torrent/matching.js +13 -0
  37. package/dist/bitsearch-torrent/matching.js.map +1 -0
  38. package/dist/bitsearch-torrent/quota.d.ts +9 -0
  39. package/dist/bitsearch-torrent/quota.js +53 -0
  40. package/dist/bitsearch-torrent/quota.js.map +1 -0
  41. package/dist/cinemeta/index.js +37 -12
  42. package/dist/cinemeta/index.js.map +1 -1
  43. package/dist/ddbb-streaming/client.d.ts +24 -0
  44. package/dist/ddbb-streaming/client.js +98 -0
  45. package/dist/ddbb-streaming/client.js.map +1 -0
  46. package/dist/ddbb-streaming/config.d.ts +31 -0
  47. package/dist/ddbb-streaming/config.js +67 -0
  48. package/dist/ddbb-streaming/config.js.map +1 -0
  49. package/dist/ddbb-streaming/index.d.ts +4 -0
  50. package/dist/ddbb-streaming/index.js +53 -0
  51. package/dist/ddbb-streaming/index.js.map +1 -0
  52. package/dist/ddbb-streaming/mapping.d.ts +8 -0
  53. package/dist/ddbb-streaming/mapping.js +164 -0
  54. package/dist/ddbb-streaming/mapping.js.map +1 -0
  55. package/dist/ddbb-streaming/validation.d.ts +3 -0
  56. package/dist/ddbb-streaming/validation.js +84 -0
  57. package/dist/ddbb-streaming/validation.js.map +1 -0
  58. package/dist/experimental-streaming/index.js +55 -0
  59. package/dist/experimental-streaming/index.js.map +1 -1
  60. package/dist/flixhq-streaming/client.d.ts +12 -0
  61. package/dist/flixhq-streaming/client.js +103 -0
  62. package/dist/flixhq-streaming/client.js.map +1 -0
  63. package/dist/flixhq-streaming/index.d.ts +2 -2
  64. package/dist/flixhq-streaming/index.js +58 -104
  65. package/dist/flixhq-streaming/index.js.map +1 -1
  66. package/dist/imdb-dataset/index.d.ts +20 -5
  67. package/dist/imdb-dataset/index.js +82 -184
  68. package/dist/imdb-dataset/index.js.map +1 -1
  69. package/dist/imdb-dataset/memory-storage.d.ts +7 -0
  70. package/dist/imdb-dataset/memory-storage.js +168 -0
  71. package/dist/imdb-dataset/memory-storage.js.map +1 -0
  72. package/dist/imdb-dataset/sqlite-import.d.ts +24 -0
  73. package/dist/imdb-dataset/sqlite-import.js +298 -0
  74. package/dist/imdb-dataset/sqlite-import.js.map +1 -0
  75. package/dist/imdb-dataset/sqlite-runtime.d.ts +3 -0
  76. package/dist/imdb-dataset/sqlite-runtime.js +11 -0
  77. package/dist/imdb-dataset/sqlite-runtime.js.map +1 -0
  78. package/dist/imdb-dataset/sqlite-schema.d.ts +6 -0
  79. package/dist/imdb-dataset/sqlite-schema.js +88 -0
  80. package/dist/imdb-dataset/sqlite-schema.js.map +1 -0
  81. package/dist/imdb-dataset/sqlite-storage.d.ts +12 -0
  82. package/dist/imdb-dataset/sqlite-storage.js +208 -0
  83. package/dist/imdb-dataset/sqlite-storage.js.map +1 -0
  84. package/dist/imdb-dataset/storage.d.ts +33 -0
  85. package/dist/imdb-dataset/storage.js +2 -0
  86. package/dist/imdb-dataset/storage.js.map +1 -0
  87. package/dist/index.d.ts +7 -0
  88. package/dist/index.js +7 -0
  89. package/dist/index.js.map +1 -1
  90. package/dist/jacred-torrent/client.d.ts +24 -0
  91. package/dist/jacred-torrent/client.js +254 -0
  92. package/dist/jacred-torrent/client.js.map +1 -0
  93. package/dist/jacred-torrent/config.d.ts +24 -0
  94. package/dist/jacred-torrent/config.js +70 -0
  95. package/dist/jacred-torrent/config.js.map +1 -0
  96. package/dist/jacred-torrent/index.d.ts +4 -0
  97. package/dist/jacred-torrent/index.js +45 -0
  98. package/dist/jacred-torrent/index.js.map +1 -0
  99. package/dist/jacred-torrent/mapping.d.ts +3 -0
  100. package/dist/jacred-torrent/mapping.js +129 -0
  101. package/dist/jacred-torrent/mapping.js.map +1 -0
  102. package/dist/jacred-torrent/matching.d.ts +3 -0
  103. package/dist/jacred-torrent/matching.js +19 -0
  104. package/dist/jacred-torrent/matching.js.map +1 -0
  105. package/dist/kinobd/index.js +5 -6
  106. package/dist/kinobd/index.js.map +1 -1
  107. package/dist/kinobd-streaming/availability.js +52 -29
  108. package/dist/kinobd-streaming/availability.js.map +1 -1
  109. package/dist/kinobd-streaming/candidates.d.ts +3 -2
  110. package/dist/kinobd-streaming/candidates.js +89 -37
  111. package/dist/kinobd-streaming/candidates.js.map +1 -1
  112. package/dist/kinobd-streaming/config.d.ts +15 -0
  113. package/dist/kinobd-streaming/config.js +21 -17
  114. package/dist/kinobd-streaming/config.js.map +1 -1
  115. package/dist/kinobd-streaming/index.d.ts +1 -1
  116. package/dist/kinobd-streaming/index.js.map +1 -1
  117. package/dist/kinobd-streaming/players.d.ts +2 -1
  118. package/dist/kinobd-streaming/players.js +7 -7
  119. package/dist/kinobd-streaming/players.js.map +1 -1
  120. package/dist/kinobd-streaming/request-budget.d.ts +15 -0
  121. package/dist/kinobd-streaming/request-budget.js +61 -0
  122. package/dist/kinobd-streaming/request-budget.js.map +1 -0
  123. package/dist/kinobd-streaming/validation.d.ts +5 -3
  124. package/dist/kinobd-streaming/validation.js +78 -49
  125. package/dist/kinobd-streaming/validation.js.map +1 -1
  126. package/dist/magnetz-torrent/client.d.ts +16 -0
  127. package/dist/magnetz-torrent/client.js +235 -0
  128. package/dist/magnetz-torrent/client.js.map +1 -0
  129. package/dist/magnetz-torrent/config.d.ts +27 -0
  130. package/dist/magnetz-torrent/config.js +73 -0
  131. package/dist/magnetz-torrent/config.js.map +1 -0
  132. package/dist/magnetz-torrent/index.d.ts +4 -0
  133. package/dist/magnetz-torrent/index.js +35 -0
  134. package/dist/magnetz-torrent/index.js.map +1 -0
  135. package/dist/magnetz-torrent/mapping.d.ts +3 -0
  136. package/dist/magnetz-torrent/mapping.js +52 -0
  137. package/dist/magnetz-torrent/mapping.js.map +1 -0
  138. package/dist/magnetz-torrent/matching.d.ts +3 -0
  139. package/dist/magnetz-torrent/matching.js +5 -0
  140. package/dist/magnetz-torrent/matching.js.map +1 -0
  141. package/dist/magnetz-torrent/request-gate.d.ts +9 -0
  142. package/dist/magnetz-torrent/request-gate.js +48 -0
  143. package/dist/magnetz-torrent/request-gate.js.map +1 -0
  144. package/dist/package-version.d.ts +2 -0
  145. package/dist/package-version.js +5 -0
  146. package/dist/package-version.js.map +1 -0
  147. package/dist/shared/abort.d.ts +1 -0
  148. package/dist/shared/abort.js +22 -0
  149. package/dist/shared/abort.js.map +1 -1
  150. package/dist/shared/http.d.ts +8 -2
  151. package/dist/shared/http.js +37 -67
  152. package/dist/shared/http.js.map +1 -1
  153. package/dist/shared/index.d.ts +1 -0
  154. package/dist/shared/index.js +1 -0
  155. package/dist/shared/index.js.map +1 -1
  156. package/dist/shared/mapping.js +3 -1
  157. package/dist/shared/mapping.js.map +1 -1
  158. package/dist/shared/output-url.d.ts +2 -0
  159. package/dist/shared/output-url.js +50 -0
  160. package/dist/shared/output-url.js.map +1 -0
  161. package/dist/shared/rate-limit.js +2 -18
  162. package/dist/shared/rate-limit.js.map +1 -1
  163. package/dist/shared/response-body.d.ts +6 -0
  164. package/dist/shared/response-body.js +109 -0
  165. package/dist/shared/response-body.js.map +1 -0
  166. package/dist/shared/safe-fetch.d.ts +14 -0
  167. package/dist/shared/safe-fetch.js +274 -0
  168. package/dist/shared/safe-fetch.js.map +1 -0
  169. package/dist/shared/torrent-release-matching.d.ts +7 -0
  170. package/dist/shared/torrent-release-matching.js +143 -0
  171. package/dist/shared/torrent-release-matching.js.map +1 -0
  172. package/dist/shared/torrent-release-metadata.d.ts +4 -0
  173. package/dist/shared/torrent-release-metadata.js +95 -0
  174. package/dist/shared/torrent-release-metadata.js.map +1 -0
  175. package/dist/shikimori/index.js +4 -7
  176. package/dist/shikimori/index.js.map +1 -1
  177. package/dist/tvmaze/index.d.ts +11 -0
  178. package/dist/tvmaze/index.js +274 -0
  179. package/dist/tvmaze/index.js.map +1 -0
  180. package/dist/wikidata/cache.d.ts +11 -0
  181. package/dist/wikidata/cache.js +30 -0
  182. package/dist/wikidata/cache.js.map +1 -0
  183. package/dist/wikidata/candidates.d.ts +12 -0
  184. package/dist/wikidata/candidates.js +67 -0
  185. package/dist/wikidata/candidates.js.map +1 -0
  186. package/dist/wikidata/client.d.ts +40 -0
  187. package/dist/wikidata/client.js +224 -0
  188. package/dist/wikidata/client.js.map +1 -0
  189. package/dist/wikidata/index.d.ts +3 -0
  190. package/dist/wikidata/index.js +30 -104
  191. package/dist/wikidata/index.js.map +1 -1
  192. package/dist/yts-torrent/client.d.ts +25 -0
  193. package/dist/yts-torrent/client.js +163 -0
  194. package/dist/yts-torrent/client.js.map +1 -0
  195. package/dist/yts-torrent/config.d.ts +22 -0
  196. package/dist/yts-torrent/config.js +57 -0
  197. package/dist/yts-torrent/config.js.map +1 -0
  198. package/dist/yts-torrent/index.d.ts +4 -0
  199. package/dist/yts-torrent/index.js +42 -0
  200. package/dist/yts-torrent/index.js.map +1 -0
  201. package/dist/yts-torrent/mapping.d.ts +4 -0
  202. package/dist/yts-torrent/mapping.js +107 -0
  203. package/dist/yts-torrent/mapping.js.map +1 -0
  204. package/package.json +18 -5
@@ -0,0 +1 @@
1
+ {"version":3,"file":"candidates.js","sourceRoot":"","sources":["../../src/wikidata/candidates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { type ProviderContext, type ProviderSearchQuery } from "@media-engine/core";
2
+ import { ProviderRateLimitGate, type ProviderFetch } from "../shared/index.js";
3
+ import { WikidataCache } from "./cache.js";
4
+ export interface WikidataClientConfig {
5
+ baseUrl: string;
6
+ sparqlUrl: string;
7
+ language: string;
8
+ userAgent: string;
9
+ fetch?: ProviderFetch;
10
+ rateLimitGate: ProviderRateLimitGate;
11
+ searchLimit: number;
12
+ entityLimit: number;
13
+ cache: WikidataCache<WikidataEntity>;
14
+ }
15
+ export interface WikidataEntity {
16
+ id: string;
17
+ labels?: Record<string, WikidataTextValue>;
18
+ descriptions?: Record<string, WikidataTextValue>;
19
+ claims?: Record<string, WikidataClaim[]>;
20
+ }
21
+ interface WikidataTextValue {
22
+ value?: string;
23
+ }
24
+ interface WikidataClaim {
25
+ mainsnak?: {
26
+ datavalue?: {
27
+ value?: WikidataClaimValue;
28
+ };
29
+ };
30
+ }
31
+ export type WikidataClaimValue = string | {
32
+ id?: string;
33
+ time?: string;
34
+ amount?: string;
35
+ text?: string;
36
+ };
37
+ export declare function searchWikidataEntities(config: WikidataClientConfig, query: ProviderSearchQuery, context: ProviderContext): Promise<WikidataEntity[]>;
38
+ export declare function getWikidataEntityByImdbId(config: WikidataClientConfig, imdbId: string, context: ProviderContext): Promise<WikidataEntity | undefined>;
39
+ export declare function normalizeWikidataLanguage(language: string): string;
40
+ export {};
@@ -0,0 +1,224 @@
1
+ import { ProviderError } from "@media-engine/core";
2
+ import { fetchJson } from "../shared/index.js";
3
+ import { normalizeWikidataEntityId, selectWikidataEntityIds, } from "./candidates.js";
4
+ const PROVIDER_NAME = "wikidata";
5
+ const DEFAULT_LANGUAGE = "en";
6
+ const MAX_RESPONSE_BYTES = 256 * 1_024;
7
+ export async function searchWikidataEntities(config, query, context) {
8
+ const entityIds = await searchEntityIds(config, query, context);
9
+ return getEntities(config, entityIds, context);
10
+ }
11
+ export async function getWikidataEntityByImdbId(config, imdbId, context) {
12
+ const cachedEntityId = config.cache.getImdbEntityId(imdbId);
13
+ if (cachedEntityId === null) {
14
+ return undefined;
15
+ }
16
+ if (cachedEntityId !== undefined) {
17
+ return (await getEntities(config, [cachedEntityId], context))[0];
18
+ }
19
+ const languages = getRequestedLanguages(context.language ?? config.language);
20
+ const response = await requestSparql(config, createSelectedPropertyQuery(`?item wdt:P345 "${escapeSparqlString(imdbId)}".`, languages, "LIMIT 1"), context);
21
+ const entity = parseSparqlEntities(response, languages)[0];
22
+ config.cache.setImdbEntityId(imdbId, entity?.id ?? null);
23
+ if (entity) {
24
+ config.cache.setEntity(createLanguageKey(languages), entity.id, entity);
25
+ }
26
+ return entity;
27
+ }
28
+ async function searchEntityIds(config, query, context) {
29
+ const url = new URL(`${config.baseUrl}/w/api.php`);
30
+ const language = normalizeWikidataLanguage(query.language ?? context.language ?? config.language);
31
+ url.searchParams.set("action", "wbsearchentities");
32
+ url.searchParams.set("format", "json");
33
+ url.searchParams.set("type", "item");
34
+ url.searchParams.set("language", language);
35
+ url.searchParams.set("uselang", language);
36
+ url.searchParams.set("search", query.title ?? "");
37
+ url.searchParams.set("limit", String(config.searchLimit));
38
+ const response = await requestJson(config, url, context);
39
+ if (!Array.isArray(response.search)) {
40
+ throw createInvalidResponseError("search entries");
41
+ }
42
+ return selectWikidataEntityIds(response.search, query, config.entityLimit);
43
+ }
44
+ async function getEntities(config, entityIds, context) {
45
+ if (!entityIds.length) {
46
+ return [];
47
+ }
48
+ const languages = getRequestedLanguages(context.language ?? config.language);
49
+ const languageKey = createLanguageKey(languages);
50
+ const entitiesById = new Map();
51
+ const missingIds = [];
52
+ for (const entityId of entityIds) {
53
+ const cached = config.cache.getEntity(languageKey, entityId);
54
+ if (cached === undefined) {
55
+ missingIds.push(entityId);
56
+ }
57
+ else if (cached !== null) {
58
+ entitiesById.set(entityId, cached);
59
+ }
60
+ }
61
+ if (missingIds.length) {
62
+ const values = missingIds.map((entityId) => `wd:${entityId}`).join(" ");
63
+ const response = await requestSparql(config, createSelectedPropertyQuery(`VALUES ?item { ${values} }`, languages), context);
64
+ const fetchedEntities = parseSparqlEntities(response, languages);
65
+ const expectedIds = new Set(missingIds);
66
+ if (fetchedEntities.some((entity) => !expectedIds.has(entity.id))) {
67
+ throw createInvalidResponseError("requested entity IDs");
68
+ }
69
+ const fetchedById = new Map(fetchedEntities.map((entity) => [entity.id, entity]));
70
+ for (const entityId of missingIds) {
71
+ const entity = fetchedById.get(entityId) ?? null;
72
+ config.cache.setEntity(languageKey, entityId, entity);
73
+ if (entity) {
74
+ const imdbId = getEntityImdbId(entity);
75
+ entitiesById.set(entityId, entity);
76
+ if (imdbId) {
77
+ config.cache.setImdbEntityId(imdbId, entityId);
78
+ }
79
+ }
80
+ }
81
+ }
82
+ return entityIds.flatMap((entityId) => {
83
+ const entity = entitiesById.get(entityId);
84
+ return entity ? [entity] : [];
85
+ });
86
+ }
87
+ function createSelectedPropertyQuery(selector, languages, suffix = "") {
88
+ const requestedLanguage = languages[0] ?? DEFAULT_LANGUAGE;
89
+ return `SELECT ?item
90
+ (GROUP_CONCAT(DISTINCT STR(?instanceValue); separator="|") AS ?instances)
91
+ (SAMPLE(?imdbValue) AS ?imdb)
92
+ (MIN(?releaseValue) AS ?releaseDate)
93
+ (SAMPLE(?imageValue) AS ?image)
94
+ (SAMPLE(?originalValue) AS ?originalTitle)
95
+ (SAMPLE(?requestedLabelValue) AS ?requestedLabel)
96
+ (SAMPLE(?englishLabelValue) AS ?englishLabel)
97
+ (SAMPLE(?requestedDescriptionValue) AS ?requestedDescription)
98
+ (SAMPLE(?englishDescriptionValue) AS ?englishDescription)
99
+ WHERE {
100
+ ${selector}
101
+ OPTIONAL { ?item wdt:P31 ?instanceValue. }
102
+ OPTIONAL { ?item wdt:P345 ?imdbValue. }
103
+ OPTIONAL { ?item wdt:P577 ?releaseValue. }
104
+ OPTIONAL { ?item wdt:P18 ?imageValue. }
105
+ OPTIONAL { ?item wdt:P1476 ?originalValue. }
106
+ OPTIONAL {
107
+ ?item rdfs:label ?requestedLabelValue.
108
+ FILTER(LANG(?requestedLabelValue) = "${requestedLanguage}")
109
+ }
110
+ OPTIONAL {
111
+ ?item rdfs:label ?englishLabelValue.
112
+ FILTER(LANG(?englishLabelValue) = "en")
113
+ }
114
+ OPTIONAL {
115
+ ?item schema:description ?requestedDescriptionValue.
116
+ FILTER(LANG(?requestedDescriptionValue) = "${requestedLanguage}")
117
+ }
118
+ OPTIONAL {
119
+ ?item schema:description ?englishDescriptionValue.
120
+ FILTER(LANG(?englishDescriptionValue) = "en")
121
+ }
122
+ }
123
+ GROUP BY ?item
124
+ ${suffix}`;
125
+ }
126
+ function mapSparqlBinding(binding, languages) {
127
+ const entityId = normalizeWikidataEntityId(binding?.item?.value?.split("/").at(-1));
128
+ if (!binding || !entityId) {
129
+ return undefined;
130
+ }
131
+ const requestedLanguage = languages[0] ?? DEFAULT_LANGUAGE;
132
+ const labels = createLocalizedValues(requestedLanguage, binding.requestedLabel?.value, binding.englishLabel?.value);
133
+ const descriptions = createLocalizedValues(requestedLanguage, binding.requestedDescription?.value, binding.englishDescription?.value);
134
+ const claims = {};
135
+ setClaims(claims, "P31", (binding.instances?.value ?? "")
136
+ .split("|")
137
+ .map((value) => normalizeWikidataEntityId(value.split("/").at(-1)))
138
+ .filter((value) => value !== undefined)
139
+ .map((id) => ({ id })));
140
+ setClaims(claims, "P345", compactValues(binding.imdb?.value));
141
+ setClaims(claims, "P577", compactValues(binding.releaseDate?.value).map((time) => ({ time })));
142
+ setClaims(claims, "P18", compactValues(binding.image?.value));
143
+ setClaims(claims, "P1476", compactValues(binding.originalTitle?.value).map((text) => ({ text })));
144
+ return { id: entityId, labels, descriptions, claims };
145
+ }
146
+ function parseSparqlEntities(response, languages) {
147
+ const bindings = response.results?.bindings;
148
+ if (!Array.isArray(bindings)) {
149
+ throw createInvalidResponseError("SPARQL bindings");
150
+ }
151
+ const entities = bindings.map((binding) => mapSparqlBinding(binding, languages));
152
+ if (entities.some((entity) => entity === undefined)) {
153
+ throw createInvalidResponseError("canonical entity IDs");
154
+ }
155
+ return entities;
156
+ }
157
+ function createLocalizedValues(requestedLanguage, requestedValue, englishValue) {
158
+ const values = {};
159
+ if (requestedValue) {
160
+ values[requestedLanguage] = { value: requestedValue };
161
+ }
162
+ if (englishValue) {
163
+ values.en = { value: englishValue };
164
+ }
165
+ return Object.keys(values).length ? values : undefined;
166
+ }
167
+ function setClaims(claims, property, values) {
168
+ if (values.length) {
169
+ claims[property] = values.map((value) => ({
170
+ mainsnak: { datavalue: { value } },
171
+ }));
172
+ }
173
+ }
174
+ function compactValues(value) {
175
+ return value ? [value] : [];
176
+ }
177
+ function getEntityImdbId(entity) {
178
+ const value = entity.claims?.P345?.[0]?.mainsnak?.datavalue?.value;
179
+ return typeof value === "string" ? value : undefined;
180
+ }
181
+ function requestSparql(config, query, context) {
182
+ const url = new URL(config.sparqlUrl);
183
+ url.searchParams.set("format", "json");
184
+ url.searchParams.set("query", query);
185
+ return requestJson(config, url, context);
186
+ }
187
+ function requestJson(config, url, context) {
188
+ return fetchJson({
189
+ provider: PROVIDER_NAME,
190
+ url,
191
+ context,
192
+ fetch: config.fetch,
193
+ maxResponseBytes: MAX_RESPONSE_BYTES,
194
+ rateLimitGate: config.rateLimitGate,
195
+ init: {
196
+ headers: {
197
+ accept: "application/json",
198
+ "user-agent": config.userAgent,
199
+ },
200
+ },
201
+ });
202
+ }
203
+ export function normalizeWikidataLanguage(language) {
204
+ const primary = language.split("-")[0]?.trim().toLocaleLowerCase();
205
+ return primary && /^[a-z]{2,12}$/.test(primary) ? primary : DEFAULT_LANGUAGE;
206
+ }
207
+ function getRequestedLanguages(language) {
208
+ return [...new Set([normalizeWikidataLanguage(language), DEFAULT_LANGUAGE])];
209
+ }
210
+ function createLanguageKey(languages) {
211
+ return languages.join("|");
212
+ }
213
+ function escapeSparqlString(value) {
214
+ return value.replaceAll("\\", "\\\\").replaceAll('"', '\\"');
215
+ }
216
+ function createInvalidResponseError(field) {
217
+ return new ProviderError({
218
+ provider: PROVIDER_NAME,
219
+ code: "PROVIDER_INVALID_RESPONSE",
220
+ message: `Provider "${PROVIDER_NAME}" returned invalid ${field}.`,
221
+ retryable: false,
222
+ });
223
+ }
224
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/wikidata/client.ts"],"names":[],"mappings":"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"}
@@ -8,5 +8,8 @@ export interface WikidataProviderOptions {
8
8
  fetch?: ProviderFetch;
9
9
  version?: string;
10
10
  searchLimit?: number;
11
+ entityLimit?: number;
12
+ cacheTtlMs?: number;
13
+ cacheMaxEntries?: number;
11
14
  }
12
15
  export declare function wikidataProvider(options?: WikidataProviderOptions): MediaProvider;
@@ -1,12 +1,18 @@
1
- import { fetchJson, ProviderRateLimitGate } from "../shared/index.js";
2
- import { normalizeProviderSearchText as normalizeSearchText } from "../shared/mapping.js";
1
+ import { normalizeProviderOutputUrl, ProviderRateLimitGate, } from "../shared/index.js";
2
+ import { createProviderImage } from "../shared/mapping.js";
3
3
  import { resolveBoundedIntegerOption } from "../shared/options.js";
4
+ import { MEDIA_ENGINE_DEFAULT_USER_AGENT } from "../package-version.js";
5
+ import { WikidataCache } from "./cache.js";
6
+ import { isRelevantWikidataTitleMatch } from "./candidates.js";
7
+ import { getWikidataEntityByImdbId, normalizeWikidataLanguage, searchWikidataEntities, } from "./client.js";
4
8
  const PROVIDER_NAME = "wikidata";
5
9
  const DEFAULT_BASE_URL = "https://www.wikidata.org";
6
10
  const DEFAULT_SPARQL_URL = "https://query.wikidata.org/sparql";
7
11
  const DEFAULT_LANGUAGE = "en";
8
12
  const DEFAULT_SEARCH_LIMIT = 8;
9
- const DEFAULT_USER_AGENT = "MediaEngine/0.0.0 (https://github.com/Yaneart/media-engine)";
13
+ const DEFAULT_ENTITY_LIMIT = 3;
14
+ const DEFAULT_CACHE_TTL_MS = 6 * 60 * 60 * 1_000;
15
+ const DEFAULT_CACHE_MAX_ENTRIES = 256;
10
16
  const MOVIE_INSTANCE_IDS = new Set(["Q11424", "Q506240"]);
11
17
  const SERIES_INSTANCE_IDS = new Set(["Q5398426", "Q1259759", "Q15416"]);
12
18
  // Creates a Wikidata metadata provider for basic movie and series lookup.
@@ -20,9 +26,11 @@ export function wikidataProvider(options = {}) {
20
26
  searchPosterMatchesDetails: true,
21
27
  capabilities: {
22
28
  mediaTypes: ["movie", "series"],
29
+ searchEnrichment: false,
23
30
  search: {
24
31
  byTitle: true,
25
32
  byExternalIds: ["imdb"],
33
+ titleDiscovery: "fallback",
26
34
  },
27
35
  details: {
28
36
  byExternalIds: ["imdb"],
@@ -40,14 +48,18 @@ export function wikidataProvider(options = {}) {
40
48
  // Builds provider config with conservative defaults for public Wikimedia APIs.
41
49
  // Собирает конфигурацию с консервативными defaults для публичных Wikimedia API.
42
50
  function createWikidataConfig(options) {
51
+ const cacheTtlMs = resolveBoundedIntegerOption(options.cacheTtlMs, DEFAULT_CACHE_TTL_MS, "Wikidata cacheTtlMs", 0, 7 * 24 * 60 * 60 * 1_000);
52
+ const cacheMaxEntries = resolveBoundedIntegerOption(options.cacheMaxEntries, DEFAULT_CACHE_MAX_ENTRIES, "Wikidata cacheMaxEntries", 2, 2_048);
43
53
  return {
44
54
  baseUrl: trimTrailingSlash(options.baseUrl ?? DEFAULT_BASE_URL),
45
55
  sparqlUrl: options.sparqlUrl ?? DEFAULT_SPARQL_URL,
46
- language: normalizeLanguage(options.language ?? DEFAULT_LANGUAGE),
47
- userAgent: options.userAgent ?? DEFAULT_USER_AGENT,
56
+ language: normalizeWikidataLanguage(options.language ?? DEFAULT_LANGUAGE),
57
+ userAgent: options.userAgent ?? MEDIA_ENGINE_DEFAULT_USER_AGENT,
48
58
  fetch: options.fetch,
49
59
  rateLimitGate: new ProviderRateLimitGate(),
50
60
  searchLimit: resolveBoundedIntegerOption(options.searchLimit, DEFAULT_SEARCH_LIMIT, "Wikidata searchLimit", 1, 50),
61
+ entityLimit: resolveBoundedIntegerOption(options.entityLimit, DEFAULT_ENTITY_LIMIT, "Wikidata entityLimit", 1, 10),
62
+ cache: new WikidataCache({ maxEntries: cacheMaxEntries, ttlMs: cacheTtlMs }),
51
63
  };
52
64
  }
53
65
  // Runs title or IMDb ID search through Wikidata without requiring credentials.
@@ -63,8 +75,7 @@ async function searchWikidata(config, query, context) {
63
75
  if (!query.title?.trim()) {
64
76
  return [];
65
77
  }
66
- const entityIds = await searchEntityIds(config, query, context);
67
- const entities = await getEntities(config, entityIds, context);
78
+ const entities = await searchWikidataEntities(config, query, context);
68
79
  return entities
69
80
  .map((entity) => mapEntityToItem(config, entity, query, context))
70
81
  .filter((item) => item !== undefined)
@@ -90,58 +101,12 @@ async function getWikidataDetails(config, query, context) {
90
101
  // Resolves one Wikidata entity through an exact IMDb ID SPARQL lookup.
91
102
  // Находит одну Wikidata entity через точный SPARQL lookup по IMDb ID.
92
103
  async function getDetailsByImdbId(config, imdbId, type, context) {
93
- const entityId = await findEntityIdByImdbId(config, imdbId, context);
94
- if (!entityId) {
95
- return null;
96
- }
97
- const [entity] = await getEntities(config, [entityId], context);
104
+ const entity = await getWikidataEntityByImdbId(config, imdbId, context);
98
105
  const item = entity
99
106
  ? mapEntityToItem(config, entity, { ids: { imdb: imdbId }, type }, context)
100
107
  : undefined;
101
108
  return item ? itemToDetails(item) : null;
102
109
  }
103
- // Searches Wikidata item IDs using the public Action API search endpoint.
104
- // Ищет Wikidata item IDs через публичный search endpoint Action API.
105
- async function searchEntityIds(config, query, context) {
106
- const url = new URL(`${config.baseUrl}/w/api.php`);
107
- const language = normalizeLanguage(query.language ?? context.language ?? config.language);
108
- url.searchParams.set("action", "wbsearchentities");
109
- url.searchParams.set("format", "json");
110
- url.searchParams.set("type", "item");
111
- url.searchParams.set("language", language);
112
- url.searchParams.set("uselang", language);
113
- url.searchParams.set("search", query.title ?? "");
114
- url.searchParams.set("limit", String(config.searchLimit));
115
- const response = await requestJson(config, url, context);
116
- return (response.search ?? [])
117
- .map((result) => result.id)
118
- .filter((id) => Boolean(id));
119
- }
120
- // Loads full Wikidata entity JSON for candidate IDs.
121
- // Загружает полный JSON Wikidata entity для candidate IDs.
122
- async function getEntities(config, entityIds, context) {
123
- if (!entityIds.length) {
124
- return [];
125
- }
126
- const url = new URL(`${config.baseUrl}/w/api.php`);
127
- url.searchParams.set("action", "wbgetentities");
128
- url.searchParams.set("format", "json");
129
- url.searchParams.set("ids", entityIds.join("|"));
130
- url.searchParams.set("props", "labels|descriptions|claims");
131
- const response = await requestJson(config, url, context);
132
- return Object.values(response.entities ?? {}).filter(isKnownEntity);
133
- }
134
- // Finds one Wikidata item ID by exact IMDb title ID.
135
- // Находит один Wikidata item ID по точному IMDb title ID.
136
- async function findEntityIdByImdbId(config, imdbId, context) {
137
- const url = new URL(config.sparqlUrl);
138
- const query = `SELECT ?item WHERE { ?item wdt:P345 "${escapeSparqlString(imdbId)}". } LIMIT 1`;
139
- url.searchParams.set("format", "json");
140
- url.searchParams.set("query", query);
141
- const response = await requestJson(config, url, context);
142
- const itemUrl = response.results?.bindings?.[0]?.item?.value;
143
- return itemUrl?.split("/").at(-1);
144
- }
145
110
  // Maps a Wikidata entity into the normalized compact media model.
146
111
  // Преобразует Wikidata entity в нормализованную compact media model.
147
112
  function mapEntityToItem(config, entity, query, context) {
@@ -150,7 +115,7 @@ function mapEntityToItem(config, entity, query, context) {
150
115
  return undefined;
151
116
  }
152
117
  const title = getLabel(entity, context.language ?? config.language);
153
- if (!title || (query.title && !isRelevantTitleMatch(title, query.title))) {
118
+ if (!title || (query.title && !isRelevantWikidataTitleMatch(title, query.title))) {
154
119
  return undefined;
155
120
  }
156
121
  const releaseDate = getTimeClaim(entity, "P577");
@@ -223,7 +188,7 @@ function createProviderSource(ids) {
223
188
  return {
224
189
  provider: PROVIDER_NAME,
225
190
  ids,
226
- url: imdbId ? `https://www.imdb.com/title/${imdbId}/` : undefined,
191
+ url: normalizeProviderOutputUrl(imdbId ? `https://www.imdb.com/title/${imdbId}/` : undefined),
227
192
  };
228
193
  }
229
194
  // Creates normalized external IDs from Wikidata claims.
@@ -249,12 +214,13 @@ function getMediaType(entity) {
249
214
  // Reads localized entity label with English fallback.
250
215
  // Читает локализованный label entity с fallback на English.
251
216
  function getLabel(entity, language) {
252
- return entity.labels?.[normalizeLanguage(language)]?.value ?? entity.labels?.en?.value;
217
+ return entity.labels?.[normalizeWikidataLanguage(language)]?.value ?? entity.labels?.en?.value;
253
218
  }
254
219
  // Reads localized entity description with English fallback.
255
220
  // Читает локализованное description entity с fallback на English.
256
221
  function getDescription(entity, language) {
257
- return (entity.descriptions?.[normalizeLanguage(language)]?.value ?? entity.descriptions?.en?.value);
222
+ return (entity.descriptions?.[normalizeWikidataLanguage(language)]?.value ??
223
+ entity.descriptions?.en?.value);
258
224
  }
259
225
  // Reads one string-valued claim.
260
226
  // Читает один claim со строковым значением.
@@ -294,42 +260,12 @@ function getClaimValues(entity, property) {
294
260
  // Создает Wikimedia image URL из Commons filename claim.
295
261
  function getImage(entity) {
296
262
  const filename = getStringClaim(entity, "P18");
297
- return filename
298
- ? {
299
- url: `https://commons.wikimedia.org/wiki/Special:FilePath/${encodeURIComponent(filename.replaceAll(" ", "_"))}`,
300
- type: "poster",
301
- source: PROVIDER_NAME,
302
- }
303
- : undefined;
304
- }
305
- // Sends provider JSON requests with Wikimedia-friendly headers.
306
- // Отправляет JSON-запросы провайдера с Wikimedia-friendly headers.
307
- function requestJson(config, url, context) {
308
- return fetchJson({
309
- provider: PROVIDER_NAME,
310
- url,
311
- context,
312
- fetch: config.fetch,
313
- rateLimitGate: config.rateLimitGate,
314
- init: {
315
- headers: {
316
- accept: "application/json",
317
- "user-agent": config.userAgent,
318
- },
319
- },
320
- });
321
- }
322
- // Checks that entity data has a stable ID.
323
- // Проверяет, что entity data содержит стабильный ID.
324
- function isKnownEntity(entity) {
325
- return Boolean(entity.id);
326
- }
327
- // Keeps title matching conservative so generic search noise is dropped.
328
- // Держит matching названия консервативным, чтобы отсечь шум generic search.
329
- function isRelevantTitleMatch(title, queryTitle) {
330
- const normalizedTitle = normalizeSearchText(title);
331
- const normalizedQuery = normalizeSearchText(queryTitle);
332
- return normalizedTitle.includes(normalizedQuery) || normalizedQuery.includes(normalizedTitle);
263
+ const url = filename?.startsWith("http://") || filename?.startsWith("https://")
264
+ ? filename
265
+ : filename
266
+ ? `https://commons.wikimedia.org/wiki/Special:FilePath/${encodeURIComponent(filename.replaceAll(" ", "_"))}`
267
+ : undefined;
268
+ return createProviderImage(url, "poster", PROVIDER_NAME);
333
269
  }
334
270
  // Extracts a four-digit year from an ISO-like date.
335
271
  // Достает четырехзначный год из ISO-like date.
@@ -337,16 +273,6 @@ function getYear(date) {
337
273
  const year = date?.slice(0, 4);
338
274
  return year && /^\d{4}$/.test(year) ? Number(year) : undefined;
339
275
  }
340
- // Normalizes BCP-style language tags to Wikidata language codes.
341
- // Нормализует BCP-style language tags в language codes Wikidata.
342
- function normalizeLanguage(language) {
343
- return language.split("-")[0]?.trim().toLocaleLowerCase() || DEFAULT_LANGUAGE;
344
- }
345
- // Escapes a literal string for the narrow SPARQL query used here.
346
- // Экранирует literal string для узкого SPARQL-запроса здесь.
347
- function escapeSparqlString(value) {
348
- return value.replaceAll("\\", "\\\\").replaceAll('"', '\\"');
349
- }
350
276
  function trimTrailingSlash(value) {
351
277
  return value.replace(/\/+$/, "");
352
278
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wikidata/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wikidata/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { type ProviderContext } from "@media-engine/core";
2
+ import type { YtsTorrentConfig } from "./config.js";
3
+ export interface YtsTorrentRelease {
4
+ hash: string;
5
+ torrentUrl?: string;
6
+ quality: string;
7
+ sourceType?: string;
8
+ videoCodec?: string;
9
+ sizeBytes?: number;
10
+ seeders?: number;
11
+ leechers?: number;
12
+ uploadedAt?: string;
13
+ }
14
+ export interface YtsTorrentMovie {
15
+ id: number;
16
+ imdb: string;
17
+ title: string;
18
+ englishTitle?: string;
19
+ year: number;
20
+ sourceUrl?: string;
21
+ torrents: YtsTorrentRelease[];
22
+ }
23
+ export declare function searchYtsTorrentMovies(config: YtsTorrentConfig, queryTerm: string, context: ProviderContext): Promise<YtsTorrentMovie[]>;
24
+ export declare function createYtsTorrentSearchUrl(config: Pick<YtsTorrentConfig, "baseUrl" | "resultLimit">, queryTerm: string): URL;
25
+ export declare function parseYtsTorrentResponse(provider: string, value: unknown, resultLimit: number): YtsTorrentMovie[];