@rawdash/connector-google-play-console 0.24.0 → 0.26.0
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/README.md +18 -18
- package/dist/index.d.ts +126 -121
- package/dist/index.js +213 -93
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
[](https://www.npmjs.com/package/@rawdash/connector-google-play-console)
|
|
6
6
|
[](https://github.com/rawdash/rawdash/blob/main/LICENSE)
|
|
7
7
|
|
|
8
|
-
Sync daily Android app vitals from the Play Developer Reporting API
|
|
8
|
+
Sync daily Android app vitals from the Play Developer Reporting API (crash rate, ANR rate, error counts) plus user review ratings from the Android Publisher API.
|
|
9
9
|
|
|
10
10
|
## Install
|
|
11
11
|
|
|
@@ -18,26 +18,24 @@ npm install @rawdash/connector-google-play-console
|
|
|
18
18
|
Authenticate against the Play Developer Reporting API and the Android Publisher API with a Google service account JSON key. The service account must be linked to your Play Console developer account.
|
|
19
19
|
|
|
20
20
|
1. In Google Cloud, create a service account at IAM & Admin -> Service Accounts and download a JSON key.
|
|
21
|
-
2. Enable both the "Google Play
|
|
21
|
+
2. Enable both the "Google Play Developer Reporting API" and the "Google Play Android Developer API" on the Cloud project.
|
|
22
22
|
3. In Google Play Console open Setup -> API access, link the same Cloud project, then invite the service account email and grant it at least the "View app information and download bulk reports" permission for the app you want to sync.
|
|
23
23
|
4. Store the service account JSON as a secret and reference it as serviceAccountJson: secret("GPLAY_SA_JSON").
|
|
24
24
|
5. Set packageName to the reverse-DNS application id of the app (e.g. com.example.app).
|
|
25
25
|
|
|
26
26
|
## Configuration
|
|
27
27
|
|
|
28
|
-
| Field | Type | Required | Description
|
|
29
|
-
| -------------------- | ------ | -------- |
|
|
30
|
-
| `packageName` | string | Yes | Reverse-DNS application id of the Android app (e.g. com.example.app). Visible in the Play Console URL and on Google Play under "About".
|
|
31
|
-
| `serviceAccountJson` | secret | Yes | Contents of the JSON key file for a Google service account that has been granted access to your Play Console developer account with at least the "View app information and download bulk reports" permission. Create one at Google Cloud -> IAM & Admin -> Service Accounts.
|
|
32
|
-
| `lookbackDays` | number | No | How many calendar days to fetch on a full sync. Defaults to 30. The Play Developer Reporting API exposes daily metrics with a typical 2-3 day reporting lag.
|
|
28
|
+
| Field | Type | Required | Description |
|
|
29
|
+
| -------------------- | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
30
|
+
| `packageName` | string | Yes | Reverse-DNS application id of the Android app (e.g. com.example.app). Visible in the Play Console URL and on Google Play under "About". |
|
|
31
|
+
| `serviceAccountJson` | secret | Yes | Contents of the JSON key file for a Google service account that has been granted access to your Play Console developer account with at least the "View app information and download bulk reports" permission. Create one at Google Cloud -> IAM & Admin -> Service Accounts. |
|
|
32
|
+
| `lookbackDays` | number | No | How many calendar days to fetch on a full sync. Defaults to 30. The Play Developer Reporting API exposes daily metrics with a typical 2-3 day reporting lag. |
|
|
33
|
+
| `reviewLimit` | number | No | How many of the most-recent user reviews to emit as gplay_app_ratings samples. Defaults to 200. Reviews are fetched then ranked newest-first before this cap is applied. The Android Publisher reviews API only surfaces reviews from roughly the past week, so this is a rolling sample, not a full history. |
|
|
33
34
|
|
|
34
35
|
## Resources
|
|
35
36
|
|
|
36
|
-
- **`apps`** _(entity)_ - Android app the connector is syncing. One entity per configured packageName.
|
|
37
|
-
- Endpoint: `GET /androidpublisher/v3/applications/{packageName}/listings`
|
|
37
|
+
- **`apps`** _(entity)_ - Android app the connector is syncing. One entity per configured packageName, derived from the connector config; the Play Store listing title is only reachable through an Android Publisher edit and is not fetched.
|
|
38
38
|
- `package_name`: Reverse-DNS application id (e.g. com.example.app).
|
|
39
|
-
- `title`: Play Store listing title in the default language. Empty if the listing has not been fetched yet.
|
|
40
|
-
- `default_language`: Default language code (BCP-47) configured for the Play Store listings.
|
|
41
39
|
- **`gplay_crash_rate_by_day`** _(metric)_ - Daily crash rate reported by the Play Developer Reporting API. Primary value is the crashRate metric (fraction of distinct users that experienced a crash).
|
|
42
40
|
- Endpoint: `POST /v1beta1/apps/{packageName}/crashRateMetricSet:query`
|
|
43
41
|
- Unit: crashRate
|
|
@@ -48,16 +46,16 @@ Authenticate against the Play Developer Reporting API and the Android Publisher
|
|
|
48
46
|
- Unit: anrRate
|
|
49
47
|
- Granularity: day
|
|
50
48
|
- Dimensions: `date`, `package_name`
|
|
51
|
-
- **`gplay_ratings_by_day`** _(metric)_ - Daily average user rating and rating count from the Play Developer Reporting API.
|
|
52
|
-
- Endpoint: `POST /v1beta1/apps/{packageName}/ratingsMetricSet:query`
|
|
53
|
-
- Unit: stars
|
|
54
|
-
- Granularity: day
|
|
55
|
-
- Dimensions: `date`, `package_name`
|
|
56
49
|
- **`gplay_error_count_by_day`** _(metric)_ - Daily count of error reports (crashes + ANRs + handled errors) from the Play Developer Reporting API.
|
|
57
50
|
- Endpoint: `POST /v1beta1/apps/{packageName}/errorCountMetricSet:query`
|
|
58
51
|
- Unit: reports
|
|
59
52
|
- Granularity: day
|
|
60
53
|
- Dimensions: `date`, `package_name`
|
|
54
|
+
- **`gplay_app_ratings`** _(metric)_ - Rolling per-review star ratings sampled from the most-recent user reviews via the Android Publisher reviews API (default 200, configurable via reviewLimit). Each sample carries one review with its star rating (1-5) as the value.
|
|
55
|
+
- Endpoint: `GET /androidpublisher/v3/applications/{packageName}/reviews`
|
|
56
|
+
- Unit: stars
|
|
57
|
+
- Dimensions: `package_name`, `review_id`, `reviewer_language`, `device`, `app_version_name`, `android_os_version`
|
|
58
|
+
- Not the lifetime average shown on the Play Store. The reviews API only returns reviews from roughly the past week, so this is a rolling sample; average over a time window downstream for a smoothed rating.
|
|
61
59
|
|
|
62
60
|
## Example
|
|
63
61
|
|
|
@@ -107,12 +105,14 @@ The Play Developer Reporting API enforces a per-project quota (default 60 reques
|
|
|
107
105
|
|
|
108
106
|
## Limitations
|
|
109
107
|
|
|
110
|
-
- Daily vitals (crash rate, ANR rate,
|
|
108
|
+
- Daily vitals (crash rate, ANR rate, error counts) have a 2-3 day reporting lag on the Play Developer Reporting API; incremental syncs refetch the trailing 3 days. Metric days are reported on the America/Los_Angeles calendar, the only timezone the API supports for daily aggregation.
|
|
109
|
+
- gplay_app_ratings is a rolling sample of recent reviews from the Android Publisher reviews API (default 200, configurable via reviewLimit). Each sample carries one review with its star rating (1-5) as the value; this is not the lifetime average shown on the Play Store, and the reviews API only surfaces reviews from roughly the past week.
|
|
110
|
+
- The apps entity carries only the configured package name; the Play Store listing title is available solely through an Android Publisher edit, which this connector does not create.
|
|
111
111
|
- Install counts and earnings are not exposed through the Reporting API - Google delivers them only as monthly CSV reports in a private Cloud Storage bucket. Those metrics are out of scope for this connector and will land in a follow-up.
|
|
112
112
|
|
|
113
113
|
## Links
|
|
114
114
|
|
|
115
|
-
- [Rawdash docs](https://rawdash.dev/docs/connectors
|
|
115
|
+
- [Rawdash docs](https://rawdash.dev/docs/connectors)
|
|
116
116
|
- [Google Play Console API docs](https://developers.google.com/play/developer/reporting)
|
|
117
117
|
- [GitHub](https://github.com/rawdash/rawdash)
|
|
118
118
|
|
package/dist/index.d.ts
CHANGED
|
@@ -7,11 +7,13 @@ declare const configFields: z.ZodObject<{
|
|
|
7
7
|
$secret: z.ZodString;
|
|
8
8
|
}, z.core.$strip>;
|
|
9
9
|
lookbackDays: z.ZodOptional<z.ZodNumber>;
|
|
10
|
+
reviewLimit: z.ZodOptional<z.ZodNumber>;
|
|
10
11
|
}, z.core.$strip>;
|
|
11
12
|
declare const doc: ConnectorDoc;
|
|
12
13
|
interface GooglePlayConsoleSettings {
|
|
13
14
|
packageName: string;
|
|
14
15
|
lookbackDays?: number;
|
|
16
|
+
reviewLimit?: number;
|
|
15
17
|
}
|
|
16
18
|
declare const gplayCredentials: {
|
|
17
19
|
serviceAccountJson: {
|
|
@@ -45,29 +47,11 @@ declare const googlePlayConsoleResources: {
|
|
|
45
47
|
readonly apps: {
|
|
46
48
|
readonly shape: "entity";
|
|
47
49
|
readonly filterable: [];
|
|
48
|
-
readonly description: "Android app the connector is syncing. One entity per configured packageName.";
|
|
49
|
-
readonly endpoint: "GET /androidpublisher/v3/applications/{packageName}/listings";
|
|
50
|
+
readonly description: "Android app the connector is syncing. One entity per configured packageName, derived from the connector config; the Play Store listing title is only reachable through an Android Publisher edit and is not fetched.";
|
|
50
51
|
readonly fields: [{
|
|
51
52
|
readonly name: "package_name";
|
|
52
53
|
readonly description: "Reverse-DNS application id (e.g. com.example.app).";
|
|
53
|
-
}, {
|
|
54
|
-
readonly name: "title";
|
|
55
|
-
readonly description: "Play Store listing title in the default language. Empty if the listing has not been fetched yet.";
|
|
56
|
-
}, {
|
|
57
|
-
readonly name: "default_language";
|
|
58
|
-
readonly description: "Default language code (BCP-47) configured for the Play Store listings.";
|
|
59
54
|
}];
|
|
60
|
-
readonly responses: {
|
|
61
|
-
readonly listings: z.ZodObject<{
|
|
62
|
-
defaultLanguage: z.ZodOptional<z.ZodString>;
|
|
63
|
-
listings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
64
|
-
language: z.ZodString;
|
|
65
|
-
title: z.ZodOptional<z.ZodString>;
|
|
66
|
-
shortDescription: z.ZodOptional<z.ZodString>;
|
|
67
|
-
fullDescription: z.ZodOptional<z.ZodString>;
|
|
68
|
-
}, z.core.$strip>>>;
|
|
69
|
-
}, z.core.$strip>;
|
|
70
|
-
};
|
|
71
55
|
};
|
|
72
56
|
readonly gplay_crash_rate_by_day: {
|
|
73
57
|
readonly shape: "metric";
|
|
@@ -77,7 +61,7 @@ declare const googlePlayConsoleResources: {
|
|
|
77
61
|
readonly endpoint: "POST /v1beta1/apps/{packageName}/crashRateMetricSet:query";
|
|
78
62
|
readonly dimensions: [{
|
|
79
63
|
readonly name: "date";
|
|
80
|
-
readonly description: "Calendar day of the metric sample (
|
|
64
|
+
readonly description: "Calendar day of the metric sample (America/Los_Angeles, the only timezone the Reporting API supports for daily aggregation).";
|
|
81
65
|
}, {
|
|
82
66
|
readonly name: "package_name";
|
|
83
67
|
readonly description: "Reverse-DNS application id this sample is reported against.";
|
|
@@ -109,7 +93,7 @@ declare const googlePlayConsoleResources: {
|
|
|
109
93
|
readonly endpoint: "POST /v1beta1/apps/{packageName}/anrRateMetricSet:query";
|
|
110
94
|
readonly dimensions: [{
|
|
111
95
|
readonly name: "date";
|
|
112
|
-
readonly description: "Calendar day of the metric sample (
|
|
96
|
+
readonly description: "Calendar day of the metric sample (America/Los_Angeles, the only timezone the Reporting API supports for daily aggregation).";
|
|
113
97
|
}, {
|
|
114
98
|
readonly name: "package_name";
|
|
115
99
|
readonly description: "Reverse-DNS application id this sample is reported against.";
|
|
@@ -133,21 +117,21 @@ declare const googlePlayConsoleResources: {
|
|
|
133
117
|
}, z.core.$strip>;
|
|
134
118
|
};
|
|
135
119
|
};
|
|
136
|
-
readonly
|
|
120
|
+
readonly gplay_error_count_by_day: {
|
|
137
121
|
readonly shape: "metric";
|
|
138
|
-
readonly description: "Daily
|
|
139
|
-
readonly unit: "
|
|
122
|
+
readonly description: "Daily count of error reports (crashes + ANRs + handled errors) from the Play Developer Reporting API.";
|
|
123
|
+
readonly unit: "reports";
|
|
140
124
|
readonly granularity: "day";
|
|
141
|
-
readonly endpoint: "POST /v1beta1/apps/{packageName}/
|
|
125
|
+
readonly endpoint: "POST /v1beta1/apps/{packageName}/errorCountMetricSet:query";
|
|
142
126
|
readonly dimensions: [{
|
|
143
127
|
readonly name: "date";
|
|
144
|
-
readonly description: "Calendar day of the metric sample (
|
|
128
|
+
readonly description: "Calendar day of the metric sample (America/Los_Angeles, the only timezone the Reporting API supports for daily aggregation).";
|
|
145
129
|
}, {
|
|
146
130
|
readonly name: "package_name";
|
|
147
131
|
readonly description: "Reverse-DNS application id this sample is reported against.";
|
|
148
132
|
}];
|
|
149
133
|
readonly responses: {
|
|
150
|
-
readonly
|
|
134
|
+
readonly errors: z.ZodObject<{
|
|
151
135
|
rows: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
152
136
|
startTime: z.ZodObject<{
|
|
153
137
|
year: z.ZodNumber;
|
|
@@ -165,35 +149,55 @@ declare const googlePlayConsoleResources: {
|
|
|
165
149
|
}, z.core.$strip>;
|
|
166
150
|
};
|
|
167
151
|
};
|
|
168
|
-
readonly
|
|
152
|
+
readonly gplay_app_ratings: {
|
|
169
153
|
readonly shape: "metric";
|
|
170
|
-
readonly description: "
|
|
171
|
-
readonly unit: "
|
|
172
|
-
readonly
|
|
173
|
-
readonly
|
|
154
|
+
readonly description: "Rolling per-review star ratings sampled from the most-recent user reviews via the Android Publisher reviews API (default 200, configurable via reviewLimit). Each sample carries one review with its star rating (1-5) as the value.";
|
|
155
|
+
readonly unit: "stars";
|
|
156
|
+
readonly endpoint: "GET /androidpublisher/v3/applications/{packageName}/reviews";
|
|
157
|
+
readonly notes: "Not the lifetime average shown on the Play Store. The reviews API only returns reviews from roughly the past week, so this is a rolling sample; average over a time window downstream for a smoothed rating.";
|
|
174
158
|
readonly dimensions: [{
|
|
175
|
-
readonly name: "date";
|
|
176
|
-
readonly description: "Calendar day of the metric sample (UTC).";
|
|
177
|
-
}, {
|
|
178
159
|
readonly name: "package_name";
|
|
179
|
-
readonly description: "Reverse-DNS application id this
|
|
160
|
+
readonly description: "Reverse-DNS application id this review was filed against.";
|
|
161
|
+
}, {
|
|
162
|
+
readonly name: "review_id";
|
|
163
|
+
readonly description: "Unique identifier of the review.";
|
|
164
|
+
}, {
|
|
165
|
+
readonly name: "reviewer_language";
|
|
166
|
+
readonly description: "BCP-47 language code the review was written in.";
|
|
167
|
+
}, {
|
|
168
|
+
readonly name: "device";
|
|
169
|
+
readonly description: "Codename of the device the review was filed from.";
|
|
170
|
+
}, {
|
|
171
|
+
readonly name: "app_version_name";
|
|
172
|
+
readonly description: "App version name the reviewer was running.";
|
|
173
|
+
}, {
|
|
174
|
+
readonly name: "android_os_version";
|
|
175
|
+
readonly description: "Android SDK version the reviewer was running.";
|
|
180
176
|
}];
|
|
181
177
|
readonly responses: {
|
|
182
|
-
readonly
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
178
|
+
readonly reviews: z.ZodObject<{
|
|
179
|
+
reviews: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
180
|
+
reviewId: z.ZodOptional<z.ZodString>;
|
|
181
|
+
authorName: z.ZodOptional<z.ZodString>;
|
|
182
|
+
comments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
183
|
+
userComment: z.ZodOptional<z.ZodObject<{
|
|
184
|
+
text: z.ZodOptional<z.ZodString>;
|
|
185
|
+
lastModified: z.ZodOptional<z.ZodObject<{
|
|
186
|
+
seconds: z.ZodOptional<z.ZodString>;
|
|
187
|
+
nanos: z.ZodOptional<z.ZodNumber>;
|
|
188
|
+
}, z.core.$strip>>;
|
|
189
|
+
starRating: z.ZodOptional<z.ZodNumber>;
|
|
190
|
+
reviewerLanguage: z.ZodOptional<z.ZodString>;
|
|
191
|
+
device: z.ZodOptional<z.ZodString>;
|
|
192
|
+
androidOsVersion: z.ZodOptional<z.ZodNumber>;
|
|
193
|
+
appVersionCode: z.ZodOptional<z.ZodNumber>;
|
|
194
|
+
appVersionName: z.ZodOptional<z.ZodString>;
|
|
193
195
|
}, z.core.$strip>>;
|
|
194
196
|
}, z.core.$strip>>>;
|
|
195
197
|
}, z.core.$strip>>>;
|
|
196
|
-
|
|
198
|
+
tokenPagination: z.ZodOptional<z.ZodObject<{
|
|
199
|
+
nextPageToken: z.ZodOptional<z.ZodString>;
|
|
200
|
+
}, z.core.$strip>>;
|
|
197
201
|
}, z.core.$strip>;
|
|
198
202
|
};
|
|
199
203
|
};
|
|
@@ -205,29 +209,11 @@ declare class GooglePlayConsoleConnector extends BaseConnector<GooglePlayConsole
|
|
|
205
209
|
readonly apps: {
|
|
206
210
|
readonly shape: "entity";
|
|
207
211
|
readonly filterable: [];
|
|
208
|
-
readonly description: "Android app the connector is syncing. One entity per configured packageName.";
|
|
209
|
-
readonly endpoint: "GET /androidpublisher/v3/applications/{packageName}/listings";
|
|
212
|
+
readonly description: "Android app the connector is syncing. One entity per configured packageName, derived from the connector config; the Play Store listing title is only reachable through an Android Publisher edit and is not fetched.";
|
|
210
213
|
readonly fields: [{
|
|
211
214
|
readonly name: "package_name";
|
|
212
215
|
readonly description: "Reverse-DNS application id (e.g. com.example.app).";
|
|
213
|
-
}, {
|
|
214
|
-
readonly name: "title";
|
|
215
|
-
readonly description: "Play Store listing title in the default language. Empty if the listing has not been fetched yet.";
|
|
216
|
-
}, {
|
|
217
|
-
readonly name: "default_language";
|
|
218
|
-
readonly description: "Default language code (BCP-47) configured for the Play Store listings.";
|
|
219
216
|
}];
|
|
220
|
-
readonly responses: {
|
|
221
|
-
readonly listings: z.ZodObject<{
|
|
222
|
-
defaultLanguage: z.ZodOptional<z.ZodString>;
|
|
223
|
-
listings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
224
|
-
language: z.ZodString;
|
|
225
|
-
title: z.ZodOptional<z.ZodString>;
|
|
226
|
-
shortDescription: z.ZodOptional<z.ZodString>;
|
|
227
|
-
fullDescription: z.ZodOptional<z.ZodString>;
|
|
228
|
-
}, z.core.$strip>>>;
|
|
229
|
-
}, z.core.$strip>;
|
|
230
|
-
};
|
|
231
217
|
};
|
|
232
218
|
readonly gplay_crash_rate_by_day: {
|
|
233
219
|
readonly shape: "metric";
|
|
@@ -237,7 +223,7 @@ declare class GooglePlayConsoleConnector extends BaseConnector<GooglePlayConsole
|
|
|
237
223
|
readonly endpoint: "POST /v1beta1/apps/{packageName}/crashRateMetricSet:query";
|
|
238
224
|
readonly dimensions: [{
|
|
239
225
|
readonly name: "date";
|
|
240
|
-
readonly description: "Calendar day of the metric sample (
|
|
226
|
+
readonly description: "Calendar day of the metric sample (America/Los_Angeles, the only timezone the Reporting API supports for daily aggregation).";
|
|
241
227
|
}, {
|
|
242
228
|
readonly name: "package_name";
|
|
243
229
|
readonly description: "Reverse-DNS application id this sample is reported against.";
|
|
@@ -269,7 +255,7 @@ declare class GooglePlayConsoleConnector extends BaseConnector<GooglePlayConsole
|
|
|
269
255
|
readonly endpoint: "POST /v1beta1/apps/{packageName}/anrRateMetricSet:query";
|
|
270
256
|
readonly dimensions: [{
|
|
271
257
|
readonly name: "date";
|
|
272
|
-
readonly description: "Calendar day of the metric sample (
|
|
258
|
+
readonly description: "Calendar day of the metric sample (America/Los_Angeles, the only timezone the Reporting API supports for daily aggregation).";
|
|
273
259
|
}, {
|
|
274
260
|
readonly name: "package_name";
|
|
275
261
|
readonly description: "Reverse-DNS application id this sample is reported against.";
|
|
@@ -293,21 +279,21 @@ declare class GooglePlayConsoleConnector extends BaseConnector<GooglePlayConsole
|
|
|
293
279
|
}, z.core.$strip>;
|
|
294
280
|
};
|
|
295
281
|
};
|
|
296
|
-
readonly
|
|
282
|
+
readonly gplay_error_count_by_day: {
|
|
297
283
|
readonly shape: "metric";
|
|
298
|
-
readonly description: "Daily
|
|
299
|
-
readonly unit: "
|
|
284
|
+
readonly description: "Daily count of error reports (crashes + ANRs + handled errors) from the Play Developer Reporting API.";
|
|
285
|
+
readonly unit: "reports";
|
|
300
286
|
readonly granularity: "day";
|
|
301
|
-
readonly endpoint: "POST /v1beta1/apps/{packageName}/
|
|
287
|
+
readonly endpoint: "POST /v1beta1/apps/{packageName}/errorCountMetricSet:query";
|
|
302
288
|
readonly dimensions: [{
|
|
303
289
|
readonly name: "date";
|
|
304
|
-
readonly description: "Calendar day of the metric sample (
|
|
290
|
+
readonly description: "Calendar day of the metric sample (America/Los_Angeles, the only timezone the Reporting API supports for daily aggregation).";
|
|
305
291
|
}, {
|
|
306
292
|
readonly name: "package_name";
|
|
307
293
|
readonly description: "Reverse-DNS application id this sample is reported against.";
|
|
308
294
|
}];
|
|
309
295
|
readonly responses: {
|
|
310
|
-
readonly
|
|
296
|
+
readonly errors: z.ZodObject<{
|
|
311
297
|
rows: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
312
298
|
startTime: z.ZodObject<{
|
|
313
299
|
year: z.ZodNumber;
|
|
@@ -325,50 +311,60 @@ declare class GooglePlayConsoleConnector extends BaseConnector<GooglePlayConsole
|
|
|
325
311
|
}, z.core.$strip>;
|
|
326
312
|
};
|
|
327
313
|
};
|
|
328
|
-
readonly
|
|
314
|
+
readonly gplay_app_ratings: {
|
|
329
315
|
readonly shape: "metric";
|
|
330
|
-
readonly description: "
|
|
331
|
-
readonly unit: "
|
|
332
|
-
readonly
|
|
333
|
-
readonly
|
|
316
|
+
readonly description: "Rolling per-review star ratings sampled from the most-recent user reviews via the Android Publisher reviews API (default 200, configurable via reviewLimit). Each sample carries one review with its star rating (1-5) as the value.";
|
|
317
|
+
readonly unit: "stars";
|
|
318
|
+
readonly endpoint: "GET /androidpublisher/v3/applications/{packageName}/reviews";
|
|
319
|
+
readonly notes: "Not the lifetime average shown on the Play Store. The reviews API only returns reviews from roughly the past week, so this is a rolling sample; average over a time window downstream for a smoothed rating.";
|
|
334
320
|
readonly dimensions: [{
|
|
335
|
-
readonly name: "date";
|
|
336
|
-
readonly description: "Calendar day of the metric sample (UTC).";
|
|
337
|
-
}, {
|
|
338
321
|
readonly name: "package_name";
|
|
339
|
-
readonly description: "Reverse-DNS application id this
|
|
322
|
+
readonly description: "Reverse-DNS application id this review was filed against.";
|
|
323
|
+
}, {
|
|
324
|
+
readonly name: "review_id";
|
|
325
|
+
readonly description: "Unique identifier of the review.";
|
|
326
|
+
}, {
|
|
327
|
+
readonly name: "reviewer_language";
|
|
328
|
+
readonly description: "BCP-47 language code the review was written in.";
|
|
329
|
+
}, {
|
|
330
|
+
readonly name: "device";
|
|
331
|
+
readonly description: "Codename of the device the review was filed from.";
|
|
332
|
+
}, {
|
|
333
|
+
readonly name: "app_version_name";
|
|
334
|
+
readonly description: "App version name the reviewer was running.";
|
|
335
|
+
}, {
|
|
336
|
+
readonly name: "android_os_version";
|
|
337
|
+
readonly description: "Android SDK version the reviewer was running.";
|
|
340
338
|
}];
|
|
341
339
|
readonly responses: {
|
|
342
|
-
readonly
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
340
|
+
readonly reviews: z.ZodObject<{
|
|
341
|
+
reviews: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
342
|
+
reviewId: z.ZodOptional<z.ZodString>;
|
|
343
|
+
authorName: z.ZodOptional<z.ZodString>;
|
|
344
|
+
comments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
345
|
+
userComment: z.ZodOptional<z.ZodObject<{
|
|
346
|
+
text: z.ZodOptional<z.ZodString>;
|
|
347
|
+
lastModified: z.ZodOptional<z.ZodObject<{
|
|
348
|
+
seconds: z.ZodOptional<z.ZodString>;
|
|
349
|
+
nanos: z.ZodOptional<z.ZodNumber>;
|
|
350
|
+
}, z.core.$strip>>;
|
|
351
|
+
starRating: z.ZodOptional<z.ZodNumber>;
|
|
352
|
+
reviewerLanguage: z.ZodOptional<z.ZodString>;
|
|
353
|
+
device: z.ZodOptional<z.ZodString>;
|
|
354
|
+
androidOsVersion: z.ZodOptional<z.ZodNumber>;
|
|
355
|
+
appVersionCode: z.ZodOptional<z.ZodNumber>;
|
|
356
|
+
appVersionName: z.ZodOptional<z.ZodString>;
|
|
353
357
|
}, z.core.$strip>>;
|
|
354
358
|
}, z.core.$strip>>>;
|
|
355
359
|
}, z.core.$strip>>>;
|
|
356
|
-
|
|
360
|
+
tokenPagination: z.ZodOptional<z.ZodObject<{
|
|
361
|
+
nextPageToken: z.ZodOptional<z.ZodString>;
|
|
362
|
+
}, z.core.$strip>>;
|
|
357
363
|
}, z.core.$strip>;
|
|
358
364
|
};
|
|
359
365
|
};
|
|
360
366
|
};
|
|
361
|
-
static readonly schemas: {
|
|
362
|
-
readonly listings: z.ZodObject<{
|
|
363
|
-
defaultLanguage: z.ZodOptional<z.ZodString>;
|
|
364
|
-
listings: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
365
|
-
language: z.ZodString;
|
|
366
|
-
title: z.ZodOptional<z.ZodString>;
|
|
367
|
-
shortDescription: z.ZodOptional<z.ZodString>;
|
|
368
|
-
fullDescription: z.ZodOptional<z.ZodString>;
|
|
369
|
-
}, z.core.$strip>>>;
|
|
370
|
-
}, z.core.$strip>;
|
|
371
|
-
} & {
|
|
367
|
+
static readonly schemas: object & {
|
|
372
368
|
readonly crash_rate: z.ZodObject<{
|
|
373
369
|
rows: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
374
370
|
startTime: z.ZodObject<{
|
|
@@ -403,7 +399,7 @@ declare class GooglePlayConsoleConnector extends BaseConnector<GooglePlayConsole
|
|
|
403
399
|
nextPageToken: z.ZodOptional<z.ZodString>;
|
|
404
400
|
}, z.core.$strip>;
|
|
405
401
|
} & {
|
|
406
|
-
readonly
|
|
402
|
+
readonly errors: z.ZodObject<{
|
|
407
403
|
rows: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
408
404
|
startTime: z.ZodObject<{
|
|
409
405
|
year: z.ZodNumber;
|
|
@@ -420,21 +416,29 @@ declare class GooglePlayConsoleConnector extends BaseConnector<GooglePlayConsole
|
|
|
420
416
|
nextPageToken: z.ZodOptional<z.ZodString>;
|
|
421
417
|
}, z.core.$strip>;
|
|
422
418
|
} & {
|
|
423
|
-
readonly
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
419
|
+
readonly reviews: z.ZodObject<{
|
|
420
|
+
reviews: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
421
|
+
reviewId: z.ZodOptional<z.ZodString>;
|
|
422
|
+
authorName: z.ZodOptional<z.ZodString>;
|
|
423
|
+
comments: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
424
|
+
userComment: z.ZodOptional<z.ZodObject<{
|
|
425
|
+
text: z.ZodOptional<z.ZodString>;
|
|
426
|
+
lastModified: z.ZodOptional<z.ZodObject<{
|
|
427
|
+
seconds: z.ZodOptional<z.ZodString>;
|
|
428
|
+
nanos: z.ZodOptional<z.ZodNumber>;
|
|
429
|
+
}, z.core.$strip>>;
|
|
430
|
+
starRating: z.ZodOptional<z.ZodNumber>;
|
|
431
|
+
reviewerLanguage: z.ZodOptional<z.ZodString>;
|
|
432
|
+
device: z.ZodOptional<z.ZodString>;
|
|
433
|
+
androidOsVersion: z.ZodOptional<z.ZodNumber>;
|
|
434
|
+
appVersionCode: z.ZodOptional<z.ZodNumber>;
|
|
435
|
+
appVersionName: z.ZodOptional<z.ZodString>;
|
|
434
436
|
}, z.core.$strip>>;
|
|
435
437
|
}, z.core.$strip>>>;
|
|
436
438
|
}, z.core.$strip>>>;
|
|
437
|
-
|
|
439
|
+
tokenPagination: z.ZodOptional<z.ZodObject<{
|
|
440
|
+
nextPageToken: z.ZodOptional<z.ZodString>;
|
|
441
|
+
}, z.core.$strip>>;
|
|
438
442
|
}, z.core.$strip>;
|
|
439
443
|
} & Readonly<Record<string, z.ZodType<unknown, unknown, z.core.$ZodTypeInternals<unknown, unknown>>>>;
|
|
440
444
|
static create(input: unknown, ctx?: ConnectorContext): GooglePlayConsoleConnector;
|
|
@@ -448,9 +452,10 @@ declare class GooglePlayConsoleConnector extends BaseConnector<GooglePlayConsole
|
|
|
448
452
|
private cachedToken;
|
|
449
453
|
private fetchOAuthToken;
|
|
450
454
|
private getAccessToken;
|
|
451
|
-
private fetchListings;
|
|
452
455
|
private runMetricQuery;
|
|
453
456
|
private syncApps;
|
|
457
|
+
private fetchReviews;
|
|
458
|
+
private syncReviews;
|
|
454
459
|
private drainMetricPhase;
|
|
455
460
|
sync(options: SyncOptions, storage: StorageHandle, signal?: AbortSignal): Promise<SyncResult>;
|
|
456
461
|
}
|