@efffrida/gplayapi 0.0.9 → 0.0.11
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/dist/GooglePlayApi.d.ts +28 -29
- package/dist/GooglePlayApi.d.ts.map +1 -1
- package/dist/GooglePlayApi.js +77 -74
- package/dist/GooglePlayApi.js.map +1 -1
- package/dist/internal/auth.js +7 -8
- package/dist/internal/auth.js.map +1 -1
- package/dist/internal/device.js +52 -30
- package/dist/internal/device.js.map +1 -1
- package/dist/internal/http.js +36 -31
- package/dist/internal/http.js.map +1 -1
- package/package.json +6 -15
- package/src/GooglePlayApi.ts +177 -115
- package/src/internal/auth.ts +31 -47
- package/src/internal/device.ts +78 -37
- package/src/internal/http.ts +39 -33
package/dist/GooglePlayApi.d.ts
CHANGED
|
@@ -4,69 +4,68 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @since 1.0.0
|
|
6
6
|
*/
|
|
7
|
-
import type * as PlatformError from "
|
|
8
|
-
import type * as
|
|
7
|
+
import type * as PlatformError from "effect/PlatformError";
|
|
8
|
+
import type * as Schema from "effect/Schema";
|
|
9
9
|
import type * as Scope from "effect/Scope";
|
|
10
|
-
import * as
|
|
11
|
-
import * as HttpClient from "@effect/platform/HttpClient";
|
|
10
|
+
import type * as HttpClientError from "effect/unstable/http/HttpClientError";
|
|
12
11
|
import * as Effect from "effect/Effect";
|
|
13
|
-
import * as
|
|
14
|
-
import
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
* @since 1.0.0
|
|
18
|
-
* @category Auth
|
|
19
|
-
*/
|
|
20
|
-
makeHttpClient, } from "./internal/auth.ts";
|
|
12
|
+
import * as FileSystem from "effect/FileSystem";
|
|
13
|
+
import * as HttpClient from "effect/unstable/http/HttpClient";
|
|
14
|
+
import type { AndroidDevice } from "./internal/device.ts";
|
|
15
|
+
import { type BulkDetailsResponse, type BuyResponse, type DeliveryResponse, type DetailsResponse } from "./generated/GooglePlay_pb.ts";
|
|
21
16
|
export {
|
|
22
17
|
/**
|
|
23
18
|
* @since 1.0.0
|
|
24
19
|
* @category Device
|
|
25
20
|
*/
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
* @since 1.0.0
|
|
29
|
-
* @category Auth
|
|
30
|
-
*/
|
|
31
|
-
export declare const defaultHttpClient: Layer.Layer<HttpClient.HttpClient, PlatformError.PlatformError | import("effect/ParseResult").ParseError | HttpClientError.HttpClientError, FileSystem.FileSystem>;
|
|
21
|
+
AndroidDevice, } from "./internal/device.ts";
|
|
32
22
|
/**
|
|
33
23
|
* @since 1.0.0
|
|
34
24
|
* @category API
|
|
35
25
|
*/
|
|
36
|
-
export declare const details: (bundleIdentifier: string) => Effect.Effect<DetailsResponse, HttpClientError.HttpClientError, HttpClient.HttpClient
|
|
26
|
+
export declare const details: ((device: AndroidDevice) => (bundleIdentifier: string) => Effect.Effect<DetailsResponse, HttpClientError.HttpClientError | Schema.SchemaError, HttpClient.HttpClient>) & ((bundleIdentifier: string, device: AndroidDevice) => Effect.Effect<DetailsResponse, HttpClientError.HttpClientError | Schema.SchemaError, HttpClient.HttpClient>);
|
|
37
27
|
/**
|
|
38
28
|
* @since 1.0.0
|
|
39
29
|
* @category API
|
|
40
30
|
*/
|
|
41
|
-
export declare const bulkDetails: (bundleIdentifier: string) => Effect.Effect<BulkDetailsResponse, HttpClientError.HttpClientError, HttpClient.HttpClient
|
|
31
|
+
export declare const bulkDetails: ((device: AndroidDevice) => (bundleIdentifier: string) => Effect.Effect<BulkDetailsResponse, HttpClientError.HttpClientError | Schema.SchemaError, HttpClient.HttpClient>) & ((bundleIdentifier: string, device: AndroidDevice) => Effect.Effect<BulkDetailsResponse, HttpClientError.HttpClientError | Schema.SchemaError, HttpClient.HttpClient>);
|
|
42
32
|
/**
|
|
43
33
|
* @since 1.0.0
|
|
44
34
|
* @category API
|
|
45
35
|
*/
|
|
46
|
-
export declare const purchase: (bundleIdentifier: string, options: {
|
|
36
|
+
export declare const purchase: ((device: AndroidDevice) => (bundleIdentifier: string, options: {
|
|
47
37
|
offerType: number;
|
|
48
38
|
versionCode: number | bigint;
|
|
49
|
-
certificateHash?: string
|
|
50
|
-
}) => Effect.Effect<BuyResponse, HttpClientError.HttpClientError, HttpClient.HttpClient
|
|
39
|
+
certificateHash?: string;
|
|
40
|
+
}) => Effect.Effect<BuyResponse, HttpClientError.HttpClientError | Schema.SchemaError, HttpClient.HttpClient>) & ((bundleIdentifier: string, options: {
|
|
41
|
+
offerType: number;
|
|
42
|
+
versionCode: number | bigint;
|
|
43
|
+
certificateHash?: string;
|
|
44
|
+
}, device: AndroidDevice) => Effect.Effect<BuyResponse, HttpClientError.HttpClientError | Schema.SchemaError, HttpClient.HttpClient>);
|
|
51
45
|
/**
|
|
52
46
|
* @since 1.0.0
|
|
53
47
|
* @category API
|
|
54
48
|
*/
|
|
55
|
-
export declare const delivery: (bundleIdentifier: string, options: {
|
|
49
|
+
export declare const delivery: ((device: AndroidDevice) => (bundleIdentifier: string, options: {
|
|
50
|
+
offerType: number;
|
|
51
|
+
deliveryToken: string;
|
|
52
|
+
versionCode: number | bigint;
|
|
53
|
+
certificateHash?: string | undefined;
|
|
54
|
+
}) => Effect.Effect<DeliveryResponse, HttpClientError.HttpClientError | Schema.SchemaError, HttpClient.HttpClient>) & ((bundleIdentifier: string, options: {
|
|
56
55
|
offerType: number;
|
|
57
56
|
deliveryToken: string;
|
|
58
57
|
versionCode: number | bigint;
|
|
59
58
|
certificateHash?: string | undefined;
|
|
60
|
-
}) => Effect.Effect<
|
|
59
|
+
}, device: AndroidDevice) => Effect.Effect<DeliveryResponse, HttpClientError.HttpClientError | Schema.SchemaError, HttpClient.HttpClient>);
|
|
61
60
|
/**
|
|
62
61
|
* @since 1.0.0
|
|
63
62
|
* @category API
|
|
64
63
|
*/
|
|
65
|
-
export declare const download: (bundleIdentifier: string) => Effect.Effect<readonly [{
|
|
64
|
+
export declare const download: (device: AndroidDevice, bundleIdentifier: string) => Effect.Effect<readonly [{
|
|
66
65
|
url: string;
|
|
67
66
|
name: string;
|
|
68
67
|
file: string;
|
|
69
|
-
size:
|
|
68
|
+
size: bigint;
|
|
70
69
|
integrity: {
|
|
71
70
|
sha1: string;
|
|
72
71
|
} | {
|
|
@@ -76,11 +75,11 @@ export declare const download: (bundleIdentifier: string) => Effect.Effect<reado
|
|
|
76
75
|
url: string;
|
|
77
76
|
name: string;
|
|
78
77
|
file: string;
|
|
79
|
-
size:
|
|
78
|
+
size: bigint;
|
|
80
79
|
integrity: {
|
|
81
80
|
sha1: string;
|
|
82
81
|
} | {
|
|
83
82
|
sha256: string;
|
|
84
83
|
};
|
|
85
|
-
}[]],
|
|
84
|
+
}[]], HttpClientError.HttpClientError | Schema.SchemaError | PlatformError.PlatformError, HttpClient.HttpClient | FileSystem.FileSystem | Scope.Scope>;
|
|
86
85
|
//# sourceMappingURL=GooglePlayApi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GooglePlayApi.d.ts","sourceRoot":"","sources":["../src/GooglePlayApi.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,aAAa,MAAM,
|
|
1
|
+
{"version":3,"file":"GooglePlayApi.d.ts","sourceRoot":"","sources":["../src/GooglePlayApi.ts"],"names":[],"mappings":"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"}
|
package/dist/GooglePlayApi.js
CHANGED
|
@@ -4,123 +4,132 @@
|
|
|
4
4
|
*
|
|
5
5
|
* @since 1.0.0
|
|
6
6
|
*/
|
|
7
|
-
import * as FetchHttpClient from "@effect/platform/FetchHttpClient";
|
|
8
|
-
import * as FileSystem from "@effect/platform/FileSystem";
|
|
9
|
-
import * as HttpClient from "@effect/platform/HttpClient";
|
|
10
|
-
import * as HttpClientRequest from "@effect/platform/HttpClientRequest";
|
|
11
|
-
import * as HttpClientResponse from "@effect/platform/HttpClientResponse";
|
|
12
7
|
import * as Array from "effect/Array";
|
|
13
8
|
import * as Effect from "effect/Effect";
|
|
9
|
+
import * as FileSystem from "effect/FileSystem";
|
|
14
10
|
import * as Function from "effect/Function";
|
|
15
|
-
import * as Layer from "effect/Layer";
|
|
16
|
-
import * as Sink from "effect/Sink";
|
|
17
11
|
import * as Stream from "effect/Stream";
|
|
18
|
-
import * as
|
|
12
|
+
import * as HttpClient from "effect/unstable/http/HttpClient";
|
|
13
|
+
import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest";
|
|
14
|
+
import * as HttpClientResponse from "effect/unstable/http/HttpClientResponse";
|
|
19
15
|
import { BulkDetailsRequestSchema } from "./generated/GooglePlay_pb.js";
|
|
20
|
-
import { makeHttpClient } from "./internal/auth.js";
|
|
21
|
-
import { Device } from "./internal/device.js";
|
|
22
16
|
import { decodeResponseFromResponseWrapper, encodeRequest } from "./internal/http.js";
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
* @since 1.0.0
|
|
26
|
-
* @category Auth
|
|
27
|
-
*/
|
|
28
|
-
makeHttpClient } from "./internal/auth.js";
|
|
17
|
+
/** @internal */
|
|
18
|
+
const fdfeBase = "https://android.clients.google.com/fdfe";
|
|
29
19
|
export {
|
|
30
20
|
/**
|
|
31
21
|
* @since 1.0.0
|
|
32
22
|
* @category Device
|
|
33
23
|
*/
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* @since 1.0.0
|
|
37
|
-
* @category Auth
|
|
38
|
-
*/
|
|
39
|
-
export const defaultHttpClient = /*#__PURE__*/Function.pipe(/*#__PURE__*/Device.fromPropertiesFile(/*#__PURE__*/url.fileURLToPath(/*#__PURE__*/new URL("../devices/arm64_xxhdpi.properties", import.meta.url))), /*#__PURE__*/Effect.map(makeHttpClient), Layer.unwrapEffect, /*#__PURE__*/Layer.provide(FetchHttpClient.layer));
|
|
24
|
+
AndroidDevice } from "./internal/device.js";
|
|
40
25
|
/**
|
|
41
26
|
* @since 1.0.0
|
|
42
27
|
* @category API
|
|
43
28
|
*/
|
|
44
|
-
export const details =
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
29
|
+
export const details = /*#__PURE__*/Function.dual(2, /*#__PURE__*/Effect.fnUntraced(function* (bundleIdentifier, device) {
|
|
30
|
+
const decoderDetailsResponse = decodeResponseFromResponseWrapper("detailsResponse");
|
|
31
|
+
const httpRequest = HttpClientRequest.get("/details", {
|
|
32
|
+
urlParams: {
|
|
33
|
+
doc: bundleIdentifier
|
|
34
|
+
},
|
|
35
|
+
headers: yield* device.authHeaders
|
|
36
|
+
}).pipe(HttpClientRequest.prependUrl(fdfeBase));
|
|
37
|
+
const httpResponse = yield* HttpClient.execute(httpRequest);
|
|
38
|
+
const pbResponse = yield* decoderDetailsResponse(httpResponse);
|
|
39
|
+
return pbResponse;
|
|
40
|
+
}));
|
|
49
41
|
/**
|
|
50
42
|
* @since 1.0.0
|
|
51
43
|
* @category API
|
|
52
44
|
*/
|
|
53
|
-
export const bulkDetails =
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
45
|
+
export const bulkDetails = /*#__PURE__*/Function.dual(2, /*#__PURE__*/Effect.fnUntraced(function* (bundleIdentifier, device) {
|
|
46
|
+
const decoderBulkDetailsResponse = decodeResponseFromResponseWrapper("bulkDetailsResponse");
|
|
47
|
+
const encoderBulkDetailsRequest = encodeRequest(BulkDetailsRequestSchema, {
|
|
48
|
+
includeDetails: true,
|
|
49
|
+
includeChildDocs: true,
|
|
50
|
+
DocId: [bundleIdentifier]
|
|
51
|
+
});
|
|
52
|
+
const httpRequest = HttpClientRequest.post("/bulkDetails", {
|
|
53
|
+
headers: yield* device.authHeaders
|
|
54
|
+
}).pipe(HttpClientRequest.prependUrl(fdfeBase));
|
|
55
|
+
const pbRequest = yield* encoderBulkDetailsRequest(httpRequest);
|
|
56
|
+
const httpResponse = yield* HttpClient.execute(pbRequest);
|
|
57
|
+
const pbResponse = yield* decoderBulkDetailsResponse(httpResponse);
|
|
58
|
+
return pbResponse;
|
|
59
|
+
}));
|
|
58
60
|
/**
|
|
59
61
|
* @since 1.0.0
|
|
60
62
|
* @category API
|
|
61
63
|
*/
|
|
62
|
-
export const purchase = (
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
export const purchase = /*#__PURE__*/Function.dual(3, /*#__PURE__*/Effect.fnUntraced(function* (bundleIdentifier, options, device) {
|
|
65
|
+
const decoderBuyResponse = decodeResponseFromResponseWrapper("buyResponse");
|
|
66
|
+
const httpRequest = HttpClientRequest.post("/purchase", {
|
|
67
|
+
headers: yield* device.authHeaders,
|
|
68
|
+
urlParams: {
|
|
69
|
+
doc: bundleIdentifier,
|
|
70
|
+
ch: options.certificateHash ?? "",
|
|
71
|
+
ot: options.offerType.toString(),
|
|
72
|
+
vc: options.versionCode.toString()
|
|
73
|
+
}
|
|
74
|
+
}).pipe(HttpClientRequest.prependUrl(fdfeBase));
|
|
75
|
+
const httpResponse = yield* HttpClient.execute(httpRequest);
|
|
76
|
+
const pbResponse = yield* decoderBuyResponse(httpResponse);
|
|
77
|
+
return pbResponse;
|
|
78
|
+
}));
|
|
70
79
|
/**
|
|
71
80
|
* @since 1.0.0
|
|
72
81
|
* @category API
|
|
73
82
|
*/
|
|
74
|
-
export const delivery = (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
+
export const delivery = /*#__PURE__*/Function.dual(3, /*#__PURE__*/Effect.fnUntraced(function* (bundleIdentifier, options, device) {
|
|
84
|
+
const decoderDeliveryResponse = decodeResponseFromResponseWrapper("deliveryResponse");
|
|
85
|
+
const httpRequest = HttpClientRequest.get("/delivery", {
|
|
86
|
+
headers: yield* device.authHeaders,
|
|
87
|
+
urlParams: {
|
|
88
|
+
doc: bundleIdentifier,
|
|
89
|
+
dtok: options.deliveryToken,
|
|
90
|
+
ch: options.certificateHash ?? "",
|
|
91
|
+
ot: options.offerType.toString(),
|
|
92
|
+
vc: options.versionCode.toString()
|
|
93
|
+
}
|
|
94
|
+
}).pipe(HttpClientRequest.prependUrl(fdfeBase));
|
|
95
|
+
const httpResponse = yield* HttpClient.execute(httpRequest);
|
|
96
|
+
const pbResponse = yield* decoderDeliveryResponse(httpResponse);
|
|
97
|
+
return pbResponse;
|
|
98
|
+
}));
|
|
83
99
|
/**
|
|
84
100
|
* @since 1.0.0
|
|
85
101
|
* @category API
|
|
86
102
|
*/
|
|
87
|
-
export const download = /*#__PURE__*/Effect.fnUntraced(function* (bundleIdentifier) {
|
|
103
|
+
export const download = /*#__PURE__*/Effect.fnUntraced(function* (device, bundleIdentifier) {
|
|
88
104
|
const fileSystem = yield* FileSystem.FileSystem;
|
|
89
105
|
const {
|
|
90
106
|
item
|
|
91
|
-
} = yield* details(bundleIdentifier);
|
|
107
|
+
} = yield* details(device)(bundleIdentifier);
|
|
92
108
|
const {
|
|
93
109
|
encodedDeliveryToken
|
|
94
|
-
} = yield* purchase(bundleIdentifier, {
|
|
110
|
+
} = yield* purchase(device)(bundleIdentifier, {
|
|
95
111
|
offerType: item?.offer[0].offerType ?? 1,
|
|
96
112
|
versionCode: item?.details?.appDetails?.versionCode ?? 0
|
|
97
113
|
});
|
|
98
|
-
const deliveryResult = yield* delivery(bundleIdentifier, {
|
|
114
|
+
const deliveryResult = yield* delivery(device)(bundleIdentifier, {
|
|
99
115
|
deliveryToken: encodedDeliveryToken,
|
|
100
116
|
offerType: item?.offer[0].offerType ?? 1,
|
|
101
117
|
versionCode: item?.details?.appDetails?.versionCode ?? 0
|
|
102
118
|
});
|
|
103
119
|
const mainDeliveryData = deliveryResult?.appDeliveryData;
|
|
104
120
|
if (mainDeliveryData === undefined) {
|
|
105
|
-
return yield* Effect.
|
|
121
|
+
return yield* Effect.die("No delivery data available");
|
|
106
122
|
}
|
|
107
|
-
const
|
|
108
|
-
const toHex = buffer => Array.fromIterable(new Uint8Array(buffer)).map(b => b.toString(16).padStart(2, "0")).join("");
|
|
109
|
-
const digestToHex = data => Effect.map(Effect.promise(() => crypto.subtle.digest(algorithm, data)), toHex);
|
|
110
|
-
return Sink.mapEffect(Sink.foldLeft(Buffer.alloc(0), (acc, chunk) => Buffer.concat([acc, chunk])), digestToHex);
|
|
111
|
-
};
|
|
123
|
+
const digest = algorithm => stream => stream.pipe(Stream.mkUint8Array, Effect.flatMap(buffer => Effect.promise(() => crypto.subtle.digest(algorithm, buffer))), Effect.map(digestBuffer => Array.fromIterable(new Uint8Array(digestBuffer)).map(b => b.toString(16).padStart(2, "0")).join("")));
|
|
112
124
|
const main = Effect.gen(function* () {
|
|
113
125
|
const file = yield* fileSystem.makeTempFileScoped({
|
|
114
126
|
suffix: ".apk"
|
|
115
127
|
});
|
|
116
128
|
const integrity = Buffer.from(mainDeliveryData.sha256, "base64url").toString("hex");
|
|
117
|
-
const
|
|
118
|
-
const downloadedIntegrity = yield* Stream.run(stream, Sink.zipRight(fileSystem.sink(file), digestSink("SHA-256"), {
|
|
119
|
-
concurrent: true
|
|
120
|
-
}));
|
|
129
|
+
const downloadedIntegrity = yield* HttpClient.get(mainDeliveryData.downloadUrl).pipe(HttpClientResponse.stream, Stream.tapSink(fileSystem.sink(file)), digest("SHA-256"));
|
|
121
130
|
yield* Effect.logDebug(`main APK of ${mainDeliveryData.downloadSize}bytes from ${mainDeliveryData.downloadUrl} with integrity ${integrity}(sha256) downloaded to ${file}`);
|
|
122
131
|
if (downloadedIntegrity !== integrity) {
|
|
123
|
-
return yield* Effect.
|
|
132
|
+
return yield* Effect.die(`Downloaded main APK integrity mismatch: expected ${integrity}, got ${downloadedIntegrity}`);
|
|
124
133
|
}
|
|
125
134
|
return {
|
|
126
135
|
file,
|
|
@@ -137,13 +146,10 @@ export const download = /*#__PURE__*/Effect.fnUntraced(function* (bundleIdentifi
|
|
|
137
146
|
suffix: ".apk"
|
|
138
147
|
});
|
|
139
148
|
const integrity = Buffer.from(split.sha256, "base64url").toString("hex");
|
|
140
|
-
const
|
|
141
|
-
const downloadedIntegrity = yield* Stream.run(stream, Sink.zipRight(fileSystem.sink(file), digestSink("SHA-256"), {
|
|
142
|
-
concurrent: true
|
|
143
|
-
}));
|
|
149
|
+
const downloadedIntegrity = yield* HttpClient.get(split.downloadUrl).pipe(HttpClientResponse.stream, Stream.tapSink(fileSystem.sink(file)), digest("SHA-256"));
|
|
144
150
|
yield* Effect.logDebug(`split ${split.name} of ${split.downloadSize}bytes from ${split.downloadUrl} with integrity ${integrity}(sha256) downloaded to ${file}`);
|
|
145
151
|
if (downloadedIntegrity !== integrity) {
|
|
146
|
-
return yield* Effect.
|
|
152
|
+
return yield* Effect.die(`Downloaded split ${split.name} integrity mismatch: expected ${integrity}, got ${downloadedIntegrity}`);
|
|
147
153
|
}
|
|
148
154
|
return {
|
|
149
155
|
file,
|
|
@@ -162,13 +168,10 @@ export const download = /*#__PURE__*/Effect.fnUntraced(function* (bundleIdentifi
|
|
|
162
168
|
suffix: ".obb"
|
|
163
169
|
});
|
|
164
170
|
const integrity = Buffer.from(expansion.sha1, "base64url").toString("hex");
|
|
165
|
-
const
|
|
166
|
-
const downloadedIntegrity = yield* Stream.run(stream, Sink.zipRight(fileSystem.sink(file), digestSink("SHA-1"), {
|
|
167
|
-
concurrent: true
|
|
168
|
-
}));
|
|
171
|
+
const downloadedIntegrity = yield* HttpClient.get(expansion.downloadUrl).pipe(HttpClientResponse.stream, Stream.tapSink(fileSystem.sink(file)), digest("SHA-1"));
|
|
169
172
|
yield* Effect.logDebug(`expansion file ${name} of ${expansion.size}bytes from ${expansion.downloadUrl} with integrity ${integrity}(sha1) downloaded to ${file}`);
|
|
170
173
|
if (downloadedIntegrity !== integrity) {
|
|
171
|
-
return yield* Effect.
|
|
174
|
+
return yield* Effect.die(`Downloaded expansion file ${name} integrity mismatch: expected ${integrity}, got ${downloadedIntegrity}`);
|
|
172
175
|
}
|
|
173
176
|
return {
|
|
174
177
|
file,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GooglePlayApi.js","names":["
|
|
1
|
+
{"version":3,"file":"GooglePlayApi.js","names":["Array","Effect","FileSystem","Function","Stream","HttpClient","HttpClientRequest","HttpClientResponse","BulkDetailsRequestSchema","decodeResponseFromResponseWrapper","encodeRequest","fdfeBase","AndroidDevice","details","dual","fnUntraced","bundleIdentifier","device","decoderDetailsResponse","httpRequest","get","urlParams","doc","headers","authHeaders","pipe","prependUrl","httpResponse","execute","pbResponse","bulkDetails","decoderBulkDetailsResponse","encoderBulkDetailsRequest","includeDetails","includeChildDocs","DocId","post","pbRequest","purchase","options","decoderBuyResponse","ch","certificateHash","ot","offerType","toString","vc","versionCode","delivery","decoderDeliveryResponse","dtok","deliveryToken","download","fileSystem","item","encodedDeliveryToken","offer","appDetails","deliveryResult","mainDeliveryData","appDeliveryData","undefined","die","digest","algorithm","stream","mkUint8Array","flatMap","buffer","promise","crypto","subtle","map","digestBuffer","fromIterable","Uint8Array","b","padStart","join","main","gen","file","makeTempFileScoped","suffix","integrity","Buffer","from","sha256","downloadedIntegrity","downloadUrl","tapSink","sink","logDebug","downloadSize","name","url","size","splits","splitDeliveryData","split","expansions","additionalFile","expansion","typeStr","fileType","sha1","all"],"sources":["../src/GooglePlayApi.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/internal/auth.js
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import * as HttpClient from "@effect/platform/HttpClient";
|
|
2
|
-
import * as HttpClientRequest from "@effect/platform/HttpClientRequest";
|
|
3
|
-
import * as HttpClientResponse from "@effect/platform/HttpClientResponse";
|
|
4
1
|
import * as Effect from "effect/Effect";
|
|
5
2
|
import * as Function from "effect/Function";
|
|
6
|
-
import * as Layer from "effect/Layer";
|
|
7
3
|
import * as Schema from "effect/Schema";
|
|
4
|
+
import * as HttpClient from "effect/unstable/http/HttpClient";
|
|
5
|
+
import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest";
|
|
6
|
+
import * as HttpClientResponse from "effect/unstable/http/HttpClientResponse";
|
|
8
7
|
import { AndroidCheckinRequestSchema, AndroidCheckinResponseSchema, UploadDeviceConfigRequestSchema } from "../generated/GooglePlay_pb.js";
|
|
9
8
|
import { decodeResponse, decodeResponseFromResponseWrapper, encodeRequest } from "./http.js";
|
|
10
9
|
/** @internal */
|
|
11
|
-
export const
|
|
10
|
+
export const authHeaders = /*#__PURE__*/Effect.fn(function* (device) {
|
|
12
11
|
// curl \
|
|
13
12
|
// --request GET \
|
|
14
13
|
// --header "Accept: application/json" \
|
|
@@ -144,7 +143,7 @@ export const makeHttpClient = /*#__PURE__*/Effect.fnUntraced(function* (device)
|
|
|
144
143
|
// Effect.flatMap(HttpClientResponse.filterStatusOk),
|
|
145
144
|
// Effect.flatMap((response) => response.text)
|
|
146
145
|
// );
|
|
147
|
-
return
|
|
146
|
+
return {
|
|
148
147
|
Authorization: "Bearer " + account.auth,
|
|
149
148
|
"User-Agent": device.userAgent,
|
|
150
149
|
"X-DFE-Device-Id": checkinResponse.androidId.toString(16),
|
|
@@ -160,6 +159,6 @@ export const makeHttpClient = /*#__PURE__*/Effect.fnUntraced(function* (device)
|
|
|
160
159
|
"X-DFE-Request-Params": "timeoutMs=4000",
|
|
161
160
|
"X-DFE-Device-Checkin-Consistency-Token": checkinResponse.deviceCheckinConsistencyToken,
|
|
162
161
|
"X-DFE-Device-Config-Token": uploadDeviceConfigResponse.uploadDeviceConfigToken
|
|
163
|
-
}
|
|
164
|
-
}
|
|
162
|
+
};
|
|
163
|
+
});
|
|
165
164
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","names":["
|
|
1
|
+
{"version":3,"file":"auth.js","names":["Effect","Function","Schema","HttpClient","HttpClientRequest","HttpClientResponse","AndroidCheckinRequestSchema","AndroidCheckinResponseSchema","UploadDeviceConfigRequestSchema","decodeResponse","decodeResponseFromResponseWrapper","encodeRequest","authHeaders","fn","device","account","pipe","get","setHeader","acceptJson","execute","flatMap","filterStatusOk","schemaBodyJson","Struct","email","String","auth","checkinResponse","post","setHeaders","userAgent","app","Host","id","version","fragment","locale","timeZone","TimeZone","checkin","userNumber","lastCheckinMsec","roaming","Roaming","cellOperator","CellOperator","simOperator","SimOperator","build","product","carrier","radio","bootloader","sdkVersion","model","manufacturer","buildProduct","client","timestamp","BigInt","Date","now","googleServices","deviceConfiguration","touchScreen","keyboard","navigation","screenLayout","hasHardKeyboard","hasFiveWayNavigation","glEsVersion","glExtension","systemSharedLibrary","systemAvailableFeature","nativePlatform","screenDensity","screenWidth","screenHeight","systemSupportedLocale","deviceClass","deviceFeature","map","val","name","value","uploadDeviceConfigResponse","deviceCheckinConsistencyToken","androidId","toString","Number","Boolean","Authorization","uploadDeviceConfigToken"],"sources":["../../src/internal/auth.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/dist/internal/device.js
CHANGED
|
@@ -1,9 +1,29 @@
|
|
|
1
|
-
import * as FileSystem from "@effect/platform/FileSystem";
|
|
2
1
|
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as FileSystem from "effect/FileSystem";
|
|
3
|
+
import * as Path from "effect/Path";
|
|
3
4
|
import * as Schema from "effect/Schema";
|
|
4
|
-
import * as
|
|
5
|
+
import * as SchemaGetter from "effect/SchemaGetter";
|
|
6
|
+
import * as SchemaTransformation from "effect/SchemaTransformation";
|
|
7
|
+
import * as internalAuth from "./auth.js";
|
|
5
8
|
/** @internal */
|
|
6
|
-
export
|
|
9
|
+
export const StringArrayFromString = /*#__PURE__*/Schema.suspend(() => {
|
|
10
|
+
const splitter = SchemaGetter.split({
|
|
11
|
+
separator: ","
|
|
12
|
+
});
|
|
13
|
+
const joiner = SchemaGetter.transform(arr => arr.join(","));
|
|
14
|
+
const transform = SchemaTransformation.make({
|
|
15
|
+
encode: joiner,
|
|
16
|
+
decode: splitter
|
|
17
|
+
});
|
|
18
|
+
return Schema.String.pipe(Schema.decodeTo(Schema.Array(Schema.String), transform));
|
|
19
|
+
});
|
|
20
|
+
/** @internal */
|
|
21
|
+
export const BooleanFromString = /*#__PURE__*/Schema.Literals(["true", "false"]).pipe(/*#__PURE__*/Schema.decodeTo(Schema.Boolean, /*#__PURE__*/SchemaTransformation.transform({
|
|
22
|
+
decode: str => str === "true",
|
|
23
|
+
encode: bool => bool ? "true" : "false"
|
|
24
|
+
})));
|
|
25
|
+
/** @internal */
|
|
26
|
+
export class AndroidDevice extends /*#__PURE__*/Schema.Class("AndroidDevice")({
|
|
7
27
|
UserReadableName: Schema.String,
|
|
8
28
|
"Build.BOOTLOADER": Schema.String,
|
|
9
29
|
"Build.BRAND": Schema.String,
|
|
@@ -19,37 +39,22 @@ export class Device extends /*#__PURE__*/Schema.Class("Device")({
|
|
|
19
39
|
"Build.VERSION.SDK_INT": Schema.NumberFromString,
|
|
20
40
|
CellOperator: Schema.String,
|
|
21
41
|
Client: Schema.String,
|
|
22
|
-
Features:
|
|
23
|
-
|
|
24
|
-
decode: str => str.split(",")
|
|
25
|
-
}),
|
|
26
|
-
"GL.Extensions": /*#__PURE__*/Schema.transform(Schema.String, /*#__PURE__*/Schema.Array(Schema.String), {
|
|
27
|
-
encode: extensions => extensions.join(","),
|
|
28
|
-
decode: str => str.split(",")
|
|
29
|
-
}),
|
|
42
|
+
Features: StringArrayFromString,
|
|
43
|
+
"GL.Extensions": StringArrayFromString,
|
|
30
44
|
"GL.Version": Schema.NumberFromString,
|
|
31
45
|
"GSF.version": Schema.NumberFromString,
|
|
32
|
-
HasFiveWayNavigation:
|
|
33
|
-
HasHardKeyboard:
|
|
46
|
+
HasFiveWayNavigation: BooleanFromString,
|
|
47
|
+
HasHardKeyboard: BooleanFromString,
|
|
34
48
|
Keyboard: Schema.NumberFromString,
|
|
35
|
-
Locales:
|
|
36
|
-
encode: locales => locales.join(","),
|
|
37
|
-
decode: str => str.split(",")
|
|
38
|
-
}),
|
|
49
|
+
Locales: StringArrayFromString,
|
|
39
50
|
Navigation: Schema.NumberFromString,
|
|
40
|
-
Platforms:
|
|
41
|
-
encode: libs => libs.join(","),
|
|
42
|
-
decode: str => str.split(",")
|
|
43
|
-
}),
|
|
51
|
+
Platforms: StringArrayFromString,
|
|
44
52
|
Roaming: Schema.String,
|
|
45
53
|
"Screen.Density": Schema.NumberFromString,
|
|
46
54
|
"Screen.Height": Schema.NumberFromString,
|
|
47
55
|
"Screen.Width": Schema.NumberFromString,
|
|
48
56
|
ScreenLayout: Schema.NumberFromString,
|
|
49
|
-
SharedLibraries:
|
|
50
|
-
encode: libs => libs.join(","),
|
|
51
|
-
decode: str => str.split(",")
|
|
52
|
-
}),
|
|
57
|
+
SharedLibraries: StringArrayFromString,
|
|
53
58
|
SimCountry: /*#__PURE__*/Schema.String.pipe(Schema.optional),
|
|
54
59
|
SimOperator: /*#__PURE__*/Schema.String.pipe(Schema.optional),
|
|
55
60
|
TimeZone: Schema.String,
|
|
@@ -57,13 +62,19 @@ export class Device extends /*#__PURE__*/Schema.Class("Device")({
|
|
|
57
62
|
"Vending.version": Schema.NumberFromString,
|
|
58
63
|
"Vending.versionString": Schema.String
|
|
59
64
|
}) {
|
|
60
|
-
|
|
65
|
+
authHeadersCache = undefined;
|
|
66
|
+
static fromPropertiesFile = /*#__PURE__*/Effect.fnUntraced(function* (file) {
|
|
67
|
+
const decodeDevice = Schema.decodeUnknownEffect(AndroidDevice);
|
|
68
|
+
const decodePropertiesFile = Schema.decodeEffect(Schema.String.pipe(Schema.decodeTo(Schema.Record(Schema.String, Schema.String), SchemaTransformation.splitKeyValue({
|
|
69
|
+
keyValueSeparator: "=",
|
|
70
|
+
separator: "\n"
|
|
71
|
+
}))));
|
|
61
72
|
const fileSystem = yield* FileSystem.FileSystem;
|
|
62
|
-
const content = yield* fileSystem.readFileString(
|
|
63
|
-
const properties =
|
|
64
|
-
|
|
65
|
-
return device;
|
|
73
|
+
const content = yield* fileSystem.readFileString(file);
|
|
74
|
+
const properties = yield* decodePropertiesFile(content);
|
|
75
|
+
return yield* decodeDevice(properties);
|
|
66
76
|
});
|
|
77
|
+
static EmbeddedPixel7a = /*#__PURE__*/Path.Path.pipe(/*#__PURE__*/Effect.flatMap(path => path.fromFileUrl(new URL("../../devices/arm64_xxhdpi.properties", import.meta.url))), /*#__PURE__*/Effect.flatMap(AndroidDevice.fromPropertiesFile));
|
|
67
78
|
get userAgent() {
|
|
68
79
|
const deviceProperties = {
|
|
69
80
|
api: 3,
|
|
@@ -81,5 +92,16 @@ export class Device extends /*#__PURE__*/Schema.Class("Device")({
|
|
|
81
92
|
const devicePropertiesString = Object.entries(deviceProperties).map(([k, v]) => `${k}=${v}`).join(",");
|
|
82
93
|
return `Android-Finsky/${this["Vending.versionString"]} (${devicePropertiesString})`;
|
|
83
94
|
}
|
|
95
|
+
authHeaders = /*#__PURE__*/Effect.gen({
|
|
96
|
+
self: this
|
|
97
|
+
}, function* () {
|
|
98
|
+
if (this.authHeadersCache) {
|
|
99
|
+
return this.authHeadersCache;
|
|
100
|
+
} else {
|
|
101
|
+
const authHeaders = yield* internalAuth.authHeaders(this);
|
|
102
|
+
this.authHeadersCache = authHeaders;
|
|
103
|
+
return this.authHeadersCache;
|
|
104
|
+
}
|
|
105
|
+
});
|
|
84
106
|
}
|
|
85
107
|
//# sourceMappingURL=device.js.map
|