@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 CHANGED
@@ -5,7 +5,7 @@
5
5
  [![npm version](https://img.shields.io/npm/v/@rawdash/connector-google-play-console)](https://www.npmjs.com/package/@rawdash/connector-google-play-console)
6
6
  [![license](https://img.shields.io/npm/l/@rawdash/connector-google-play-console)](https://github.com/rawdash/rawdash/blob/main/LICENSE)
7
7
 
8
- Sync daily Android app vitals from the Play Developer Reporting API - crash rate, ANR rate, ratings, and error counts.
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 Android Developer API" and the "Google Play Developer Reporting API" on the Cloud project.
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, ratings, error counts) have a 2-3 day reporting lag on the Play Developer Reporting API; incremental syncs refetch the trailing 3 days.
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 (UTC).";
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 (UTC).";
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 gplay_ratings_by_day: {
120
+ readonly gplay_error_count_by_day: {
137
121
  readonly shape: "metric";
138
- readonly description: "Daily average user rating and rating count from the Play Developer Reporting API.";
139
- readonly unit: "stars";
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}/ratingsMetricSet:query";
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 (UTC).";
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 ratings: z.ZodObject<{
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 gplay_error_count_by_day: {
152
+ readonly gplay_app_ratings: {
169
153
  readonly shape: "metric";
170
- readonly description: "Daily count of error reports (crashes + ANRs + handled errors) from the Play Developer Reporting API.";
171
- readonly unit: "reports";
172
- readonly granularity: "day";
173
- readonly endpoint: "POST /v1beta1/apps/{packageName}/errorCountMetricSet:query";
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 sample is reported against.";
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 errors: z.ZodObject<{
183
- rows: z.ZodOptional<z.ZodArray<z.ZodObject<{
184
- startTime: z.ZodObject<{
185
- year: z.ZodNumber;
186
- month: z.ZodNumber;
187
- day: z.ZodNumber;
188
- }, z.core.$strip>;
189
- metrics: z.ZodOptional<z.ZodArray<z.ZodObject<{
190
- metric: z.ZodString;
191
- decimalValue: z.ZodOptional<z.ZodObject<{
192
- value: z.ZodString;
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
- nextPageToken: z.ZodOptional<z.ZodString>;
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 (UTC).";
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 (UTC).";
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 gplay_ratings_by_day: {
282
+ readonly gplay_error_count_by_day: {
297
283
  readonly shape: "metric";
298
- readonly description: "Daily average user rating and rating count from the Play Developer Reporting API.";
299
- readonly unit: "stars";
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}/ratingsMetricSet:query";
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 (UTC).";
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 ratings: z.ZodObject<{
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 gplay_error_count_by_day: {
314
+ readonly gplay_app_ratings: {
329
315
  readonly shape: "metric";
330
- readonly description: "Daily count of error reports (crashes + ANRs + handled errors) from the Play Developer Reporting API.";
331
- readonly unit: "reports";
332
- readonly granularity: "day";
333
- readonly endpoint: "POST /v1beta1/apps/{packageName}/errorCountMetricSet:query";
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 sample is reported against.";
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 errors: z.ZodObject<{
343
- rows: z.ZodOptional<z.ZodArray<z.ZodObject<{
344
- startTime: z.ZodObject<{
345
- year: z.ZodNumber;
346
- month: z.ZodNumber;
347
- day: z.ZodNumber;
348
- }, z.core.$strip>;
349
- metrics: z.ZodOptional<z.ZodArray<z.ZodObject<{
350
- metric: z.ZodString;
351
- decimalValue: z.ZodOptional<z.ZodObject<{
352
- value: z.ZodString;
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
- nextPageToken: z.ZodOptional<z.ZodString>;
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 ratings: z.ZodObject<{
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 errors: z.ZodObject<{
424
- rows: z.ZodOptional<z.ZodArray<z.ZodObject<{
425
- startTime: z.ZodObject<{
426
- year: z.ZodNumber;
427
- month: z.ZodNumber;
428
- day: z.ZodNumber;
429
- }, z.core.$strip>;
430
- metrics: z.ZodOptional<z.ZodArray<z.ZodObject<{
431
- metric: z.ZodString;
432
- decimalValue: z.ZodOptional<z.ZodObject<{
433
- value: z.ZodString;
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
- nextPageToken: z.ZodOptional<z.ZodString>;
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
  }