UNPKG

gplayapi-ts

Version:
1 lines 6.94 kB
{"version":3,"sources":["../../../src/api/endpoints/auth.ts"],"sourcesContent":["/**\n * Authentication endpoint handlers\n */\n\nimport { doRequest } from \"../../utils/network\";\nimport { parseResponse, createAuthParams, setOAuthParams } from \"../../utils/parser\";\nimport { GPAuthenticationError, GPNilPayloadError } from \"../../errors\";\nimport { URL_CHECK_IN, URL_AUTH, URL_UPLOAD_DEVICE_CONFIG, URL_TOC, URL_TOS_ACCEPT, AUTH_SERVICE_URL, AUTH_APP } from \"../constants\";\nimport type { AuthData } from \"../../models/auth\";\nimport type { DeviceInfo } from \"../../models/device\";\nimport { \n type AndroidCheckinRequest, \n AndroidCheckinResponse, \n type UploadDeviceConfigResponse,\n type TocResponse,\n type Payload\n} from \"../../gen_proto/googleplay_pb\";\n\nexport class AuthEndpoint {\n constructor(\n private authData: AuthData,\n private deviceInfo: DeviceInfo,\n private getAuthHeaders: () => Record<string, string>,\n private doAuthedReq: (url: string, options?: RequestInit) => Promise<Payload | null>\n ) {}\n\n async generateGsfId(): Promise<string> {\n const req = this.deviceInfo.generateAndroidCheckInRequest();\n const checkInResp = await this.checkIn(req);\n const gsfId = checkInResp.androidId!.toString(16);\n this.authData.gsfId = gsfId;\n this.authData.deviceCheckInConsistencyToken = checkInResp.deviceCheckinConsistencyToken;\n return gsfId;\n }\n\n private async checkIn(req: AndroidCheckinRequest): Promise<AndroidCheckinResponse> {\n const headers = {\n ...this.getAuthHeaders(),\n \"Content-Type\": \"application/x-protobuffer\",\n Host: \"android.clients.google.com\",\n };\n\n const { data: responseData, status } = await doRequest(URL_CHECK_IN, {\n method: \"POST\",\n body: Buffer.from(req.toBinary()),\n headers,\n });\n\n if (status !== 200) {\n throw new GPAuthenticationError(`Check-in failed with status ${status}`);\n }\n\n return AndroidCheckinResponse.fromBinary(responseData);\n }\n\n async uploadDeviceConfig(): Promise<UploadDeviceConfigResponse> {\n const { UploadDeviceConfigRequest } = await import(\"../../gen_proto/googleplay_pb\");\n const data = new UploadDeviceConfigRequest({\n deviceConfiguration: this.deviceInfo.getDeviceConfigProto(),\n });\n\n const payload = await this.doAuthedReq(URL_UPLOAD_DEVICE_CONFIG, {\n method: \"POST\",\n body: Buffer.from(data.toBinary()),\n });\n\n if (!payload || !payload.uploadDeviceConfigResponse) {\n throw new GPNilPayloadError();\n }\n\n return payload.uploadDeviceConfigResponse;\n }\n\n async generateGPToken(): Promise<string> {\n const params = createAuthParams(\n this.authData.gsfId,\n this.deviceInfo.build.sdkVersion,\n this.authData.email,\n this.deviceInfo.build.googleServices\n );\n \n setOAuthParams(params, this.authData.aasToken);\n params.set(\"app\", AUTH_APP);\n params.set(\"service\", AUTH_SERVICE_URL);\n\n const sortedParams = new URLSearchParams([...params.entries()].sort((a, b) => a[0].localeCompare(b[0])));\n\n const headers = this.getAuthHeaders();\n\n const { data } = await doRequest(`${URL_AUTH}?${sortedParams.toString()}`, {\n method: \"POST\",\n headers,\n });\n\n const response = parseResponse(data.toString());\n const token = response.Auth;\n if (!token) {\n throw new GPAuthenticationError(\"Could not generate oauth token\");\n }\n\n return token;\n }\n\n async toc(): Promise<TocResponse> {\n const payload = await this.doAuthedReq(URL_TOC, { method: \"GET\" });\n const tocResp = payload?.tocResponse;\n\n if (tocResp?.tosContent && tocResp?.tosToken) {\n await this.acceptTos(tocResp.tosToken);\n }\n\n if (tocResp?.cookie) {\n this.authData.dfeCookie = tocResp.cookie;\n }\n\n if (!tocResp) {\n throw new GPNilPayloadError();\n }\n\n return tocResp;\n }\n\n private async acceptTos(tosToken: string): Promise<void> {\n await this.doAuthedReq(`${URL_TOS_ACCEPT}?toscme=false&tost=${tosToken}`, {\n method: \"POST\",\n });\n }\n\n async regenerateGPToken(): Promise<void> {\n this.authData.authToken = await this.generateGPToken();\n }\n}"],"mappings":"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","names":[]}