@vyla-entertainment/sdk 1.20.0 → 1.21.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/package.json +3 -2
- package/src/config.js +10 -85
- package/src/sdk.d.ts +94 -121
- package/src/sdk.js +82 -78
- package/src/sources/111477.js +88 -100
- package/src/sources/123anime.js +120 -56
- package/src/sources/3eyedraven.js +82 -135
- package/src/sources/cinecat.js +37 -18
- package/src/sources/cinemaarmy.js +179 -180
- package/src/sources/cinesrc.js +401 -397
- package/src/sources/cno.js +101 -94
- package/src/sources/dulo.js +134 -149
- package/src/sources/flaxmovies.js +114 -105
- package/src/sources/frost.js +38 -29
- package/src/sources/fsonline.js +95 -47
- package/src/sources/hdhub.js +43 -36
- package/src/sources/hexa.js +60 -53
- package/src/sources/hyper.js +42 -35
- package/src/sources/kickassanime.js +117 -124
- package/src/sources/kisskh.js +114 -59
- package/src/sources/lmscript.js +72 -70
- package/src/sources/lookmovie.js +80 -79
- package/src/sources/movenerds.js +74 -124
- package/src/sources/movy.js +197 -209
- package/src/sources/net79.js +59 -55
- package/src/sources/peestream.js +126 -138
- package/src/sources/pengu.js +46 -49
- package/src/sources/pstream.js +73 -67
- package/src/sources/purstream.js +96 -104
- package/src/sources/rivestream.js +182 -176
- package/src/sources/rivo.js +58 -53
- package/src/sources/streamaggregator.js +114 -128
- package/src/sources/thugtv.js +70 -62
- package/src/sources/vidapi.js +122 -114
- package/src/sources/vidcore.js +14 -122
- package/src/sources/vidfast.js +14 -122
- package/src/sources/vidlink.js +78 -27
- package/src/sources/vidup.js +14 -122
- package/src/sources/vidvault.js +133 -187
- package/src/sources/vidy.js +192 -187
- package/src/sources/vidzee.js +189 -183
- package/src/sources/vixsrc.js +123 -113
- package/src/sources/watchout.js +60 -46
- package/src/sources/xdownloader.js +127 -128
- package/src/sources/yapgrid.js +68 -62
- package/src/sources/yastream.js +35 -29
- package/src/subtitles.js +105 -122
- package/src/utils/helpers.js +586 -247
- package/src/sources/bcine.js +0 -202
- package/src/sources/cinezo.js +0 -55
- package/src/sources/vidora.js +0 -62
- package/src/sources/vidrock.js +0 -145
package/src/sources/peestream.js
CHANGED
|
@@ -1,139 +1,127 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
const BASE_URL = 'https://providers.peestream.in';
|
|
4
|
-
|
|
5
|
-
const PROVIDERS = {
|
|
6
|
-
purstream: 'Athena',
|
|
7
|
-
vidrock: 'Thor',
|
|
8
|
-
vaplayer: 'Poseidon',
|
|
9
|
-
netmirror: 'Ra'
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
export async function getStream(args) {
|
|
13
|
-
const { id, s, e, server,
|
|
14
|
-
const isTv = s != null && e != null;
|
|
15
|
-
const type = isTv ? 'tv' : 'movie';
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
let
|
|
19
|
-
let
|
|
20
|
-
let
|
|
21
|
-
let
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
if (!releaseYear)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
if (server && server !== 'all') {
|
|
129
|
-
const clean = server.toLowerCase().replace('peestream - ', '').trim();
|
|
130
|
-
const filtered = allUrls.filter(u => u.server.toLowerCase().includes(clean));
|
|
131
|
-
if (filtered.length) return { allUrls: filtered };
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
return allUrls.length ? { allUrls } : null;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export async function getSources() {
|
|
138
|
-
return Object.values(PROVIDERS).map(name => `PeeStream - ${name}`);
|
|
1
|
+
import { fetchJson, getTmdbMetadata, resolveTmdbKey, USER_AGENT } from '../utils/helpers.js';
|
|
2
|
+
|
|
3
|
+
const BASE_URL = 'https://providers.peestream.in';
|
|
4
|
+
|
|
5
|
+
const PROVIDERS = {
|
|
6
|
+
purstream: 'Athena',
|
|
7
|
+
vidrock: 'Thor',
|
|
8
|
+
vaplayer: 'Poseidon',
|
|
9
|
+
netmirror: 'Ra',
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export async function getStream(args) {
|
|
13
|
+
const { id, s, e, server, sdk } = args || {};
|
|
14
|
+
const isTv = s != null && e != null;
|
|
15
|
+
const type = isTv ? 'tv' : 'movie';
|
|
16
|
+
const apiKey = resolveTmdbKey(args, sdk);
|
|
17
|
+
|
|
18
|
+
let title = args?.title || '';
|
|
19
|
+
let releaseYear = args?.year || '';
|
|
20
|
+
let imdbId = args?.imdbId || '';
|
|
21
|
+
let seasonTmdbId = args?.seasonTmdbId || '';
|
|
22
|
+
let episodeTmdbId = args?.episodeTmdbId || '';
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
const meta = await getTmdbMetadata(id, isTv, apiKey);
|
|
26
|
+
if (meta) {
|
|
27
|
+
title = title || meta.title || '';
|
|
28
|
+
if (!releaseYear && meta.year) releaseYear = String(meta.year);
|
|
29
|
+
if (!imdbId && meta.imdbId) imdbId = meta.imdbId;
|
|
30
|
+
|
|
31
|
+
if (isTv) {
|
|
32
|
+
if (!seasonTmdbId && Array.isArray(meta.seasons)) {
|
|
33
|
+
const matchedSeason = meta.seasons.find(item => item.season_number === Number(s));
|
|
34
|
+
if (matchedSeason) seasonTmdbId = String(matchedSeason.id);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
if (!episodeTmdbId && apiKey) {
|
|
38
|
+
try {
|
|
39
|
+
const seasonData = await fetchJson(`https://api.themoviedb.org/3/tv/${id}/season/${s}?api_key=${apiKey}`);
|
|
40
|
+
if (seasonData?.episodes) {
|
|
41
|
+
const matchedEp = seasonData.episodes.find(ep => ep.episode_number === Number(e));
|
|
42
|
+
if (matchedEp) episodeTmdbId = String(matchedEp.id);
|
|
43
|
+
}
|
|
44
|
+
} catch { }
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
} catch { }
|
|
49
|
+
|
|
50
|
+
const queryParams = new URLSearchParams({
|
|
51
|
+
type,
|
|
52
|
+
tmdbId: String(id),
|
|
53
|
+
title: title || String(id),
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
if (releaseYear) queryParams.set('releaseYear', String(releaseYear));
|
|
57
|
+
if (imdbId) queryParams.set('imdbId', String(imdbId));
|
|
58
|
+
|
|
59
|
+
if (isTv) {
|
|
60
|
+
queryParams.set('seasonNumber', String(s));
|
|
61
|
+
queryParams.set('episodeNumber', String(e));
|
|
62
|
+
if (seasonTmdbId) queryParams.set('seasonTmdbId', String(seasonTmdbId));
|
|
63
|
+
if (episodeTmdbId) queryParams.set('episodeTmdbId', String(episodeTmdbId));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const allUrls = [];
|
|
67
|
+
|
|
68
|
+
try {
|
|
69
|
+
const scrapeUrl = `${BASE_URL}/scrape?${queryParams.toString()}`;
|
|
70
|
+
const res = await fetch(scrapeUrl, {
|
|
71
|
+
headers: {
|
|
72
|
+
'User-Agent': USER_AGENT,
|
|
73
|
+
Accept: 'text/event-stream',
|
|
74
|
+
Referer: `${BASE_URL}/`,
|
|
75
|
+
},
|
|
76
|
+
signal: AbortSignal.timeout(20000),
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
if (res.ok) {
|
|
80
|
+
const text = await res.text();
|
|
81
|
+
const events = text.split('\n\n');
|
|
82
|
+
|
|
83
|
+
for (const ev of events) {
|
|
84
|
+
if (ev.includes('event: completed')) {
|
|
85
|
+
const dataMatch = ev.match(/data:\s*(.+)/);
|
|
86
|
+
if (dataMatch) {
|
|
87
|
+
try {
|
|
88
|
+
const parsed = JSON.parse(dataMatch[1].trim());
|
|
89
|
+
const stream = parsed.stream;
|
|
90
|
+
const streamUrl = stream?.playlist || stream?.url || stream?.file;
|
|
91
|
+
if (streamUrl) {
|
|
92
|
+
const sourceName = PROVIDERS[parsed.sourceId] || parsed.sourceId || 'Poseidon';
|
|
93
|
+
allUrls.push({
|
|
94
|
+
url: streamUrl,
|
|
95
|
+
server: `PeeStream - ${sourceName}`,
|
|
96
|
+
quality: 'Auto',
|
|
97
|
+
type: stream.type === 'hls' || streamUrl.includes('.m3u8') ? 'hls' : 'mp4',
|
|
98
|
+
headers: stream.headers || {
|
|
99
|
+
'User-Agent': USER_AGENT,
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
} catch { }
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
} catch { }
|
|
109
|
+
|
|
110
|
+
if (server && server !== 'all') {
|
|
111
|
+
const clean = server.toLowerCase().replace('peestream - ', '').trim();
|
|
112
|
+
const filtered = allUrls.filter(u => u.server.toLowerCase().includes(clean));
|
|
113
|
+
if (filtered.length) return { url: filtered[0].url, headers: filtered[0].headers, allUrls: filtered };
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
if (!allUrls.length) return null;
|
|
117
|
+
|
|
118
|
+
return {
|
|
119
|
+
url: allUrls[0].url,
|
|
120
|
+
headers: allUrls[0].headers,
|
|
121
|
+
allUrls,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
export async function getSources() {
|
|
126
|
+
return Object.values(PROVIDERS).map(name => `PeeStream - ${name}`);
|
|
139
127
|
}
|
package/src/sources/pengu.js
CHANGED
|
@@ -1,50 +1,47 @@
|
|
|
1
|
-
import { fetchJson } from '../utils/helpers.js';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
} catch {
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
1
|
+
import { fetchJson, resolveImdbId, resolveTmdbKey } from '../utils/helpers.js';
|
|
2
|
+
|
|
3
|
+
export async function getStream(args) {
|
|
4
|
+
const { id, s, e, sdk } = args || {};
|
|
5
|
+
const isTv = s != null && e != null;
|
|
6
|
+
const apiKey = resolveTmdbKey(args, sdk);
|
|
7
|
+
const manifest = sdk?.penguManifest || null;
|
|
8
|
+
|
|
9
|
+
if (!apiKey || !manifest || !manifest.endsWith('manifest.json')) return null;
|
|
10
|
+
const baseUrl = manifest.split('/manifest.json')[0];
|
|
11
|
+
if (!baseUrl) return null;
|
|
12
|
+
|
|
13
|
+
try {
|
|
14
|
+
const imdbId = await resolveImdbId(id, isTv, apiKey);
|
|
15
|
+
if (!imdbId) return null;
|
|
16
|
+
|
|
17
|
+
const path = isTv
|
|
18
|
+
? `/stream/series/${imdbId}:${s}:${e}.json`
|
|
19
|
+
: `/stream/movie/${imdbId}.json`;
|
|
20
|
+
|
|
21
|
+
const res = await fetchJson(`${baseUrl}${path}`);
|
|
22
|
+
if (!res?.streams?.length) return null;
|
|
23
|
+
|
|
24
|
+
const allUrls = res.streams.map(stream => {
|
|
25
|
+
if (!stream.url) return null;
|
|
26
|
+
const headers = stream.behaviorHints?.proxyHeaders?.request || {};
|
|
27
|
+
return {
|
|
28
|
+
url: stream.url,
|
|
29
|
+
server: `Pengu - ${stream.name || 'Server'}`,
|
|
30
|
+
quality: 'Auto',
|
|
31
|
+
type: stream.url.includes('.m3u8') ? 'hls' : 'mp4',
|
|
32
|
+
headers: Object.keys(headers).length > 0 ? headers : undefined,
|
|
33
|
+
skipProxy: stream.behaviorHints?.notWebReady === false,
|
|
34
|
+
};
|
|
35
|
+
}).filter(Boolean);
|
|
36
|
+
|
|
37
|
+
if (!allUrls.length) return null;
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
url: allUrls[0].url,
|
|
41
|
+
headers: allUrls[0].headers,
|
|
42
|
+
allUrls,
|
|
43
|
+
};
|
|
44
|
+
} catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
50
47
|
}
|
package/src/sources/pstream.js
CHANGED
|
@@ -1,68 +1,74 @@
|
|
|
1
|
-
import { USER_AGENT } from '../utils/helpers.js';
|
|
2
|
-
|
|
3
|
-
async function safeImport(moduleName) {
|
|
4
|
-
try {
|
|
5
|
-
return await import(`./${moduleName}.js`);
|
|
6
|
-
} catch {
|
|
7
|
-
return null;
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export async function getStream(args) {
|
|
12
|
-
const { id, s, e, clientIP, sdk } = args;
|
|
13
|
-
const isTv = s != null && e != null;
|
|
14
|
-
const type = isTv ? 'tv' : 'movie';
|
|
15
|
-
const allUrls = [];
|
|
16
|
-
|
|
17
|
-
const providers = [
|
|
18
|
-
{ name: 'CineSu', key: 'cinesu', fnName: 'fetchCineSuStreams' },
|
|
19
|
-
{ name: 'ZxcStream', key: 'zxcstream', fnName: 'fetchZxcStreams' },
|
|
20
|
-
{ name: 'VidFast', key: 'vidfast', fnName: 'fetchVidFastStreams' },
|
|
21
|
-
{ name: '1Embed', key: '1embed', fnName: 'fetchOneEmbedStreams' },
|
|
22
|
-
];
|
|
23
|
-
|
|
24
|
-
await Promise.all(
|
|
25
|
-
providers.map(async ({ name, key, fnName }) => {
|
|
26
|
-
try {
|
|
27
|
-
let streamResult = null;
|
|
28
|
-
|
|
29
|
-
if (sdk) {
|
|
30
|
-
try {
|
|
31
|
-
streamResult = await sdk.getStream(key, id, s, e, clientIP);
|
|
32
|
-
} catch { }
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if (!streamResult) {
|
|
36
|
-
const mod = await safeImport(key);
|
|
37
|
-
if (mod) {
|
|
38
|
-
if (typeof mod.getStream === 'function') {
|
|
39
|
-
streamResult = await mod.getStream(args);
|
|
40
|
-
} else if (typeof mod[fnName] === 'function') {
|
|
41
|
-
const raw = await mod[fnName]({ type, id, season: s, episode: e });
|
|
42
|
-
if (Array.isArray(raw)) {
|
|
43
|
-
streamResult = { allUrls: raw };
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (!streamResult) return;
|
|
50
|
-
|
|
51
|
-
const streams = streamResult.allUrls || (streamResult.url ? [streamResult] : []);
|
|
52
|
-
for (const item of streams) {
|
|
53
|
-
allUrls.push({
|
|
54
|
-
url: item.url,
|
|
55
|
-
server: `FlyStream (${item.source || item.server || name})`,
|
|
56
|
-
quality: item.quality || 'Auto',
|
|
57
|
-
type: item.type || item.format || (item.url?.includes('.m3u8') ? 'hls' : 'mp4'),
|
|
58
|
-
headers: item.headers || {
|
|
59
|
-
'User-Agent': USER_AGENT,
|
|
60
|
-
},
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
} catch { }
|
|
64
|
-
})
|
|
65
|
-
);
|
|
66
|
-
|
|
67
|
-
|
|
1
|
+
import { USER_AGENT } from '../utils/helpers.js';
|
|
2
|
+
|
|
3
|
+
async function safeImport(moduleName) {
|
|
4
|
+
try {
|
|
5
|
+
return await import(`./${moduleName}.js`);
|
|
6
|
+
} catch {
|
|
7
|
+
return null;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export async function getStream(args) {
|
|
12
|
+
const { id, s, e, clientIP, sdk } = args || {};
|
|
13
|
+
const isTv = s != null && e != null;
|
|
14
|
+
const type = isTv ? 'tv' : 'movie';
|
|
15
|
+
const allUrls = [];
|
|
16
|
+
|
|
17
|
+
const providers = [
|
|
18
|
+
{ name: 'CineSu', key: 'cinesu', fnName: 'fetchCineSuStreams' },
|
|
19
|
+
{ name: 'ZxcStream', key: 'zxcstream', fnName: 'fetchZxcStreams' },
|
|
20
|
+
{ name: 'VidFast', key: 'vidfast', fnName: 'fetchVidFastStreams' },
|
|
21
|
+
{ name: '1Embed', key: '1embed', fnName: 'fetchOneEmbedStreams' },
|
|
22
|
+
];
|
|
23
|
+
|
|
24
|
+
await Promise.all(
|
|
25
|
+
providers.map(async ({ name, key, fnName }) => {
|
|
26
|
+
try {
|
|
27
|
+
let streamResult = null;
|
|
28
|
+
|
|
29
|
+
if (sdk) {
|
|
30
|
+
try {
|
|
31
|
+
streamResult = await sdk.getStream(key, id, s, e, clientIP);
|
|
32
|
+
} catch { }
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (!streamResult) {
|
|
36
|
+
const mod = await safeImport(key);
|
|
37
|
+
if (mod) {
|
|
38
|
+
if (typeof mod.getStream === 'function') {
|
|
39
|
+
streamResult = await mod.getStream(args);
|
|
40
|
+
} else if (typeof mod[fnName] === 'function') {
|
|
41
|
+
const raw = await mod[fnName]({ type, id, season: s, episode: e });
|
|
42
|
+
if (Array.isArray(raw)) {
|
|
43
|
+
streamResult = { allUrls: raw };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (!streamResult) return;
|
|
50
|
+
|
|
51
|
+
const streams = streamResult.allUrls || (streamResult.url ? [streamResult] : []);
|
|
52
|
+
for (const item of streams) {
|
|
53
|
+
allUrls.push({
|
|
54
|
+
url: item.url,
|
|
55
|
+
server: `FlyStream (${item.source || item.server || name})`,
|
|
56
|
+
quality: item.quality || 'Auto',
|
|
57
|
+
type: item.type || item.format || (item.url?.includes('.m3u8') ? 'hls' : 'mp4'),
|
|
58
|
+
headers: item.headers || {
|
|
59
|
+
'User-Agent': USER_AGENT,
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
} catch { }
|
|
64
|
+
})
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
if (!allUrls.length) return null;
|
|
68
|
+
|
|
69
|
+
return {
|
|
70
|
+
url: allUrls[0].url,
|
|
71
|
+
headers: allUrls[0].headers,
|
|
72
|
+
allUrls,
|
|
73
|
+
};
|
|
68
74
|
}
|