anixartjs 0.0.1 → 0.0.2
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 +282 -617
- package/README.md +4 -0
- package/dist/api/profile.d.ts +2 -2
- package/dist/classes/BaseProfile.d.ts +2 -1
- package/dist/classes/BaseProfile.js +4 -0
- package/dist/classes/FullProfile.d.ts +3 -3
- package/dist/classes/FullProfile.js +1 -1
- package/dist/classes/Release.d.ts +6 -6
- package/dist/types/profile.d.ts +10 -3
- package/dist/types/release.d.ts +54 -5
- package/dist/utils/LinkParser.js +4 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
> [!WARNING]
|
|
2
|
+
> Данный проект был сделан в ознакомительных целях. Автор осуждает и не поддерживает создание авторегов, ботов для накрутки лайков, спам ботов и любых других проектов нацеленых на абуз и злоупотребление API Anixart.
|
|
3
|
+
|
|
1
4
|
<h2 align="center">AnixartJS</h2>
|
|
2
5
|
|
|
3
6
|
AnixartJS — это имплементация **API Anixart** на **TypeScript** для NodeJS, предоставляющая удобный и интуитивно понятный интерфейс для взаимодействия с приложением Anixart.
|
|
@@ -171,6 +174,7 @@ if (release) {
|
|
|
171
174
|
- [ ] Добавление всех эндпоинтов
|
|
172
175
|
- [ ] Добавление классов для коллекций
|
|
173
176
|
- [ ] Документация
|
|
177
|
+
- [ ] Возможность использовать библиотеку в браузере полностью
|
|
174
178
|
|
|
175
179
|
## 🤝 Вклад в проект
|
|
176
180
|
|
package/dist/api/profile.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Anixart } from "../client";
|
|
2
|
-
import { IProfileResponse, IBookmarkRequest, IFriendsRequest, IProfileShort, IFriendRequestResponse, IBaseApiParams, IBaseSearchRequest, IPageableResponse, IRelease, IProfile, IResponse, ISubsciptionCountResponse } from "../types";
|
|
2
|
+
import { IProfileResponse, IBookmarkRequest, IFriendsRequest, IProfileShort, IFriendRequestResponse, IBaseApiParams, IBaseSearchRequest, IPageableResponse, IRelease, IProfile, IResponse, ISubsciptionCountResponse, IVoteRelease } from "../types";
|
|
3
3
|
/**
|
|
4
4
|
* Класс профиля
|
|
5
5
|
*
|
|
@@ -22,5 +22,5 @@ export declare class Profile {
|
|
|
22
22
|
getFavorites(data: IBookmarkRequest, options?: IBaseApiParams): Promise<IPageableResponse<IRelease>>;
|
|
23
23
|
getSubsciptions(page: number, options?: IBaseApiParams): Promise<IPageableResponse<any>>;
|
|
24
24
|
getSubscriptionCount(options?: IBaseApiParams): Promise<ISubsciptionCountResponse>;
|
|
25
|
-
getVotesReleases(id: number, page: number, sort?: number, options?: IBaseApiParams): Promise<IPageableResponse<
|
|
25
|
+
getVotesReleases(id: number, page: number, sort?: number, options?: IBaseApiParams): Promise<IPageableResponse<IVoteRelease>>;
|
|
26
26
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Anixart } from "../client";
|
|
2
|
-
import { IFriendRequestResponse, IProfileShort } from "../types";
|
|
2
|
+
import { IFriendRequestResponse, IPageableResponse, IProfileShort, IVoteRelease } from "../types";
|
|
3
3
|
export declare class BaseProfile {
|
|
4
4
|
protected readonly client: Anixart;
|
|
5
5
|
readonly id: number;
|
|
@@ -22,4 +22,5 @@ export declare class BaseProfile {
|
|
|
22
22
|
getFriends(page?: number): Promise<BaseProfile[]>;
|
|
23
23
|
sendFriendRequest(): Promise<IFriendRequestResponse>;
|
|
24
24
|
removeFriendRequest(): Promise<IFriendRequestResponse>;
|
|
25
|
+
getVotesReleases(page?: number, sort?: number): Promise<IPageableResponse<IVoteRelease>>;
|
|
25
26
|
}
|
|
@@ -33,5 +33,9 @@ class BaseProfile {
|
|
|
33
33
|
const request = await this.client.endpoints.profile.removeFriendRequest(this.id);
|
|
34
34
|
return request;
|
|
35
35
|
}
|
|
36
|
+
async getVotesReleases(page, sort) {
|
|
37
|
+
const request = await this.client.endpoints.profile.getVotesReleases(this.id, page !== null && page !== void 0 ? page : 0, sort !== null && sort !== void 0 ? sort : 1);
|
|
38
|
+
return request;
|
|
39
|
+
}
|
|
36
40
|
}
|
|
37
41
|
exports.BaseProfile = BaseProfile;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Anixart } from "../client";
|
|
2
2
|
import { BaseProfile } from "./BaseProfile";
|
|
3
|
-
import { IProfile, IRole } from "../types";
|
|
3
|
+
import { IProfile, IRole, IVoteRelease, IWatchDynamics } from "../types";
|
|
4
4
|
import { Release } from "./Release";
|
|
5
5
|
export declare class FullProfile extends BaseProfile {
|
|
6
6
|
readonly client: Anixart;
|
|
7
7
|
readonly status: string;
|
|
8
8
|
readonly sponsorshipExpires: number;
|
|
9
9
|
readonly history: Release[];
|
|
10
|
-
readonly votes:
|
|
10
|
+
readonly votes: IVoteRelease[];
|
|
11
11
|
readonly lastActivityTime: number;
|
|
12
12
|
readonly registerDate: number;
|
|
13
13
|
readonly vkPage: string;
|
|
@@ -39,7 +39,7 @@ export declare class FullProfile extends BaseProfile {
|
|
|
39
39
|
readonly isReportProcessNotificationsEnabled: boolean;
|
|
40
40
|
readonly isCommentNotificationsEnabled: boolean;
|
|
41
41
|
readonly isMyCollectionCommentNotificationsEnabled: boolean;
|
|
42
|
-
readonly watchDynamics:
|
|
42
|
+
readonly watchDynamics: IWatchDynamics[];
|
|
43
43
|
readonly ratingScore: number;
|
|
44
44
|
readonly isPermBanned: boolean;
|
|
45
45
|
readonly isBlocked: boolean;
|
|
@@ -28,7 +28,7 @@ class FullProfile extends BaseProfile_1.BaseProfile {
|
|
|
28
28
|
this.status = profile.status;
|
|
29
29
|
this.sponsorshipExpires = profile.sponsorshipExpires;
|
|
30
30
|
this.history = profile.history.map(release => new Release_1.Release(this.client, release));
|
|
31
|
-
this.votes = profile.votes
|
|
31
|
+
this.votes = profile.votes;
|
|
32
32
|
this.lastActivityTime = profile.last_activity_time;
|
|
33
33
|
this.registerDate = profile.register_date;
|
|
34
34
|
this.vkPage = profile.vk_page;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Anixart } from "../client";
|
|
2
|
-
import { BookmarkType, IBaseCommentAddRequest, IEpisodeLastUpdate, IRelated, IRelease, IReleaseCategory, IReleaseStatus, ResponseCode } from "../types";
|
|
2
|
+
import { BookmarkType, IBaseCommentAddRequest, ICommentRelease, IEpisodeLastUpdate, IRelated, IRelease, IReleaseCategory, IReleaseStatus, IVideoBanners, ResponseCode } from "../types";
|
|
3
3
|
import { Dubber } from "./Dubber";
|
|
4
4
|
import { ReleaseComment } from "./ReleaseComment";
|
|
5
5
|
export declare class Release {
|
|
@@ -24,11 +24,11 @@ export declare class Release {
|
|
|
24
24
|
readonly duration: number;
|
|
25
25
|
readonly season: number;
|
|
26
26
|
readonly broadcast: number;
|
|
27
|
-
readonly screenshots:
|
|
28
|
-
readonly comments:
|
|
27
|
+
readonly screenshots: string[];
|
|
28
|
+
readonly comments: ICommentRelease[];
|
|
29
29
|
readonly titleOriginal: string;
|
|
30
30
|
readonly titleRu: string;
|
|
31
|
-
readonly titleAlt:
|
|
31
|
+
readonly titleAlt: string;
|
|
32
32
|
readonly episodesReleased: number;
|
|
33
33
|
readonly episodesTotal: number;
|
|
34
34
|
readonly releaseDate: string;
|
|
@@ -66,12 +66,12 @@ export declare class Release {
|
|
|
66
66
|
readonly isViewed: boolean;
|
|
67
67
|
readonly isFavorite: boolean;
|
|
68
68
|
readonly isViewBlocked: boolean;
|
|
69
|
-
readonly screenshotImages:
|
|
69
|
+
readonly screenshotImages: string[];
|
|
70
70
|
readonly relatedReleases: Release[] | null;
|
|
71
71
|
readonly recommendedReleases: Release[];
|
|
72
72
|
readonly episodeLastUpdate: IEpisodeLastUpdate;
|
|
73
73
|
readonly commentPerDayCount: number;
|
|
74
|
-
readonly videoBanners:
|
|
74
|
+
readonly videoBanners: IVideoBanners[];
|
|
75
75
|
readonly profileReleaseTypeNotificationPreferenceCount: number;
|
|
76
76
|
readonly isReleaseTypeNotificationsEnabled: boolean;
|
|
77
77
|
constructor(client: Anixart, releaseResponse: IRelease);
|
package/dist/types/profile.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IResponse } from "./response";
|
|
2
2
|
import { IBaseRequestPageable } from "./request";
|
|
3
|
+
import { IRelease, IVoteRelease } from "./release";
|
|
3
4
|
export declare enum BookmarkType {
|
|
4
5
|
Watching = 1,
|
|
5
6
|
InPlans = 2,
|
|
@@ -32,8 +33,8 @@ export interface IProfile {
|
|
|
32
33
|
avatar: string;
|
|
33
34
|
status: string;
|
|
34
35
|
sponsorshipExpires: number;
|
|
35
|
-
history:
|
|
36
|
-
votes:
|
|
36
|
+
history: IRelease[];
|
|
37
|
+
votes: IVoteRelease[];
|
|
37
38
|
last_activity_time: number;
|
|
38
39
|
register_date: number;
|
|
39
40
|
vk_page: string;
|
|
@@ -73,7 +74,7 @@ export interface IProfile {
|
|
|
73
74
|
is_comment_notifications_enabled: boolean;
|
|
74
75
|
is_my_collection_comment_notifications_enabled: boolean;
|
|
75
76
|
is_verified: boolean;
|
|
76
|
-
watch_dynamics:
|
|
77
|
+
watch_dynamics: IWatchDynamics[];
|
|
77
78
|
friend_status: number;
|
|
78
79
|
rating_score: number;
|
|
79
80
|
is_blocked: boolean;
|
|
@@ -86,6 +87,12 @@ export interface IProfile {
|
|
|
86
87
|
roles: IRole[];
|
|
87
88
|
badge: IBadge | null;
|
|
88
89
|
}
|
|
90
|
+
export interface IWatchDynamics {
|
|
91
|
+
id: number;
|
|
92
|
+
day: number;
|
|
93
|
+
count: number;
|
|
94
|
+
timestamp: number;
|
|
95
|
+
}
|
|
89
96
|
export interface IRole {
|
|
90
97
|
color: string;
|
|
91
98
|
name: string;
|
package/dist/types/release.d.ts
CHANGED
|
@@ -94,11 +94,11 @@ export interface IRelease {
|
|
|
94
94
|
duration: number;
|
|
95
95
|
season: number;
|
|
96
96
|
broadcast: number;
|
|
97
|
-
screenshots:
|
|
97
|
+
screenshots: string[];
|
|
98
98
|
comments: ICommentRelease[];
|
|
99
99
|
title_original: string;
|
|
100
100
|
title_ru: string;
|
|
101
|
-
title_alt:
|
|
101
|
+
title_alt: string;
|
|
102
102
|
episodes_released: number;
|
|
103
103
|
episodes_total: number;
|
|
104
104
|
release_date: string;
|
|
@@ -136,15 +136,50 @@ export interface IRelease {
|
|
|
136
136
|
is_viewed: boolean;
|
|
137
137
|
is_favorite: boolean;
|
|
138
138
|
is_view_blocked: boolean;
|
|
139
|
-
screenshot_images:
|
|
139
|
+
screenshot_images: string[];
|
|
140
140
|
related_releases: IRelease[];
|
|
141
141
|
recommended_releases: IRelease[];
|
|
142
142
|
episode_last_update: IEpisodeLastUpdate;
|
|
143
143
|
comment_per_day_count: number;
|
|
144
|
-
video_banners:
|
|
144
|
+
video_banners: IVideoBanners[];
|
|
145
145
|
profile_release_type_notification_preference_count: number;
|
|
146
146
|
is_release_type_notifications_enabled: boolean;
|
|
147
147
|
}
|
|
148
|
+
export interface IVoteRelease {
|
|
149
|
+
translation: string;
|
|
150
|
+
id: number;
|
|
151
|
+
broadcast: number;
|
|
152
|
+
year: string;
|
|
153
|
+
country: string;
|
|
154
|
+
duration: number;
|
|
155
|
+
description: string;
|
|
156
|
+
image: string;
|
|
157
|
+
genres: string;
|
|
158
|
+
studio: string;
|
|
159
|
+
season: number;
|
|
160
|
+
note: string | null;
|
|
161
|
+
author: string;
|
|
162
|
+
director: string;
|
|
163
|
+
rating: number;
|
|
164
|
+
grade: number;
|
|
165
|
+
status: number;
|
|
166
|
+
title_original: string;
|
|
167
|
+
title_ru: string;
|
|
168
|
+
favorites_count: number;
|
|
169
|
+
creation_date: number;
|
|
170
|
+
last_update_date: number;
|
|
171
|
+
is_deleted: boolean;
|
|
172
|
+
is_favorite: boolean;
|
|
173
|
+
is_viewed: boolean;
|
|
174
|
+
is_play_disabled: boolean;
|
|
175
|
+
is_adult: boolean;
|
|
176
|
+
my_vote: number;
|
|
177
|
+
episodes_released: number;
|
|
178
|
+
episodes_total: number;
|
|
179
|
+
release_date: string;
|
|
180
|
+
age_rating: number;
|
|
181
|
+
profile_list_status: number;
|
|
182
|
+
}
|
|
148
183
|
export interface IVideo {
|
|
149
184
|
id: number;
|
|
150
185
|
release: IRelease | number;
|
|
@@ -169,10 +204,24 @@ export interface IVideo {
|
|
|
169
204
|
export interface IVideoResponse extends IResponse {
|
|
170
205
|
release: IRelease;
|
|
171
206
|
blocks: IVideo[];
|
|
172
|
-
streaming_platforms:
|
|
207
|
+
streaming_platforms: IVideoStreamingPlatform[];
|
|
173
208
|
last_videos: IVideo[];
|
|
174
209
|
can_appeal: boolean;
|
|
175
210
|
}
|
|
211
|
+
export interface IVideoBanners {
|
|
212
|
+
name: string;
|
|
213
|
+
image: string;
|
|
214
|
+
value: string;
|
|
215
|
+
action_id: number;
|
|
216
|
+
is_new: boolean;
|
|
217
|
+
}
|
|
218
|
+
export interface IVideoStreamingPlatform {
|
|
219
|
+
id: number;
|
|
220
|
+
name: string;
|
|
221
|
+
icon: string;
|
|
222
|
+
url: string;
|
|
223
|
+
position: number;
|
|
224
|
+
}
|
|
176
225
|
export interface IReleaseResponse extends IResponse {
|
|
177
226
|
release: IRelease;
|
|
178
227
|
}
|
package/dist/utils/LinkParser.js
CHANGED
|
@@ -26,6 +26,7 @@ class KodikParser {
|
|
|
26
26
|
const videoInfoHash = (_e = (_d = urlResponse.match(/videoInfo.hash\s=\s'(?<hash>.*?)';/is)) === null || _d === void 0 ? void 0 : _d.groups) === null || _e === void 0 ? void 0 : _e.hash;
|
|
27
27
|
const videoInfoId = (_g = (_f = urlResponse.match(/videoInfo.id\s=\s'(?<id>.*?)';/is)) === null || _f === void 0 ? void 0 : _f.groups) === null || _g === void 0 ? void 0 : _g.id;
|
|
28
28
|
const videoInfoType = (_j = (_h = urlResponse.match(/videoInfo.type\s=\s'(?<type>.*?)';/)) === null || _h === void 0 ? void 0 : _h.groups) === null || _j === void 0 ? void 0 : _j.type;
|
|
29
|
+
const validKodikUrl = new RegExp(/\/\/(get|cloud)\.kodik-storage\.com\/useruploads\/.*?\/.*?\/(240|360|480|720|1080)\.mp4:hls:manifest.m3u8/s);
|
|
29
30
|
if (!videoInfoHash || !videoInfoId || !videoInfoType)
|
|
30
31
|
return null;
|
|
31
32
|
const requestBody = {
|
|
@@ -44,9 +45,11 @@ class KodikParser {
|
|
|
44
45
|
const zCharCode = 'Z'.charCodeAt(0);
|
|
45
46
|
for (const [, sources] of Object.entries(directLinks.links)) {
|
|
46
47
|
for (const source of sources) {
|
|
48
|
+
if (validKodikUrl.test(source.src))
|
|
49
|
+
continue;
|
|
47
50
|
const decryptedBase64 = source.src.replace(/[a-zA-Z]/g, e => {
|
|
48
51
|
let eCharCode = e.charCodeAt(0);
|
|
49
|
-
return String.fromCharCode((eCharCode <= zCharCode ? 90 : 122) >= (eCharCode = eCharCode +
|
|
52
|
+
return String.fromCharCode((eCharCode <= zCharCode ? 90 : 122) >= (eCharCode = eCharCode + 18) ? eCharCode : eCharCode - 26);
|
|
50
53
|
});
|
|
51
54
|
source.src = atob(decryptedBase64);
|
|
52
55
|
}
|