animob 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/LICENSE +674 -0
- package/README.md +245 -0
- package/animb.png +0 -0
- package/dist/extractors/index.d.ts +11 -0
- package/dist/extractors/index.js +27 -0
- package/dist/extractors/index.js.map +1 -0
- package/dist/extractors/kwik.d.ts +18 -0
- package/dist/extractors/kwik.js +117 -0
- package/dist/extractors/kwik.js.map +1 -0
- package/dist/extractors/lplayer.d.ts +11 -0
- package/dist/extractors/lplayer.js +131 -0
- package/dist/extractors/lplayer.js.map +1 -0
- package/dist/extractors/megacloud.d.ts +10 -0
- package/dist/extractors/megacloud.js +44 -0
- package/dist/extractors/megacloud.js.map +1 -0
- package/dist/extractors/megaup.d.ts +31 -0
- package/dist/extractors/megaup.js +79 -0
- package/dist/extractors/megaup.js.map +1 -0
- package/dist/extractors/mixdrop.d.ts +7 -0
- package/dist/extractors/mixdrop.js +32 -0
- package/dist/extractors/mixdrop.js.map +1 -0
- package/dist/extractors/movearnpre.d.ts +9 -0
- package/dist/extractors/movearnpre.js +154 -0
- package/dist/extractors/movearnpre.js.map +1 -0
- package/dist/extractors/sendvid.d.ts +8 -0
- package/dist/extractors/sendvid.js +76 -0
- package/dist/extractors/sendvid.js.map +1 -0
- package/dist/extractors/sibnet.d.ts +8 -0
- package/dist/extractors/sibnet.js +44 -0
- package/dist/extractors/sibnet.js.map +1 -0
- package/dist/extractors/streamsb.d.ts +11 -0
- package/dist/extractors/streamsb.js +65 -0
- package/dist/extractors/streamsb.js.map +1 -0
- package/dist/extractors/streamtape.d.ts +7 -0
- package/dist/extractors/streamtape.js +32 -0
- package/dist/extractors/streamtape.js.map +1 -0
- package/dist/extractors/streamwish.d.ts +11 -0
- package/dist/extractors/streamwish.js +46 -0
- package/dist/extractors/streamwish.js.map +1 -0
- package/dist/extractors/vidcloud.d.ts +11 -0
- package/dist/extractors/vidcloud.js +109 -0
- package/dist/extractors/vidcloud.js.map +1 -0
- package/dist/extractors/videostr.d.ts +10 -0
- package/dist/extractors/videostr.js +44 -0
- package/dist/extractors/videostr.js.map +1 -0
- package/dist/extractors/vidmoly.d.ts +7 -0
- package/dist/extractors/vidmoly.js +75 -0
- package/dist/extractors/vidmoly.js.map +1 -0
- package/dist/extractors/voe.d.ts +10 -0
- package/dist/extractors/voe.js +44 -0
- package/dist/extractors/voe.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/models/anime-parser.d.ts +26 -0
- package/dist/models/anime-parser.js +14 -0
- package/dist/models/anime-parser.js.map +1 -0
- package/dist/models/base-parser.d.ts +10 -0
- package/dist/models/base-parser.js +7 -0
- package/dist/models/base-parser.js.map +1 -0
- package/dist/models/base-provider.d.ts +40 -0
- package/dist/models/base-provider.js +45 -0
- package/dist/models/base-provider.js.map +1 -0
- package/dist/models/base-types.d.ts +22 -0
- package/dist/models/base-types.js +3 -0
- package/dist/models/base-types.js.map +1 -0
- package/dist/models/book-parser.d.ts +4 -0
- package/dist/models/book-parser.js +7 -0
- package/dist/models/book-parser.js.map +1 -0
- package/dist/models/comic-parser.d.ts +4 -0
- package/dist/models/comic-parser.js +7 -0
- package/dist/models/comic-parser.js.map +1 -0
- package/dist/models/index.d.ts +13 -0
- package/dist/models/index.js +39 -0
- package/dist/models/index.js.map +1 -0
- package/dist/models/lightnovel-parser.d.ts +16 -0
- package/dist/models/lightnovel-parser.js +7 -0
- package/dist/models/lightnovel-parser.js.map +1 -0
- package/dist/models/manga-parser.d.ts +17 -0
- package/dist/models/manga-parser.js +10 -0
- package/dist/models/manga-parser.js.map +1 -0
- package/dist/models/movie-parser.d.ts +26 -0
- package/dist/models/movie-parser.js +7 -0
- package/dist/models/movie-parser.js.map +1 -0
- package/dist/models/news-parser.d.ts +4 -0
- package/dist/models/news-parser.js +7 -0
- package/dist/models/news-parser.js.map +1 -0
- package/dist/models/proxy.d.ts +25 -0
- package/dist/models/proxy.js +83 -0
- package/dist/models/proxy.js.map +1 -0
- package/dist/models/type-objects.d.ts +48 -0
- package/dist/models/type-objects.js +57 -0
- package/dist/models/type-objects.js.map +1 -0
- package/dist/models/types.d.ts +515 -0
- package/dist/models/types.js +118 -0
- package/dist/models/types.js.map +1 -0
- package/dist/models/video-extractor.d.ts +19 -0
- package/dist/models/video-extractor.js +10 -0
- package/dist/models/video-extractor.js.map +1 -0
- package/dist/providers/anime/animekai.d.ts +94 -0
- package/dist/providers/anime/animekai.js +661 -0
- package/dist/providers/anime/animekai.js.map +1 -0
- package/dist/providers/anime/animepahe.d.ts +41 -0
- package/dist/providers/anime/animepahe.js +270 -0
- package/dist/providers/anime/animepahe.js.map +1 -0
- package/dist/providers/anime/animesama.d.ts +25 -0
- package/dist/providers/anime/animesama.js +504 -0
- package/dist/providers/anime/animesama.js.map +1 -0
- package/dist/providers/anime/animesaturn.d.ts +32 -0
- package/dist/providers/anime/animesaturn.js +298 -0
- package/dist/providers/anime/animesaturn.js.map +1 -0
- package/dist/providers/anime/animeunity.d.ts +27 -0
- package/dist/providers/anime/animeunity.js +157 -0
- package/dist/providers/anime/animeunity.js.map +1 -0
- package/dist/providers/anime/hianime.d.ts +150 -0
- package/dist/providers/anime/hianime.js +825 -0
- package/dist/providers/anime/hianime.js.map +1 -0
- package/dist/providers/anime/index.d.ts +17 -0
- package/dist/providers/anime/index.js +22 -0
- package/dist/providers/anime/index.js.map +1 -0
- package/dist/providers/anime/kickassanime.d.ts +65 -0
- package/dist/providers/anime/kickassanime.js +582 -0
- package/dist/providers/anime/kickassanime.js.map +1 -0
- package/dist/providers/books/index.d.ts +2 -0
- package/dist/providers/books/index.js +4 -0
- package/dist/providers/books/index.js.map +1 -0
- package/dist/providers/comics/getComics.d.ts +9 -0
- package/dist/providers/comics/getComics.js +54 -0
- package/dist/providers/comics/getComics.js.map +1 -0
- package/dist/providers/comics/index.d.ts +5 -0
- package/dist/providers/comics/index.js +8 -0
- package/dist/providers/comics/index.js.map +1 -0
- package/dist/providers/index.d.ts +9 -0
- package/dist/providers/index.js +23 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/light-novels/index.d.ts +5 -0
- package/dist/providers/light-novels/index.js +8 -0
- package/dist/providers/light-novels/index.js.map +1 -0
- package/dist/providers/light-novels/novelupdates.d.ts +26 -0
- package/dist/providers/light-novels/novelupdates.js +155 -0
- package/dist/providers/light-novels/novelupdates.js.map +1 -0
- package/dist/providers/manga/asurascans.d.ts +16 -0
- package/dist/providers/manga/asurascans.js +143 -0
- package/dist/providers/manga/asurascans.js.map +1 -0
- package/dist/providers/manga/comick.d.ts +36 -0
- package/dist/providers/manga/comick.js +141 -0
- package/dist/providers/manga/comick.js.map +1 -0
- package/dist/providers/manga/comix.d.ts +36 -0
- package/dist/providers/manga/comix.js +265 -0
- package/dist/providers/manga/comix.js.map +1 -0
- package/dist/providers/manga/index.d.ts +21 -0
- package/dist/providers/manga/index.js +26 -0
- package/dist/providers/manga/index.js.map +1 -0
- package/dist/providers/manga/mangadex.d.ts +26 -0
- package/dist/providers/manga/mangadex.js +301 -0
- package/dist/providers/manga/mangadex.js.map +1 -0
- package/dist/providers/manga/mangahere.d.ts +29 -0
- package/dist/providers/manga/mangahere.js +376 -0
- package/dist/providers/manga/mangahere.js.map +1 -0
- package/dist/providers/manga/mangakakalot.d.ts +56 -0
- package/dist/providers/manga/mangakakalot.js +461 -0
- package/dist/providers/manga/mangakakalot.js.map +1 -0
- package/dist/providers/manga/mangapill.d.ts +15 -0
- package/dist/providers/manga/mangapill.js +104 -0
- package/dist/providers/manga/mangapill.js.map +1 -0
- package/dist/providers/manga/mangareader.d.ts +15 -0
- package/dist/providers/manga/mangareader.js +110 -0
- package/dist/providers/manga/mangareader.js.map +1 -0
- package/dist/providers/manga/weebcentral.d.ts +12 -0
- package/dist/providers/manga/weebcentral.js +169 -0
- package/dist/providers/manga/weebcentral.js.map +1 -0
- package/dist/providers/meta/anilist.d.ts +206 -0
- package/dist/providers/meta/anilist.js +2025 -0
- package/dist/providers/meta/anilist.js.map +1 -0
- package/dist/providers/meta/index.d.ts +9 -0
- package/dist/providers/meta/index.js +10 -0
- package/dist/providers/meta/index.js.map +1 -0
- package/dist/providers/meta/mal.d.ts +39 -0
- package/dist/providers/meta/mal.js +529 -0
- package/dist/providers/meta/mal.js.map +1 -0
- package/dist/providers/meta/tmdb.d.ts +48 -0
- package/dist/providers/meta/tmdb.js +364 -0
- package/dist/providers/meta/tmdb.js.map +1 -0
- package/dist/providers/movies/dramacool.d.ts +98 -0
- package/dist/providers/movies/dramacool.js +367 -0
- package/dist/providers/movies/dramacool.js.map +1 -0
- package/dist/providers/movies/flixhq.d.ts +90 -0
- package/dist/providers/movies/flixhq.js +438 -0
- package/dist/providers/movies/flixhq.js.map +1 -0
- package/dist/providers/movies/goku.d.ts +80 -0
- package/dist/providers/movies/goku.js +369 -0
- package/dist/providers/movies/goku.js.map +1 -0
- package/dist/providers/movies/himovies.d.ts +102 -0
- package/dist/providers/movies/himovies.js +445 -0
- package/dist/providers/movies/himovies.js.map +1 -0
- package/dist/providers/movies/index.d.ts +17 -0
- package/dist/providers/movies/index.js +22 -0
- package/dist/providers/movies/index.js.map +1 -0
- package/dist/providers/movies/netmirror.d.ts +27 -0
- package/dist/providers/movies/netmirror.js +259 -0
- package/dist/providers/movies/netmirror.js.map +1 -0
- package/dist/providers/movies/sflix.d.ts +106 -0
- package/dist/providers/movies/sflix.js +490 -0
- package/dist/providers/movies/sflix.js.map +1 -0
- package/dist/providers/movies/turkish123.d.ts +32 -0
- package/dist/providers/movies/turkish123.js +141 -0
- package/dist/providers/movies/turkish123.js.map +1 -0
- package/dist/providers/news/animenewsnetwork.d.ts +30 -0
- package/dist/providers/news/animenewsnetwork.js +105 -0
- package/dist/providers/news/animenewsnetwork.js.map +1 -0
- package/dist/providers/news/index.d.ts +5 -0
- package/dist/providers/news/index.js +8 -0
- package/dist/providers/news/index.js.map +1 -0
- package/dist/providers/others/index.d.ts +0 -0
- package/dist/providers/others/index.js +2 -0
- package/dist/providers/others/index.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +33 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/providers-list.d.ts +11 -0
- package/dist/utils/providers-list.js +40 -0
- package/dist/utils/providers-list.js.map +1 -0
- package/dist/utils/queries.d.ts +13 -0
- package/dist/utils/queries.js +31 -0
- package/dist/utils/queries.js.map +1 -0
- package/dist/utils/utils.d.ts +32 -0
- package/dist/utils/utils.js +324 -0
- package/dist/utils/utils.js.map +1 -0
- package/package.json +107 -0
package/README.md
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="./animb.png" alt="Animob Logo" width="200" style="border-radius: 50%;"/>
|
|
3
|
+
</p>
|
|
4
|
+
|
|
5
|
+
<h1 align="center">Animob</h1>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
A Node.js library for streaming anime, reading manga, and accessing anime/manga metadata through multiple providers.
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://www.npmjs.com/package/animob">
|
|
13
|
+
<img src="https://img.shields.io/npm/v/animob" alt="npm version">
|
|
14
|
+
</a>
|
|
15
|
+
<a href="./LICENSE">
|
|
16
|
+
<img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License">
|
|
17
|
+
</a>
|
|
18
|
+
</p>
|
|
19
|
+
|
|
20
|
+
## Installation
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npm install animob
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
or
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
yarn add animob
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Quick Start
|
|
33
|
+
|
|
34
|
+
### Anime Streaming
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
import { ANIME } from 'animob';
|
|
38
|
+
|
|
39
|
+
// Search for anime
|
|
40
|
+
const animePahe = new ANIME.AnimePahe();
|
|
41
|
+
const results = await animePahe.search('Naruto');
|
|
42
|
+
console.log(results);
|
|
43
|
+
|
|
44
|
+
// Get anime details
|
|
45
|
+
const info = await animePahe.fetchAnimeInfo(results.results[0].id);
|
|
46
|
+
console.log(info);
|
|
47
|
+
|
|
48
|
+
// Get episode sources
|
|
49
|
+
const sources = await animePahe.fetchEpisodeSources(info.episodes[0].id);
|
|
50
|
+
console.log(sources);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Manga Reading
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
import { MANGA } from 'animob';
|
|
57
|
+
|
|
58
|
+
// Search for manga
|
|
59
|
+
const mangadex = new MANGA.MangaDex();
|
|
60
|
+
const results = await mangadex.search('One Piece');
|
|
61
|
+
console.log(results);
|
|
62
|
+
|
|
63
|
+
// Get manga details
|
|
64
|
+
const info = await mangadex.fetchMangaInfo(results.results[0].id);
|
|
65
|
+
console.log(info);
|
|
66
|
+
|
|
67
|
+
// Get chapter pages
|
|
68
|
+
const pages = await mangadex.fetchChapterPages(info.chapters[0].id);
|
|
69
|
+
console.log(pages);
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Anime/Manga Metadata
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
import { META } from 'animob';
|
|
76
|
+
|
|
77
|
+
// Search anime/manga database
|
|
78
|
+
const anilist = new META.Anilist();
|
|
79
|
+
const results = await anilist.search('Demon Slayer');
|
|
80
|
+
console.log(results);
|
|
81
|
+
|
|
82
|
+
// Get detailed information
|
|
83
|
+
const info = await anilist.fetchAnimeInfo(results.results[0].id);
|
|
84
|
+
console.log(info);
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Available Providers
|
|
88
|
+
|
|
89
|
+
### Anime
|
|
90
|
+
- `AnimePahe` - Anime streaming with multiple quality options
|
|
91
|
+
- `Hianime` - High-quality anime streaming (uses anizen.tr mirror)
|
|
92
|
+
- `AnimeSaturn` - Italian anime provider with global access
|
|
93
|
+
- `AnimeKai` - Anime streaming provider
|
|
94
|
+
- `KickAssAnime` - Anime streaming with various sources
|
|
95
|
+
- `AnimeUnity` - Italian anime streaming
|
|
96
|
+
- `AnimeSama` - French anime streaming
|
|
97
|
+
|
|
98
|
+
### Manga
|
|
99
|
+
- `MangaDex` - Official manga reading platform
|
|
100
|
+
- `MangaKakalot` - Popular manga provider
|
|
101
|
+
- `MangaPill` - Manga reading with multiple sources
|
|
102
|
+
- `MangaReader` - Extensive manga library
|
|
103
|
+
- `Comick` - Comic and manga provider
|
|
104
|
+
- `AsuraScans` - Scanlation group provider
|
|
105
|
+
- `WeebCentral` - Manga aggregator
|
|
106
|
+
- `MangaHere` - Manga reading platform
|
|
107
|
+
|
|
108
|
+
### Movies & TV
|
|
109
|
+
- `FlixHQ` - Movies and TV shows
|
|
110
|
+
- `DramaCool` - Asian dramas
|
|
111
|
+
- `Goku` - Movie streaming
|
|
112
|
+
- `SFlix` - Movies and series
|
|
113
|
+
|
|
114
|
+
### Metadata
|
|
115
|
+
- `Anilist` - Comprehensive anime/manga database
|
|
116
|
+
- `MAL` - MyAnimeList integration
|
|
117
|
+
- `TMDB` - The Movie Database
|
|
118
|
+
|
|
119
|
+
## Usage Examples
|
|
120
|
+
|
|
121
|
+
### Get Trending Anime
|
|
122
|
+
|
|
123
|
+
```typescript
|
|
124
|
+
import { META } from 'animob';
|
|
125
|
+
|
|
126
|
+
const anilist = new META.Anilist();
|
|
127
|
+
const trending = await anilist.fetchTrendingAnime();
|
|
128
|
+
console.log(trending);
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Stream Anime Episode
|
|
132
|
+
|
|
133
|
+
```typescript
|
|
134
|
+
import { ANIME } from 'animob';
|
|
135
|
+
|
|
136
|
+
const hianime = new ANIME.Hianime();
|
|
137
|
+
|
|
138
|
+
// Search
|
|
139
|
+
const search = await hianime.search('One Piece');
|
|
140
|
+
|
|
141
|
+
// Get info
|
|
142
|
+
const info = await hianime.fetchAnimeInfo(search.results[0].id);
|
|
143
|
+
|
|
144
|
+
// Get episode sources
|
|
145
|
+
const episode = info.episodes[0];
|
|
146
|
+
const sources = await hianime.fetchEpisodeSources(episode.id);
|
|
147
|
+
|
|
148
|
+
console.log('Stream URL:', sources.sources[0].url);
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Read Manga Chapter
|
|
152
|
+
|
|
153
|
+
```typescript
|
|
154
|
+
import { MANGA } from 'animob';
|
|
155
|
+
|
|
156
|
+
const mangadex = new MANGA.MangaDex();
|
|
157
|
+
|
|
158
|
+
// Search
|
|
159
|
+
const search = await mangadex.search('Solo Leveling');
|
|
160
|
+
|
|
161
|
+
// Get info
|
|
162
|
+
const info = await mangadex.fetchMangaInfo(search.results[0].id);
|
|
163
|
+
|
|
164
|
+
// Get chapter pages
|
|
165
|
+
const chapter = info.chapters[0];
|
|
166
|
+
const pages = await mangadex.fetchChapterPages(chapter.id);
|
|
167
|
+
|
|
168
|
+
console.log('Pages:', pages);
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Provider Status
|
|
172
|
+
|
|
173
|
+
### Verified Working
|
|
174
|
+
- ✅ AnimePahe
|
|
175
|
+
- ✅ Hianime (anizen.tr)
|
|
176
|
+
- ✅ AnimeSaturn
|
|
177
|
+
- ✅ MangaDex
|
|
178
|
+
- ✅ Anilist
|
|
179
|
+
|
|
180
|
+
### Other Providers
|
|
181
|
+
Other providers are included but may have varying reliability depending on your location and network.
|
|
182
|
+
|
|
183
|
+
## Building from Source
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
# Clone the repository
|
|
187
|
+
git clone https://github.com/yourusername/animob.git
|
|
188
|
+
cd animob
|
|
189
|
+
|
|
190
|
+
# Install dependencies
|
|
191
|
+
npm install
|
|
192
|
+
|
|
193
|
+
# Build
|
|
194
|
+
npm run build
|
|
195
|
+
|
|
196
|
+
# Run tests
|
|
197
|
+
npm test
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
## API Reference
|
|
201
|
+
|
|
202
|
+
### Common Methods
|
|
203
|
+
|
|
204
|
+
All providers implement these base methods:
|
|
205
|
+
|
|
206
|
+
#### Anime Providers
|
|
207
|
+
- `search(query: string)` - Search for anime
|
|
208
|
+
- `fetchAnimeInfo(id: string)` - Get anime details
|
|
209
|
+
- `fetchEpisodeSources(episodeId: string)` - Get streaming sources
|
|
210
|
+
|
|
211
|
+
#### Manga Providers
|
|
212
|
+
- `search(query: string)` - Search for manga
|
|
213
|
+
- `fetchMangaInfo(id: string)` - Get manga details
|
|
214
|
+
- `fetchChapterPages(chapterId: string)` - Get chapter pages
|
|
215
|
+
|
|
216
|
+
#### Meta Providers
|
|
217
|
+
- `search(query: string)` - Search database
|
|
218
|
+
- `fetchAnimeInfo(id: string)` - Get anime information
|
|
219
|
+
- `fetchMangaInfo(id: string)` - Get manga information
|
|
220
|
+
|
|
221
|
+
## TypeScript Support
|
|
222
|
+
|
|
223
|
+
Animob is written in TypeScript and includes type definitions out of the box.
|
|
224
|
+
|
|
225
|
+
```typescript
|
|
226
|
+
import { ANIME, MANGA, META, IAnimeResult, IMangaResult } from 'animob';
|
|
227
|
+
|
|
228
|
+
const results: IAnimeResult[] = await new ANIME.AnimePahe().search('Naruto');
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## Contributing
|
|
232
|
+
|
|
233
|
+
Contributions are welcome! Please feel free to submit issues or pull requests.
|
|
234
|
+
|
|
235
|
+
## License
|
|
236
|
+
|
|
237
|
+
This project is licensed under the MIT License - see the [LICENSE](./LICENSE) file for details.
|
|
238
|
+
|
|
239
|
+
## Credits
|
|
240
|
+
|
|
241
|
+
Built on top of [consumet.ts](https://github.com/consumet/consumet.ts) with improvements and verified providers.
|
|
242
|
+
|
|
243
|
+
## Disclaimer
|
|
244
|
+
|
|
245
|
+
This library is for educational purposes only. Please support official releases and respect copyright laws in your country.
|
package/animb.png
ADDED
|
Binary file
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import Kwik from './kwik';
|
|
2
|
+
import MixDrop from './mixdrop';
|
|
3
|
+
import StreamSB from './streamsb';
|
|
4
|
+
import StreamTape from './streamtape';
|
|
5
|
+
import StreamWish from './streamwish';
|
|
6
|
+
import VidCloud from './vidcloud';
|
|
7
|
+
import VideoStr from './videostr';
|
|
8
|
+
import MegaCloud from './megacloud';
|
|
9
|
+
import Voe from './voe';
|
|
10
|
+
import { MegaUp } from './megaup';
|
|
11
|
+
export { Kwik, MixDrop, MegaCloud, StreamSB, StreamTape, StreamWish, VidCloud, VideoStr, Voe, MegaUp };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.MegaUp = exports.Voe = exports.VideoStr = exports.VidCloud = exports.StreamWish = exports.StreamTape = exports.StreamSB = exports.MegaCloud = exports.MixDrop = exports.Kwik = void 0;
|
|
7
|
+
const kwik_1 = __importDefault(require("./kwik"));
|
|
8
|
+
exports.Kwik = kwik_1.default;
|
|
9
|
+
const mixdrop_1 = __importDefault(require("./mixdrop"));
|
|
10
|
+
exports.MixDrop = mixdrop_1.default;
|
|
11
|
+
const streamsb_1 = __importDefault(require("./streamsb"));
|
|
12
|
+
exports.StreamSB = streamsb_1.default;
|
|
13
|
+
const streamtape_1 = __importDefault(require("./streamtape"));
|
|
14
|
+
exports.StreamTape = streamtape_1.default;
|
|
15
|
+
const streamwish_1 = __importDefault(require("./streamwish"));
|
|
16
|
+
exports.StreamWish = streamwish_1.default;
|
|
17
|
+
const vidcloud_1 = __importDefault(require("./vidcloud"));
|
|
18
|
+
exports.VidCloud = vidcloud_1.default;
|
|
19
|
+
const videostr_1 = __importDefault(require("./videostr"));
|
|
20
|
+
exports.VideoStr = videostr_1.default;
|
|
21
|
+
const megacloud_1 = __importDefault(require("./megacloud"));
|
|
22
|
+
exports.MegaCloud = megacloud_1.default;
|
|
23
|
+
const voe_1 = __importDefault(require("./voe"));
|
|
24
|
+
exports.Voe = voe_1.default;
|
|
25
|
+
const megaup_1 = require("./megaup");
|
|
26
|
+
Object.defineProperty(exports, "MegaUp", { enumerable: true, get: function () { return megaup_1.MegaUp; } });
|
|
27
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAWjB,eAXF,cAAI,CAWE;AAVb,wDAAgC;AAUjB,kBAVR,iBAAO,CAUQ;AATtB,0DAAkC;AASC,mBAT5B,kBAAQ,CAS4B;AAR3C,8DAAsC;AAQO,qBARtC,oBAAU,CAQsC;AAPvD,8DAAsC;AAOmB,qBAPlD,oBAAU,CAOkD;AANnE,0DAAkC;AAMmC,mBAN9D,kBAAQ,CAM8D;AAL7E,0DAAkC;AAK6C,mBALxE,kBAAQ,CAKwE;AAJvF,4DAAoC;AAIZ,oBAJjB,mBAAS,CAIiB;AAHjC,gDAAwB;AAGiE,cAHlF,aAAG,CAGkF;AAF5F,qCAAkC;AAE4D,uFAFrF,eAAM,OAEqF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { VideoExtractor, IVideo } from '../models';
|
|
2
|
+
declare class Kwik extends VideoExtractor {
|
|
3
|
+
protected serverName: string;
|
|
4
|
+
protected sources: IVideo[];
|
|
5
|
+
private readonly baseUrl;
|
|
6
|
+
private readonly safelinkBaseUrl;
|
|
7
|
+
extract: (videoUrl: URL) => Promise<IVideo[]>;
|
|
8
|
+
bypassShortlink(shortinkUrl: URL): Promise<any>;
|
|
9
|
+
getDirectDownloadLink(downloadUrl: URL): Promise<string | null>;
|
|
10
|
+
/**
|
|
11
|
+
* @param payload - The encrypted string containing delimiters
|
|
12
|
+
* @param key - The custom alphabet string (e.g., "dcnCbMvPQ")
|
|
13
|
+
* @param offset - The integer to subtract from the decoded value (e.g., 14)
|
|
14
|
+
* @param radix - The base of the number system (e.g., 5)
|
|
15
|
+
*/
|
|
16
|
+
deobfuscate(payload: string, key: string, offset: number, radix: number): string;
|
|
17
|
+
}
|
|
18
|
+
export default Kwik;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const models_1 = require("../models");
|
|
4
|
+
const utils_1 = require("../utils/utils");
|
|
5
|
+
class Kwik extends models_1.VideoExtractor {
|
|
6
|
+
constructor() {
|
|
7
|
+
super(...arguments);
|
|
8
|
+
this.serverName = 'kwik';
|
|
9
|
+
this.sources = [];
|
|
10
|
+
this.baseUrl = 'https://animepahe.si/';
|
|
11
|
+
this.safelinkBaseUrl = 'https://pahe.win/';
|
|
12
|
+
this.extract = async (videoUrl) => {
|
|
13
|
+
try {
|
|
14
|
+
const response = await fetch(`${videoUrl.href}`, {
|
|
15
|
+
headers: { Referer: this.baseUrl },
|
|
16
|
+
});
|
|
17
|
+
const data = await response.text();
|
|
18
|
+
const source = (0, utils_1.safeUnpack)(/;(eval)(\(f.*?)(\n<\/script>)/s.exec(data)[2]).match(/https.*?m3u8/);
|
|
19
|
+
this.sources.push({
|
|
20
|
+
url: source[0],
|
|
21
|
+
isM3U8: source[0].includes('.m3u8'),
|
|
22
|
+
});
|
|
23
|
+
return this.sources;
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
throw new Error(err.message);
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// not best Implementation, but it get MP4
|
|
31
|
+
async bypassShortlink(shortinkUrl) {
|
|
32
|
+
try {
|
|
33
|
+
const response = await fetch(`${shortinkUrl.href}`, {
|
|
34
|
+
headers: { Referer: this.baseUrl },
|
|
35
|
+
});
|
|
36
|
+
const data = await response.text();
|
|
37
|
+
// not the best, but assume the format always like this
|
|
38
|
+
const destination = data.match(`a\\\.redirect\\\"\\\)\\\.attr\\\(\\\"href","(https://[^"]+)`);
|
|
39
|
+
return destination[1];
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
throw new Error(err.message);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async getDirectDownloadLink(downloadUrl) {
|
|
46
|
+
var _a;
|
|
47
|
+
try {
|
|
48
|
+
if (downloadUrl.href.match(this.safelinkBaseUrl)) {
|
|
49
|
+
const bypassedUrl = await this.bypassShortlink(downloadUrl);
|
|
50
|
+
downloadUrl = new URL(bypassedUrl);
|
|
51
|
+
}
|
|
52
|
+
const response = await fetch(`${downloadUrl.href}`, {
|
|
53
|
+
headers: { Referer: this.baseUrl },
|
|
54
|
+
});
|
|
55
|
+
const cookie = (_a = response.headers.get('set-cookie')) === null || _a === void 0 ? void 0 : _a.split(';')[0];
|
|
56
|
+
const data = await response.text();
|
|
57
|
+
const obfuscatedParams = data.match(`\\\}\\\("([^"]+)".*?"([^"]+)"\\\s*,\\\s*([^,]+)\\\s*,\\\s*([^,]+)`);
|
|
58
|
+
const formScript = this.deobfuscate(obfuscatedParams[1], obfuscatedParams[2], Number(obfuscatedParams[3]), Number(obfuscatedParams[4]));
|
|
59
|
+
const formActionUrl = formScript.match(/form action="([^"]+)/)[1];
|
|
60
|
+
const postToken = formScript.match(/name="_token" value="([^"]+)/)[1];
|
|
61
|
+
const formData = new URLSearchParams();
|
|
62
|
+
formData.append('_token', postToken);
|
|
63
|
+
const formResponse = await fetch(`${formActionUrl}`, {
|
|
64
|
+
method: 'POST',
|
|
65
|
+
headers: {
|
|
66
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
67
|
+
Referer: `${downloadUrl.href}`,
|
|
68
|
+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36',
|
|
69
|
+
Cookie: cookie,
|
|
70
|
+
},
|
|
71
|
+
body: formData,
|
|
72
|
+
redirect: 'manual',
|
|
73
|
+
});
|
|
74
|
+
if (formResponse.status === 302) {
|
|
75
|
+
return formResponse.headers.get('location');
|
|
76
|
+
}
|
|
77
|
+
// default to downloadUrl, overkill, but it try to get MP4
|
|
78
|
+
return downloadUrl.href;
|
|
79
|
+
}
|
|
80
|
+
catch (err) {
|
|
81
|
+
return downloadUrl.href;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* @param payload - The encrypted string containing delimiters
|
|
86
|
+
* @param key - The custom alphabet string (e.g., "dcnCbMvPQ")
|
|
87
|
+
* @param offset - The integer to subtract from the decoded value (e.g., 14)
|
|
88
|
+
* @param radix - The base of the number system (e.g., 5)
|
|
89
|
+
*/
|
|
90
|
+
deobfuscate(payload, key, offset, radix) {
|
|
91
|
+
let result = '';
|
|
92
|
+
const delimiter = key[radix];
|
|
93
|
+
const chunks = payload.split(delimiter);
|
|
94
|
+
const map = {};
|
|
95
|
+
for (let i = 0; i < key.length; i++) {
|
|
96
|
+
map[key[i]] = i;
|
|
97
|
+
}
|
|
98
|
+
for (const chunk of chunks) {
|
|
99
|
+
if (chunk.length === 0)
|
|
100
|
+
continue;
|
|
101
|
+
let val = 0;
|
|
102
|
+
for (let i = 0; i < chunk.length; i++) {
|
|
103
|
+
val = val * radix + map[chunk[i]];
|
|
104
|
+
}
|
|
105
|
+
// Formula application
|
|
106
|
+
result += String.fromCharCode(val - offset);
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
return decodeURIComponent(escape(result));
|
|
110
|
+
}
|
|
111
|
+
catch (_a) {
|
|
112
|
+
return result;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.default = Kwik;
|
|
117
|
+
//# sourceMappingURL=kwik.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kwik.js","sourceRoot":"","sources":["../../src/extractors/kwik.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IVideo } from '../models';
|
|
2
|
+
import VideoExtractor from '../models/video-extractor';
|
|
3
|
+
declare class Lpayer extends VideoExtractor {
|
|
4
|
+
protected serverName: string;
|
|
5
|
+
protected sources: IVideo[];
|
|
6
|
+
private readonly AES_KEY;
|
|
7
|
+
private readonly AES_IV;
|
|
8
|
+
private decrypt;
|
|
9
|
+
extract: (videoUrl: URL) => Promise<IVideo[]>;
|
|
10
|
+
}
|
|
11
|
+
export default Lpayer;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
const video_extractor_1 = __importDefault(require("../models/video-extractor"));
|
|
40
|
+
const crypto = __importStar(require("crypto"));
|
|
41
|
+
class Lpayer extends video_extractor_1.default {
|
|
42
|
+
constructor() {
|
|
43
|
+
super(...arguments);
|
|
44
|
+
this.serverName = 'lpayer';
|
|
45
|
+
this.sources = [];
|
|
46
|
+
this.AES_KEY = Buffer.from('kiemtienmua911ca', 'utf8');
|
|
47
|
+
this.AES_IV = Buffer.from('1234567890oiuytr', 'utf8');
|
|
48
|
+
this.extract = async (videoUrl) => {
|
|
49
|
+
var _a;
|
|
50
|
+
try {
|
|
51
|
+
const videoId = videoUrl.hash.substring(1);
|
|
52
|
+
if (!videoId)
|
|
53
|
+
return [];
|
|
54
|
+
const apiUrl = `${videoUrl.origin}/api/v1/video?id=${videoId}&w=1366&h=768&r=`;
|
|
55
|
+
const { data: encryptedData } = await this.client.get(apiUrl, {
|
|
56
|
+
headers: {
|
|
57
|
+
Referer: videoUrl.href,
|
|
58
|
+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
const decryptedData = this.decrypt(encryptedData);
|
|
62
|
+
if (!decryptedData)
|
|
63
|
+
return [];
|
|
64
|
+
const videoData = JSON.parse(decryptedData);
|
|
65
|
+
let hlsUrl = videoData.hls || videoData.source || videoData.url || videoData.file || '';
|
|
66
|
+
if (!hlsUrl)
|
|
67
|
+
return [];
|
|
68
|
+
if (hlsUrl.startsWith('/')) {
|
|
69
|
+
hlsUrl = videoUrl.origin + hlsUrl;
|
|
70
|
+
}
|
|
71
|
+
this.sources.push({
|
|
72
|
+
quality: 'auto',
|
|
73
|
+
url: hlsUrl,
|
|
74
|
+
isM3U8: hlsUrl.includes('.m3u8'),
|
|
75
|
+
});
|
|
76
|
+
if (hlsUrl.includes('.m3u8')) {
|
|
77
|
+
try {
|
|
78
|
+
const { data } = await this.client.get(hlsUrl, {
|
|
79
|
+
headers: {
|
|
80
|
+
Referer: videoUrl.href,
|
|
81
|
+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
|
|
82
|
+
},
|
|
83
|
+
timeout: 5000,
|
|
84
|
+
});
|
|
85
|
+
if (data.includes('EXT-X-STREAM-INF')) {
|
|
86
|
+
const lines = data.split('\n');
|
|
87
|
+
for (let i = 0; i < lines.length; i++) {
|
|
88
|
+
if (lines[i].startsWith('#EXT-X-STREAM-INF:')) {
|
|
89
|
+
const resolutionMatch = lines[i].match(/RESOLUTION=\d+x(\d+)/);
|
|
90
|
+
const quality = resolutionMatch ? `${resolutionMatch[1]}p` : 'unknown';
|
|
91
|
+
const urlLine = (_a = lines[i + 1]) === null || _a === void 0 ? void 0 : _a.trim();
|
|
92
|
+
if (urlLine && !urlLine.startsWith('#')) {
|
|
93
|
+
let variantUrl = urlLine;
|
|
94
|
+
if (!variantUrl.startsWith('http')) {
|
|
95
|
+
const baseUrl = hlsUrl.substring(0, hlsUrl.lastIndexOf('/') + 1);
|
|
96
|
+
variantUrl = baseUrl + variantUrl;
|
|
97
|
+
}
|
|
98
|
+
this.sources.push({
|
|
99
|
+
quality,
|
|
100
|
+
url: variantUrl,
|
|
101
|
+
isM3U8: true,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch (_b) { }
|
|
109
|
+
}
|
|
110
|
+
return this.sources;
|
|
111
|
+
}
|
|
112
|
+
catch (_c) {
|
|
113
|
+
return [];
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
decrypt(encryptedHex) {
|
|
118
|
+
try {
|
|
119
|
+
const encryptedBuffer = Buffer.from(encryptedHex, 'hex');
|
|
120
|
+
const decipher = crypto.createDecipheriv('aes-128-cbc', this.AES_KEY, this.AES_IV);
|
|
121
|
+
let decrypted = decipher.update(encryptedBuffer);
|
|
122
|
+
decrypted = Buffer.concat([decrypted, decipher.final()]);
|
|
123
|
+
return decrypted.toString('utf8');
|
|
124
|
+
}
|
|
125
|
+
catch (_a) {
|
|
126
|
+
return '';
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
exports.default = Lpayer;
|
|
131
|
+
//# sourceMappingURL=lplayer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lplayer.js","sourceRoot":"","sources":["../../src/extractors/lplayer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { VideoExtractor, IVideo, ISubtitle } from '../models';
|
|
2
|
+
declare class MegaCloud extends VideoExtractor {
|
|
3
|
+
protected serverName: string;
|
|
4
|
+
protected sources: IVideo[];
|
|
5
|
+
extract: (videoUrl: URL) => Promise<{
|
|
6
|
+
sources: IVideo[];
|
|
7
|
+
subtitles: ISubtitle[];
|
|
8
|
+
}>;
|
|
9
|
+
}
|
|
10
|
+
export default MegaCloud;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const models_1 = require("../models");
|
|
4
|
+
class MegaCloud extends models_1.VideoExtractor {
|
|
5
|
+
constructor() {
|
|
6
|
+
super(...arguments);
|
|
7
|
+
this.serverName = 'MegaCloud';
|
|
8
|
+
this.sources = [];
|
|
9
|
+
this.extract = async (videoUrl) => {
|
|
10
|
+
var _a, _b, _c;
|
|
11
|
+
try {
|
|
12
|
+
const apiUrl = 'https://crawlr.cc/9D7F1B3E8?url=' + encodeURIComponent(videoUrl.href);
|
|
13
|
+
const { data } = await this.client.get(apiUrl);
|
|
14
|
+
if (!data.sources || data.sources.length === 0) {
|
|
15
|
+
throw new Error('No sources returned');
|
|
16
|
+
}
|
|
17
|
+
for (const src of data.sources) {
|
|
18
|
+
this.sources.push({
|
|
19
|
+
url: src.url,
|
|
20
|
+
quality: (_a = src.quality) !== null && _a !== void 0 ? _a : 'auto',
|
|
21
|
+
isM3U8: src.url.includes('.m3u8'),
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const subtitles = (_c = (_b = data.tracks) === null || _b === void 0 ? void 0 : _b.map(t => {
|
|
25
|
+
var _a, _b;
|
|
26
|
+
return ({
|
|
27
|
+
lang: (_a = t.label) !== null && _a !== void 0 ? _a : 'Unknown',
|
|
28
|
+
url: t.file,
|
|
29
|
+
kind: (_b = t.kind) !== null && _b !== void 0 ? _b : 'captions',
|
|
30
|
+
});
|
|
31
|
+
})) !== null && _c !== void 0 ? _c : [];
|
|
32
|
+
return {
|
|
33
|
+
sources: this.sources,
|
|
34
|
+
subtitles,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
throw new Error(err.message);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.default = MegaCloud;
|
|
44
|
+
//# sourceMappingURL=megacloud.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"megacloud.js","sourceRoot":"","sources":["../../src/extractors/megacloud.ts"],"names":[],"mappings":";;AAAA,sCAA8D;AAqB9D,MAAM,SAAU,SAAQ,uBAAc;IAAtC;;QACqB,eAAU,GAAG,WAAW,CAAC;QACzB,YAAO,GAAa,EAAE,CAAC;QAEjC,YAAO,GAAG,KAAK,EAAE,QAAa,EAA0D,EAAE;;YACjG,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,kCAAkC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAEtF,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAmB,MAAM,CAAC,CAAC;gBAEjE,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC/C,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACzC,CAAC;gBAED,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;oBAC/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;wBAChB,GAAG,EAAE,GAAG,CAAC,GAAG;wBACZ,OAAO,EAAE,MAAA,GAAG,CAAC,OAAO,mCAAI,MAAM;wBAC9B,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC;qBAClC,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,SAAS,GACb,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,GAAG,CAAC,CAAC,CAAC,EAAE;;oBAAC,OAAA,CAAC;wBACrB,IAAI,EAAE,MAAA,CAAC,CAAC,KAAK,mCAAI,SAAS;wBAC1B,GAAG,EAAE,CAAC,CAAC,IAAI;wBACX,IAAI,EAAE,MAAA,CAAC,CAAC,IAAI,mCAAI,UAAU;qBAC3B,CAAC,CAAA;iBAAA,CAAC,mCAAI,EAAE,CAAC;gBAEZ,OAAO;oBACL,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,SAAS;iBACV,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC;CAAA;AAED,kBAAe,SAAS,CAAC"}
|