Skip to content

Commit 9f5f031

Browse files
authored
MangaPlus | Add session-token support to prevent ban errors (#83)
1 parent 5ac9812 commit 9f5f031

2 files changed

Lines changed: 22 additions & 5 deletions

File tree

src/MangaPlus/MangaPlus.ts

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const API_URL = 'https://jumpg-webapi.tokyo-cdn.com/api'
3737
const langCode = Language.ENGLISH
3838

3939
export const MangaPlusInfo: SourceInfo = {
40-
version: '2.0.3',
40+
version: '2.0.4',
4141
name: 'MangaPlus',
4242
icon: 'icon.png',
4343
author: 'Rinto-kun',
@@ -50,19 +50,35 @@ export const MangaPlusInfo: SourceInfo = {
5050
}
5151

5252
export class MangaPlus implements SearchResultsProviding, MangaProviding, ChapterProviding, HomePageSectionsProviding {
53-
5453
stateManager = App.createSourceStateManager()
5554

55+
private cachedSessionToken: string | null = null
56+
57+
private async getSessionToken(): Promise<string> {
58+
if (this.cachedSessionToken) return this.cachedSessionToken
59+
60+
const storedToken = (await this.stateManager.retrieve('sessionToken')) as string || null
61+
if (storedToken) {
62+
this.cachedSessionToken = storedToken
63+
return storedToken
64+
}
65+
66+
const sessionToken = crypto.randomUUID()
67+
await this.stateManager.store('sessionToken', sessionToken)
68+
this.cachedSessionToken = sessionToken
69+
return sessionToken
70+
}
71+
5672
requestManager = App.createRequestManager({
5773
requestsPerSecond: 10,
5874
requestTimeout: 20000,
5975
interceptor: {
6076
interceptRequest: async (request: Request): Promise<Request> => {
6177
request.headers = {
6278
...(request.headers ?? {}),
63-
79+
'Origin': BASE_URL,
6480
'Referer': `${BASE_URL}/`,
65-
'user-agent': await this.requestManager.getDefaultUserAgent()
81+
'session-token': await this.getSessionToken()
6682
}
6783

6884
if (request.url.startsWith('imageMangaId=')) {

src/MangaPlus/MangaPlusSettings.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,8 @@ export function resetSettings(stateManager: SourceStateManager): DUIButton {
130130
onTap: async () => {
131131
await stateManager.store('languages', [Language.ENGLISH]),
132132
await stateManager.store('split_images', 'yes'),
133-
await stateManager.store('image_resolution', 'high')
133+
await stateManager.store('image_resolution', 'high'),
134+
await stateManager.store('sessionToken', '')
134135
}
135136
})
136137
}

0 commit comments

Comments
 (0)