chore(core)!: dropped pre-v3 string sessions
This commit is contained in:
parent
b13d23326a
commit
cc4cf35611
2 changed files with 11 additions and 172 deletions
|
@ -5,28 +5,6 @@ import { defaultProductionDc } from '../../utils/dcs.js'
|
|||
import { readStringSession, writeStringSession } from './string-session.js'
|
||||
|
||||
const stubAuthKey = new Uint8Array(32)
|
||||
const stubDcs = {
|
||||
main: {
|
||||
...defaultProductionDc.main,
|
||||
ipv6: false,
|
||||
mediaOnly: false,
|
||||
},
|
||||
media: {
|
||||
...defaultProductionDc.media,
|
||||
ipv6: false,
|
||||
mediaOnly: true,
|
||||
},
|
||||
}
|
||||
const stubDcsTest = {
|
||||
main: {
|
||||
...stubDcs.main,
|
||||
testMode: true,
|
||||
},
|
||||
media: {
|
||||
...stubDcs.media,
|
||||
testMode: true,
|
||||
},
|
||||
}
|
||||
const stubDcsBasic = {
|
||||
main: {
|
||||
id: 2,
|
||||
|
@ -55,10 +33,6 @@ const stubDcsBasicTest = {
|
|||
testMode: true,
|
||||
},
|
||||
}
|
||||
const stubDcsSameMedia = {
|
||||
main: stubDcs.main,
|
||||
media: stubDcs.main,
|
||||
}
|
||||
const stubDcsBasicSameMedia = {
|
||||
main: stubDcsBasic.main,
|
||||
media: stubDcsBasic.main,
|
||||
|
@ -189,89 +163,4 @@ describe('readStringSession', () => {
|
|||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('v2', () => {
|
||||
it('should read production string session without user', () => {
|
||||
expect(
|
||||
readStringSession(
|
||||
'AgQAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
|
||||
),
|
||||
).toEqual({
|
||||
version: 2,
|
||||
primaryDcs: stubDcs,
|
||||
authKey: stubAuthKey,
|
||||
self: null,
|
||||
})
|
||||
})
|
||||
|
||||
it('should read production string session without user with same dc for media', () => {
|
||||
expect(
|
||||
readStringSession(
|
||||
'AgAAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
|
||||
),
|
||||
).toEqual({
|
||||
version: 2,
|
||||
primaryDcs: stubDcsSameMedia,
|
||||
authKey: stubAuthKey,
|
||||
self: null,
|
||||
})
|
||||
})
|
||||
|
||||
it('should read production string session with user', () => {
|
||||
expect(
|
||||
readStringSession(
|
||||
'AgUAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAOTAAAAAAAAA3l3m8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
|
||||
),
|
||||
).toEqual({
|
||||
version: 2,
|
||||
primaryDcs: stubDcs,
|
||||
authKey: stubAuthKey,
|
||||
self: {
|
||||
userId: 12345,
|
||||
isBot: false,
|
||||
isPremium: false,
|
||||
usernames: [],
|
||||
},
|
||||
})
|
||||
})
|
||||
|
||||
it('should read test dc string session with user', () => {
|
||||
expect(
|
||||
readStringSession(
|
||||
'AgcAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAAA2htxgCAAAAAgAAAA8xNDkuMTU0LjE2Ny4yMjK7AQAAOTAAAAAAAAA3l3m8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
|
||||
),
|
||||
).toEqual({
|
||||
version: 2,
|
||||
primaryDcs: stubDcsTest,
|
||||
authKey: stubAuthKey,
|
||||
self: {
|
||||
userId: 12345,
|
||||
isBot: false,
|
||||
isPremium: false,
|
||||
usernames: [],
|
||||
},
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe('v1', () => {
|
||||
it('should read string session with user', () => {
|
||||
expect(
|
||||
readStringSession(
|
||||
'AQEAAAANobcYAAAAAAIAAAAOMTQ5LjE1NC4xNjcuNTAAuwEAADkwAAAAAAAAN5d5vCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
|
||||
),
|
||||
).toEqual({
|
||||
version: 1,
|
||||
// v1 didn't have separate media dc
|
||||
primaryDcs: stubDcsSameMedia,
|
||||
authKey: stubAuthKey,
|
||||
self: {
|
||||
userId: 12345,
|
||||
isBot: false,
|
||||
isPremium: false,
|
||||
usernames: [],
|
||||
},
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import type { BasicDcOption, DcOptions } from '../../utils/dcs.js'
|
||||
import type { DcOptions } from '../../utils/dcs.js'
|
||||
import type { CurrentUserInfo } from '../storage/service/current-user.js'
|
||||
|
||||
import { base64 } from '@fuman/utils'
|
||||
|
@ -20,31 +20,6 @@ export interface StringSessionData {
|
|||
authKey: Uint8Array
|
||||
}
|
||||
|
||||
function readTlDcOption(reader: TlBinaryReader): BasicDcOption {
|
||||
const ctorId = reader.uint()
|
||||
|
||||
if (ctorId !== 414687501) {
|
||||
throw new MtArgumentError(`Invalid dcOption constructor id: ${ctorId}`)
|
||||
}
|
||||
|
||||
const flags = reader.uint()
|
||||
const id = reader.int()
|
||||
const ipAddress = reader.string()
|
||||
const port = reader.int()
|
||||
|
||||
if (flags & 1024) {
|
||||
reader.bytes() // skip secret
|
||||
}
|
||||
|
||||
return {
|
||||
id,
|
||||
ipAddress,
|
||||
port,
|
||||
ipv6: Boolean(flags & 1),
|
||||
mediaOnly: Boolean(flags & 2),
|
||||
}
|
||||
}
|
||||
|
||||
export function writeStringSession(data: StringSessionData): string {
|
||||
const writer = TlBinaryWriter.manual(512)
|
||||
|
||||
|
@ -63,14 +38,14 @@ export function writeStringSession(data: StringSessionData): string {
|
|||
writer.uint8View[0] = version
|
||||
writer.pos += 1
|
||||
|
||||
if (version >= 2 && data.primaryDcs.media !== data.primaryDcs.main) {
|
||||
if (data.primaryDcs.media !== data.primaryDcs.main) {
|
||||
flags |= 4
|
||||
}
|
||||
|
||||
writer.int(flags)
|
||||
writer.bytes(serializeBasicDcOption(data.primaryDcs.main))
|
||||
|
||||
if (version >= 2 && data.primaryDcs.media !== data.primaryDcs.main) {
|
||||
if (data.primaryDcs.media !== data.primaryDcs.main) {
|
||||
writer.bytes(serializeBasicDcOption(data.primaryDcs.media))
|
||||
}
|
||||
|
||||
|
@ -98,19 +73,10 @@ export function readStringSession(data: string | InputStringSessionData): String
|
|||
|
||||
const version = buf[0]
|
||||
|
||||
if (version !== 1 && version !== 2 && version !== 3) {
|
||||
if (version !== 3) {
|
||||
throw new Error(`Invalid session string (version = ${version})`)
|
||||
}
|
||||
|
||||
if (version < 3) {
|
||||
console.warn(
|
||||
`You are using a deprecated session string (${data.slice(
|
||||
0,
|
||||
10,
|
||||
)}...). Please update your session string, as it will stop working in the future.`,
|
||||
)
|
||||
}
|
||||
|
||||
const reader = TlBinaryReader.manual(buf, 1)
|
||||
|
||||
const flags = reader.int()
|
||||
|
@ -118,34 +84,18 @@ export function readStringSession(data: string | InputStringSessionData): String
|
|||
const testModeOld = Boolean(flags & 2)
|
||||
const hasMedia = version >= 2 && Boolean(flags & 4)
|
||||
|
||||
let primaryDc: BasicDcOption
|
||||
let primaryMediaDc: BasicDcOption
|
||||
const primaryDc = parseBasicDcOption(reader.bytes())
|
||||
|
||||
if (version <= 2) {
|
||||
const primaryDc_ = readTlDcOption(reader)
|
||||
const primaryMediaDc_ = hasMedia ? readTlDcOption(reader) : primaryDc_
|
||||
|
||||
primaryDc = primaryDc_
|
||||
primaryMediaDc = primaryMediaDc_
|
||||
} else if (version === 3) {
|
||||
const primaryDc_ = parseBasicDcOption(reader.bytes())
|
||||
|
||||
if (primaryDc_ === null) {
|
||||
if (primaryDc === null) {
|
||||
throw new MtArgumentError('Invalid session string (failed to parse primaryDc)')
|
||||
}
|
||||
|
||||
const primaryMediaDc_ = hasMedia ? parseBasicDcOption(reader.bytes()) : primaryDc_
|
||||
const primaryMediaDc = hasMedia ? parseBasicDcOption(reader.bytes()) : primaryDc
|
||||
|
||||
if (primaryMediaDc_ === null) {
|
||||
if (primaryMediaDc === null) {
|
||||
throw new MtArgumentError('Invalid session string (failed to parse primaryMediaDc)')
|
||||
}
|
||||
|
||||
primaryDc = primaryDc_
|
||||
primaryMediaDc = primaryMediaDc_
|
||||
} else {
|
||||
throw new Error('unreachable')
|
||||
}
|
||||
|
||||
if (testModeOld) {
|
||||
primaryDc.testMode = true
|
||||
primaryMediaDc.testMode = true
|
||||
|
|
Loading…
Reference in a new issue