@gscdump/contracts 0.26.10 → 0.27.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/dist/index.mjs CHANGED
@@ -1,1512 +1,3 @@
1
- import { z } from "zod";
2
- const GSCDUMP_ONBOARDING_CONTRACT_VERSION = "2026-05-11";
3
- const GSCDUMP_REQUIRED_ANALYTICS_SCOPE = "https://www.googleapis.com/auth/webmasters.readonly";
4
- const GSCDUMP_WRITE_ANALYTICS_SCOPE = "https://www.googleapis.com/auth/webmasters";
5
- const GSCDUMP_OPTIONAL_INDEXING_SCOPE = "https://www.googleapis.com/auth/indexing";
6
- const accountStatuses = [
7
- "disconnected",
8
- "oauth_received",
9
- "scope_missing",
10
- "refresh_missing",
11
- "db_provisioning",
12
- "ready",
13
- "reauth_required"
14
- ];
15
- const accountNextActions = [
16
- "connect_google",
17
- "reconnect_google",
18
- "wait_for_provisioning",
19
- "none"
20
- ];
21
- const propertyStatuses = [
22
- "no_local_site",
23
- "no_gsc_property",
24
- "unverified_property",
25
- "verified_candidate",
26
- "registered",
27
- "linked"
28
- ];
29
- const propertyNextActions = [
30
- "create_site",
31
- "verify_gsc_property",
32
- "choose_property",
33
- "register_site",
34
- "none"
35
- ];
36
- const analyticsStatuses = [
37
- "not_registered",
38
- "queued",
39
- "preparing",
40
- "syncing",
41
- "queryable_live",
42
- "queryable_partial",
43
- "ready",
44
- "failed"
45
- ];
46
- const analyticsNextActions = [
47
- "wait_for_sync",
48
- "retry_sync",
49
- "none"
50
- ];
51
- const querySourceModes = [
52
- "none",
53
- "live",
54
- "d1",
55
- "r2",
56
- "mixed"
57
- ];
58
- const sitemapStatuses = [
59
- "unknown",
60
- "discovering",
61
- "none_found",
62
- "auto_submitted",
63
- "syncing",
64
- "ready",
65
- "failed"
66
- ];
67
- const sitemapNextActions = [
68
- "submit_sitemap",
69
- "wait_for_sitemaps",
70
- "retry_sitemaps",
71
- "none"
72
- ];
73
- const indexingStatuses = [
74
- "not_requested",
75
- "missing_scope",
76
- "insufficient_permission",
77
- "waiting_for_sitemaps",
78
- "discovering",
79
- "checking",
80
- "ready",
81
- "budget_exhausted",
82
- "no_urls",
83
- "failed"
84
- ];
85
- const indexingNextActions = [
86
- "reconnect_google",
87
- "fix_gsc_permission",
88
- "wait_for_sitemaps",
89
- "wait_for_indexing",
90
- "retry_indexing",
91
- "none"
92
- ];
93
- const lifecycleWebhookEvents = [
94
- "user.lifecycle.changed",
95
- "site.lifecycle.changed",
96
- "site.analytics.ready",
97
- "site.indexing.ready",
98
- "site.auth.failed",
99
- "job.failed"
100
- ];
101
- const lifecycleErrorCodes = [
102
- "missing_refresh_token",
103
- "missing_analytics_scope",
104
- "missing_indexing_scope",
105
- "token_refresh_failed",
106
- "permission_lost",
107
- "insufficient_gsc_permission",
108
- "gsc_property_not_found",
109
- "gsc_property_unverified",
110
- "user_database_not_provisioned",
111
- "sync_failed",
112
- "sitemap_sync_failed",
113
- "indexing_failed"
114
- ];
115
- function parseGrantedScopes(scopes) {
116
- return (scopes ?? "").split(/\s+/).map((s) => s.trim()).filter(Boolean);
117
- }
118
- function hasRequiredAnalyticsScope(scopes) {
119
- const granted = Array.isArray(scopes) ? scopes : parseGrantedScopes(scopes);
120
- return granted.includes("https://www.googleapis.com/auth/webmasters.readonly") || granted.includes("https://www.googleapis.com/auth/webmasters");
121
- }
122
- function hasOptionalIndexingScope(scopes) {
123
- return (Array.isArray(scopes) ? scopes : parseGrantedScopes(scopes)).includes(GSCDUMP_OPTIONAL_INDEXING_SCOPE);
124
- }
125
- const partnerRoutes = {
126
- partner: {
127
- users: {
128
- byId: (userId) => `/partner/users/${encodeURIComponent(userId)}`,
129
- lifecycle: (userId) => `/partner/users/${encodeURIComponent(userId)}/lifecycle`,
130
- siteTeam: (userId, siteId) => `/partner/users/${encodeURIComponent(userId)}/sites/${encodeURIComponent(siteId)}`
131
- },
132
- sites: {
133
- register: "/partner/sites/register",
134
- bulkRegister: "/partner/sites/bulk-register"
135
- }
136
- },
137
- users: {
138
- register: "/users/register",
139
- tokens: (userId) => `/users/${encodeURIComponent(userId)}/tokens`,
140
- status: (userId) => `/users/${encodeURIComponent(userId)}/status`,
141
- lifecycle: (userId) => `/users/${encodeURIComponent(userId)}/lifecycle`,
142
- sites: (userId) => `/users/${encodeURIComponent(userId)}/sites`,
143
- availableSites: (userId) => `/users/${encodeURIComponent(userId)}/available-sites`,
144
- siteTeam: (userId, siteId) => `/partner/users/${encodeURIComponent(userId)}/sites/${encodeURIComponent(siteId)}`
145
- },
146
- sites: {
147
- register: "/sites/register",
148
- bulkRegister: "/sites/bulk-register",
149
- byId: (siteId) => `/sites/${encodeURIComponent(siteId)}`,
150
- analysisSources: (siteId) => `/sites/${encodeURIComponent(siteId)}/analysis-sources`,
151
- syncStatus: (siteId) => `/sites/${encodeURIComponent(siteId)}/sync-status`,
152
- data: (siteId) => `/sites/${encodeURIComponent(siteId)}/data`,
153
- dataDetail: (siteId) => `/sites/${encodeURIComponent(siteId)}/data/detail`,
154
- analysis: (siteId) => `/sites/${encodeURIComponent(siteId)}/analysis`,
155
- sitemaps: (siteId) => `/sites/${encodeURIComponent(siteId)}/sitemaps`,
156
- sitemapChanges: (siteId) => `/sites/${encodeURIComponent(siteId)}/sitemaps/changes`,
157
- indexing: (siteId) => `/sites/${encodeURIComponent(siteId)}/indexing`,
158
- indexingUrls: (siteId) => `/sites/${encodeURIComponent(siteId)}/indexing/urls`,
159
- indexingDiagnostics: (siteId) => `/sites/${encodeURIComponent(siteId)}/indexing/diagnostics`,
160
- indexingInspect: (siteId) => `/sites/${encodeURIComponent(siteId)}/indexing/inspect`,
161
- recoverPermission: (siteId) => `/sites/${encodeURIComponent(siteId)}/recover-permission`,
162
- canonicalMismatches: (siteId) => `/sites/${encodeURIComponent(siteId)}/canonical-mismatches`,
163
- topAssociation: (siteId) => `/sites/${encodeURIComponent(siteId)}/data/top-association`,
164
- keywordSparklines: (siteId) => `/sites/${encodeURIComponent(siteId)}/data/keyword-sparklines`,
165
- queryTrend: (siteId) => `/sites/${encodeURIComponent(siteId)}/data/query-trend`,
166
- pageTrend: (siteId) => `/sites/${encodeURIComponent(siteId)}/data/page-trend`,
167
- contentVelocity: (siteId) => `/sites/${encodeURIComponent(siteId)}/content-velocity`,
168
- ctrCurve: (siteId) => `/sites/${encodeURIComponent(siteId)}/ctr-curve`,
169
- darkTraffic: (siteId) => `/sites/${encodeURIComponent(siteId)}/dark-traffic`,
170
- deviceGap: (siteId) => `/sites/${encodeURIComponent(siteId)}/device-gap`,
171
- indexPercent: (siteId) => `/sites/${encodeURIComponent(siteId)}/index-percent`,
172
- keywordBreadth: (siteId) => `/sites/${encodeURIComponent(siteId)}/keyword-breadth`,
173
- positionDistribution: (siteId) => `/sites/${encodeURIComponent(siteId)}/position-distribution`
174
- },
175
- settings: { user: "/user/settings" },
176
- teams: {
177
- create: "/partner/teams",
178
- byId: (teamId) => `/partner/teams/${encodeURIComponent(teamId)}`,
179
- members: (teamId) => `/partner/teams/${encodeURIComponent(teamId)}/members`,
180
- member: (teamId, userId) => `/partner/teams/${encodeURIComponent(teamId)}/members/${encodeURIComponent(userId)}`
181
- },
182
- realtime: {
183
- partner: "/ws/partner",
184
- user: "/ws/user"
185
- }
186
- };
187
- const analyticsRoutes = {
188
- whoami: "/api/__gsc/whoami",
189
- sites: "/api/__gsc/sites",
190
- site: {
191
- sourceInfo: (siteId) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/source-info`,
192
- analysisSources: (siteId) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/analysis-sources`,
193
- analyze: (siteId) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/analyze`,
194
- rows: (siteId) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/rows`,
195
- rollup: (siteId, rollupId) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/rollup/${encodeURIComponent(rollupId)}`,
196
- backfill: (siteId) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/backfill`,
197
- sitemaps: (siteId) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/sitemaps`,
198
- sitemapHistory: (siteId, hash) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/sitemaps/${encodeURIComponent(hash)}`,
199
- sitemapChanges: (siteId) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/sitemaps/changes`,
200
- inspections: (siteId) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/inspections`,
201
- inspectionHistory: (siteId, hash) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/inspections/${encodeURIComponent(hash)}`,
202
- indexingUrls: (siteId) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/indexing/urls`,
203
- indexingDiagnostics: (siteId) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/indexing/diagnostics`,
204
- indexingInspect: (siteId) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/indexing/inspect`,
205
- countries: (siteId) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/countries`,
206
- searchAppearance: (siteId) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/search-appearance`,
207
- topAssociation: (siteId) => `/api/__gsc/sites/${encodeURIComponent(siteId)}/data/top-association`
208
- },
209
- syncProgress: "/api/sync-progress"
210
- };
211
- const WEBHOOK_CONTRACT_VERSION = "2026-05-11";
212
- const WEBHOOK_SIGNATURE_HEADER = "X-GSCDump-Signature";
213
- const WEBHOOK_EVENT_HEADER = "X-GSCDump-Event";
214
- const WEBHOOK_DELIVERY_HEADER = "X-GSCDump-Delivery";
215
- const WEBHOOK_CONTRACT_VERSION_HEADER = "X-GSCDump-Contract-Version";
216
- const WEBHOOK_TIMESTAMP_HEADER = "X-GSCDump-Timestamp";
217
- const CANONICAL_WEBHOOK_EVENTS = [
218
- "user.lifecycle.changed",
219
- "site.lifecycle.changed",
220
- "site.analytics.ready",
221
- "site.indexing.ready",
222
- "site.auth.failed",
223
- "job.failed"
224
- ];
225
- const VALID_WEBHOOK_EVENTS = CANONICAL_WEBHOOK_EVENTS;
226
- const unknownRecord = z.record(z.string(), z.unknown());
227
- const searchTypeSchema = z.enum([
228
- "web",
229
- "image",
230
- "video",
231
- "news",
232
- "discover",
233
- "googleNews"
234
- ]);
235
- const builderStateSchema = z.object({ searchType: searchTypeSchema.optional() }).loose();
236
- const gscComparisonFilterSchema = z.enum([
237
- "new",
238
- "lost",
239
- "improving",
240
- "declining"
241
- ]);
242
- const gscApiRangeSchema = z.object({
243
- start: z.string(),
244
- end: z.string()
245
- });
246
- const countryRowSchema = z.object({
247
- country: z.string(),
248
- clicks: z.number(),
249
- impressions: z.number(),
250
- sum_position: z.number()
251
- }).loose();
252
- const countriesResponseSchema = z.object({
253
- rows: z.array(countryRowSchema),
254
- range: gscApiRangeSchema,
255
- generatedAt: z.string(),
256
- source: z.enum(["gsc-api", "engine"])
257
- }).loose();
258
- const searchAppearanceRowSchema = z.object({
259
- searchAppearance: z.string(),
260
- clicks: z.number(),
261
- impressions: z.number(),
262
- sum_position: z.number()
263
- }).loose();
264
- const searchAppearanceResponseSchema = z.object({
265
- rows: z.array(searchAppearanceRowSchema),
266
- range: gscApiRangeSchema,
267
- generatedAt: z.string(),
268
- source: z.enum(["gsc-api", "engine"])
269
- }).loose();
270
- const siteListItemSchema = z.object({
271
- id: z.string(),
272
- label: z.string(),
273
- hostname: z.string(),
274
- propertyType: z.enum(["domain", "url-prefix"]),
275
- readBackend: z.enum(["d1", "r2"]).optional()
276
- }).loose();
277
- const sitemapHistoryRecordSchema = z.object({
278
- path: z.string(),
279
- capturedAt: z.string()
280
- }).loose();
281
- const sitemapHistoryResponseSchema = z.object({
282
- path: z.string().nullable(),
283
- snapshots: z.array(sitemapHistoryRecordSchema)
284
- }).loose();
285
- const scheduleStateSchema = z.object({
286
- nextAt: z.number(),
287
- consecutiveUnchanged: z.number(),
288
- policyVersion: z.number()
289
- }).loose();
290
- const inspectionRecordRawSchema = z.object({
291
- schedule: scheduleStateSchema.optional(),
292
- nextCheckAfter: z.number().optional(),
293
- priority: z.enum([
294
- "high",
295
- "medium",
296
- "low"
297
- ]).optional(),
298
- sitemaps: z.string().nullable().optional(),
299
- referringUrls: z.string().nullable().optional(),
300
- crawlingUserAgent: z.string().nullable().optional(),
301
- mobileIssues: z.string().nullable().optional(),
302
- richResultsItems: z.string().nullable().optional(),
303
- inspectionResultLink: z.string().nullable().optional()
304
- }).loose();
305
- const inspectionHistoryRecordSchema = z.object({
306
- url: z.string(),
307
- inspectedAt: z.string(),
308
- indexStatus: z.string().optional(),
309
- lastCrawlTime: z.string().optional(),
310
- googleCanonical: z.string().optional(),
311
- userCanonical: z.string().optional(),
312
- coverageState: z.string().optional(),
313
- robotsTxtState: z.string().optional(),
314
- indexingState: z.string().optional(),
315
- pageFetchState: z.string().optional(),
316
- mobileUsabilityVerdict: z.string().optional(),
317
- richResultsVerdict: z.string().optional(),
318
- raw: inspectionRecordRawSchema.optional()
319
- }).loose();
320
- const inspectionHistoryResponseSchema = z.object({
321
- url: z.string().nullable(),
322
- records: z.array(inspectionHistoryRecordSchema)
323
- }).loose();
324
- const sitemapIndexSchema = z.object({
325
- version: z.literal(1),
326
- records: z.record(z.string(), sitemapHistoryRecordSchema)
327
- }).loose();
328
- const inspectionIndexSchema = z.object({
329
- version: z.literal(1),
330
- records: z.record(z.string(), inspectionHistoryRecordSchema)
331
- }).loose();
332
- const rollupEnvelopeSchema = z.object({
333
- version: z.literal(1),
334
- id: z.string(),
335
- builtAt: z.number(),
336
- windowDays: z.number().nullable(),
337
- payload: z.unknown()
338
- }).loose();
339
- const gscRowQueryMetaSchema = z.object({
340
- sourceName: z.string(),
341
- sourceKind: z.enum(["row", "sql"]),
342
- queryMs: z.number()
343
- }).loose();
344
- const gscRowQueryResponseSchema = z.object({
345
- rows: z.array(unknownRecord),
346
- meta: gscRowQueryMetaSchema
347
- }).loose();
348
- const indexingUrlStatusSchema = z.enum([
349
- "indexed",
350
- "not_indexed",
351
- "pending"
352
- ]);
353
- const indexingUrlRowSchema = z.object({
354
- url: z.string(),
355
- verdict: z.string().nullable(),
356
- coverageState: z.string().nullable(),
357
- indexingState: z.string().nullable(),
358
- robotsTxtState: z.string().nullable(),
359
- pageFetchState: z.string().nullable(),
360
- lastCrawlTime: z.string().nullable(),
361
- crawlingUserAgent: z.string().nullable(),
362
- userCanonical: z.string().nullable(),
363
- googleCanonical: z.string().nullable(),
364
- sitemaps: z.array(z.string()).nullable(),
365
- referringUrls: z.array(z.string()).nullable(),
366
- mobileVerdict: z.string().nullable(),
367
- mobileIssues: z.array(z.unknown()).nullable(),
368
- richResultsVerdict: z.string().nullable(),
369
- richResultsItems: z.array(z.unknown()).nullable(),
370
- inspectionResultLink: z.string().nullable(),
371
- firstCheckedAt: z.string(),
372
- lastCheckedAt: z.string(),
373
- checkCount: z.number()
374
- }).loose();
375
- const indexingUrlsResponseSchema = z.object({
376
- urls: z.array(indexingUrlRowSchema),
377
- pagination: z.object({
378
- total: z.number(),
379
- limit: z.number(),
380
- offset: z.number(),
381
- hasMore: z.boolean()
382
- }).loose(),
383
- meta: z.object({
384
- siteUrl: z.string(),
385
- status: z.string(),
386
- issue: z.string().nullable()
387
- }).loose()
388
- }).loose();
389
- const indexingIssueSchema = z.object({
390
- type: z.string(),
391
- label: z.string(),
392
- severity: z.enum([
393
- "error",
394
- "warning",
395
- "info"
396
- ]),
397
- count: z.number()
398
- }).loose();
399
- const indexingDiagnosticsSchema = z.object({
400
- summary: z.object({
401
- totalUrls: z.number(),
402
- indexed: z.number(),
403
- indexedPercent: z.number()
404
- }).loose(),
405
- issues: z.array(indexingIssueSchema),
406
- meta: z.object({ siteUrl: z.string() }).loose()
407
- }).loose();
408
- const indexingInspectRequestSchema = z.object({ urls: z.array(z.string().url()).min(1).max(10) });
409
- const indexingInspectResultSchema = z.object({
410
- url: z.string(),
411
- verdict: z.string().nullable(),
412
- coverageState: z.string().nullable(),
413
- indexingState: z.string().nullable(),
414
- robotsTxtState: z.string().nullable(),
415
- pageFetchState: z.string().nullable(),
416
- lastCrawlTime: z.string().nullable(),
417
- crawlingUserAgent: z.string().nullable(),
418
- userCanonical: z.string().nullable(),
419
- googleCanonical: z.string().nullable(),
420
- sitemaps: z.string().nullable(),
421
- referringUrls: z.string().nullable(),
422
- mobileVerdict: z.string().nullable(),
423
- mobileIssues: z.string().nullable(),
424
- richResultsVerdict: z.string().nullable(),
425
- richResultsItems: z.string().nullable(),
426
- inspectionResultLink: z.string().nullable()
427
- }).loose();
428
- const indexingInspectResponseSchema = z.object({
429
- siteId: z.string(),
430
- rateLimit: z.object({
431
- reserved: z.number(),
432
- remaining: z.number(),
433
- limit: z.number()
434
- }).loose(),
435
- results: z.array(indexingInspectResultSchema),
436
- errors: z.array(z.object({
437
- url: z.string(),
438
- error: z.string()
439
- }).loose()),
440
- skipped: z.array(z.object({
441
- url: z.string(),
442
- reason: z.string()
443
- }).loose())
444
- }).loose();
445
- const indexingInspectRateLimitedSchema = z.object({
446
- error: z.literal("rate_limited"),
447
- message: z.string(),
448
- rateLimit: z.object({
449
- reserved: z.literal(0),
450
- remaining: z.literal(0),
451
- limit: z.number()
452
- }).loose(),
453
- retryAfterSeconds: z.number()
454
- }).loose();
455
- const indexingInspectAnyResponseSchema = z.union([indexingInspectResponseSchema, indexingInspectRateLimitedSchema]);
456
- const sitemapChangesResponseSchema = z.object({
457
- added: z.array(z.object({
458
- url: z.string(),
459
- sitemap: z.string(),
460
- firstSeenAt: z.number()
461
- }).loose()),
462
- removed: z.array(z.object({
463
- url: z.string(),
464
- sitemap: z.string(),
465
- removedAt: z.number()
466
- }).loose()),
467
- summary: z.object({
468
- totalAdded: z.number(),
469
- totalRemoved: z.number(),
470
- period: z.object({ days: z.number() })
471
- }).loose()
472
- }).loose();
473
- const sourceInfoResponseSchema = z.object({
474
- name: z.string(),
475
- kind: z.enum(["row", "sql"]),
476
- capabilities: z.object({ attachedTables: z.boolean().optional() }).loose(),
477
- supportedAnalyzerIds: z.array(z.string()),
478
- browserAttachEligible: z.boolean(),
479
- identityAttrs: unknownRecord.nullable().optional()
480
- }).loose();
481
- const whoamiResponseSchema = z.object({
482
- userId: z.string().nullable().optional(),
483
- plan: z.string().nullable().optional(),
484
- attrs: unknownRecord.optional()
485
- }).loose();
486
- const backfillRangeSchema = z.object({
487
- startDate: z.string(),
488
- endDate: z.string()
489
- }).loose();
490
- const backfillResponseSchema = z.object({
491
- ok: z.boolean().optional(),
492
- queued: z.boolean().optional()
493
- }).loose();
494
- const gscdumpTotalsSchema = z.object({
495
- clicks: z.number(),
496
- impressions: z.number(),
497
- ctr: z.number(),
498
- position: z.number()
499
- });
500
- const gscdumpMetaSchema = z.object({
501
- siteUrl: z.string(),
502
- syncStatus: z.string(),
503
- newestDateSynced: z.string().nullable(),
504
- oldestDateSynced: z.string().nullable(),
505
- dataDelay: z.string(),
506
- dataEndDate: z.string().nullable().optional(),
507
- warnings: z.array(z.string()).optional(),
508
- enrichment: z.object({
509
- lastEnriched: z.number(),
510
- isDue: z.boolean()
511
- }).optional(),
512
- backfill: z.object({
513
- percent: z.number(),
514
- daysRemaining: z.number().optional()
515
- }).optional()
516
- }).loose();
517
- const gscdumpDataRowSchema = z.object({
518
- clicks: z.number(),
519
- impressions: z.number(),
520
- ctr: z.number(),
521
- position: z.number()
522
- }).loose();
523
- const gscdumpDataResponseSchema = z.object({
524
- rows: z.array(gscdumpDataRowSchema),
525
- totalCount: z.number(),
526
- totals: gscdumpTotalsSchema,
527
- meta: gscdumpMetaSchema
528
- });
529
- const gscdumpDataDetailResponseSchema = z.object({
530
- daily: z.array(z.object({
531
- date: z.string(),
532
- clicks: z.number(),
533
- impressions: z.number(),
534
- ctr: z.number(),
535
- position: z.number()
536
- }).loose()),
537
- totals: gscdumpTotalsSchema,
538
- previousTotals: gscdumpTotalsSchema.optional(),
539
- meta: gscdumpMetaSchema
540
- });
541
- const registerPartnerUserSchema = z.object({
542
- userGoogleId: z.string().min(1),
543
- userEmail: z.email(),
544
- userName: z.string().optional(),
545
- accessToken: z.string().min(1),
546
- refreshToken: z.string().min(1),
547
- tokenExpiresAt: z.number().optional()
548
- });
549
- const updatePartnerUserTokensSchema = z.object({
550
- accessToken: z.string().min(1),
551
- refreshToken: z.string().min(1),
552
- tokenExpiresAt: z.number().optional()
553
- });
554
- const gscdumpUserRegistrationSchema = z.object({
555
- userId: z.string(),
556
- apiKey: z.string().optional(),
557
- isNew: z.boolean().optional(),
558
- status: z.enum(["provisioning", "ready"]).optional()
559
- }).loose();
560
- const gscdumpUserStatusSchema = z.object({
561
- userId: z.string(),
562
- status: z.enum([
563
- "provisioning",
564
- "ready",
565
- "reauth_required"
566
- ]),
567
- databaseReady: z.boolean().optional(),
568
- needsReauth: z.boolean().optional(),
569
- reauthRequired: z.boolean().optional(),
570
- reauthReason: z.string().nullable().optional(),
571
- authFailureCount: z.number().optional(),
572
- nextAction: z.enum(["reconnect_google", "none"]).optional(),
573
- grantedScopes: z.string().nullable().optional()
574
- }).loose();
575
- const lifecycleProgressSchema = z.object({
576
- completed: z.number(),
577
- failed: z.number(),
578
- total: z.number(),
579
- percent: z.number()
580
- });
581
- const lifecycleErrorSchema = z.object({
582
- code: z.enum(lifecycleErrorCodes),
583
- message: z.string(),
584
- retryable: z.boolean()
585
- });
586
- const partnerLifecycleAccountSchema = z.object({
587
- status: z.enum(accountStatuses),
588
- grantedScopes: z.array(z.string()),
589
- missingScopes: z.array(z.string()),
590
- nextAction: z.enum(accountNextActions)
591
- }).loose();
592
- const partnerLifecycleSiteSchema = z.object({
593
- siteId: z.string(),
594
- externalSiteId: z.string().nullable(),
595
- requestedUrl: z.string(),
596
- gscPropertyUrl: z.string().nullable(),
597
- permissionLevel: z.string().nullable(),
598
- property: z.object({
599
- status: z.enum(propertyStatuses),
600
- nextAction: z.enum(propertyNextActions)
601
- }).loose(),
602
- analytics: z.object({
603
- status: z.enum(analyticsStatuses),
604
- progress: lifecycleProgressSchema,
605
- queryable: z.boolean(),
606
- sourceMode: z.enum(querySourceModes),
607
- syncedRange: z.object({
608
- oldest: z.string().nullable(),
609
- newest: z.string().nullable()
610
- }).loose(),
611
- nextAction: z.enum(analyticsNextActions)
612
- }).loose(),
613
- sitemaps: z.object({
614
- status: z.enum(sitemapStatuses),
615
- discoveredCount: z.number(),
616
- nextAction: z.enum(sitemapNextActions)
617
- }).loose(),
618
- indexing: z.object({
619
- status: z.enum(indexingStatuses),
620
- eligible: z.boolean(),
621
- reason: z.string().nullable(),
622
- progress: lifecycleProgressSchema,
623
- nextAction: z.enum(indexingNextActions)
624
- }).loose(),
625
- latestError: lifecycleErrorSchema.nullable(),
626
- lifecycleRevision: z.number(),
627
- updatedAt: z.string()
628
- }).loose();
629
- const partnerLifecycleResponseSchema = z.object({
630
- contractVersion: z.literal(GSCDUMP_ONBOARDING_CONTRACT_VERSION),
631
- userId: z.string(),
632
- partnerId: z.string().nullable(),
633
- account: partnerLifecycleAccountSchema,
634
- sites: z.array(partnerLifecycleSiteSchema)
635
- }).loose();
636
- const gscdumpAvailableSiteSchema = z.object({
637
- siteUrl: z.string(),
638
- permissionLevel: z.string(),
639
- registered: z.boolean(),
640
- siteId: z.string().optional(),
641
- syncStatus: z.enum([
642
- "pending",
643
- "syncing",
644
- "synced",
645
- "error"
646
- ]).nullable().optional(),
647
- syncProgress: z.object({
648
- completed: z.number(),
649
- failed: z.number().optional(),
650
- total: z.number(),
651
- percent: z.number()
652
- }).optional(),
653
- lastSyncAt: z.number().nullable().optional(),
654
- newestDateSynced: z.string().nullable().optional(),
655
- oldestDateSynced: z.string().nullable().optional()
656
- }).loose();
657
- const gscdumpUserSiteSchema = z.object({
658
- siteId: z.string(),
659
- siteUrl: z.string(),
660
- syncStatus: z.enum([
661
- "idle",
662
- "pending",
663
- "syncing",
664
- "synced",
665
- "error"
666
- ]),
667
- lastSyncAt: z.number().nullable(),
668
- newestDateSynced: z.string().nullable(),
669
- oldestDateSynced: z.string().nullable()
670
- }).loose();
671
- const gscdumpSiteRegistrationSchema = z.object({
672
- siteId: z.string(),
673
- status: z.enum([
674
- "idle",
675
- "pending",
676
- "syncing",
677
- "synced",
678
- "error"
679
- ]),
680
- message: z.string().optional(),
681
- existing: z.boolean().optional(),
682
- indexingEligible: z.boolean().optional(),
683
- indexingIneligibleReason: z.enum(["missing_indexing_scope", "insufficient_gsc_permission"]).optional(),
684
- indexingPermissionLevel: z.string().nullable().optional(),
685
- grantedScopes: z.array(z.string()).optional()
686
- }).loose();
687
- const registerPartnerSiteSchema = z.object({
688
- userId: z.string(),
689
- siteUrl: z.string().min(1),
690
- requestedUrl: z.string().optional(),
691
- gscPropertyUrl: z.string().optional(),
692
- externalSiteId: z.string().optional(),
693
- externalSiteUrl: z.string().optional(),
694
- webhookUrl: z.url().optional(),
695
- webhookEvents: z.array(z.enum(CANONICAL_WEBHOOK_EVENTS)).optional(),
696
- teamId: z.string().optional(),
697
- enabledSearchTypes: z.array(searchTypeSchema).optional()
698
- });
699
- const bulkRegisterPartnerSitesSchema = z.object({
700
- userId: z.string().optional(),
701
- siteUrls: z.array(z.string().min(1)).optional(),
702
- sites: z.array(z.object({
703
- siteUrl: z.string().optional(),
704
- requestedUrl: z.string().optional(),
705
- gscPropertyUrl: z.string().optional(),
706
- externalSiteId: z.string().optional(),
707
- externalSiteUrl: z.string().optional(),
708
- webhookUrl: z.url().optional(),
709
- webhookEvents: z.array(z.enum(CANONICAL_WEBHOOK_EVENTS)).optional()
710
- }).loose()).optional()
711
- }).refine((value) => (value.siteUrls?.length ?? 0) > 0 || (value.sites?.length ?? 0) > 0, { message: "siteUrls or sites is required" });
712
- const bulkRegisterPartnerSitesResponseSchema = z.object({
713
- results: z.array(z.object({
714
- siteUrl: z.string(),
715
- siteId: z.string().optional(),
716
- status: z.enum([
717
- "registered",
718
- "already_exists",
719
- "not_found",
720
- "error"
721
- ]),
722
- error: z.string().optional(),
723
- site: unknownRecord.nullable().optional(),
724
- indexingEligible: z.boolean().optional(),
725
- indexingIneligibleReason: z.enum(["missing_indexing_scope", "insufficient_gsc_permission"]).optional(),
726
- indexingPermissionLevel: z.string().nullable().optional(),
727
- grantedScopes: z.array(z.string()).optional()
728
- }).loose()),
729
- summary: z.object({
730
- registered: z.number(),
731
- alreadyExists: z.number(),
732
- notFound: z.number(),
733
- errors: z.number()
734
- })
735
- }).loose();
736
- const dataQueryOptionsSchema = z.object({
737
- comparison: builderStateSchema.optional(),
738
- filter: gscComparisonFilterSchema.optional(),
739
- searchType: searchTypeSchema.optional()
740
- }).optional();
741
- const dataDetailOptionsSchema = z.object({
742
- comparison: builderStateSchema.optional(),
743
- searchType: searchTypeSchema.optional()
744
- }).optional();
745
- const gscdumpAnalysisPresetSchema = z.enum([
746
- "striking-distance",
747
- "opportunity",
748
- "decay",
749
- "zero-click",
750
- "non-brand",
751
- "brand-only",
752
- "movers-rising",
753
- "movers-declining"
754
- ]);
755
- const gscdumpAnalysisParamsSchema = z.object({
756
- preset: gscdumpAnalysisPresetSchema,
757
- startDate: z.string(),
758
- endDate: z.string(),
759
- prevStartDate: z.string().optional(),
760
- prevEndDate: z.string().optional(),
761
- brandTerms: z.string().optional(),
762
- limit: z.number().optional(),
763
- offset: z.number().optional(),
764
- search: z.string().optional(),
765
- minImpressions: z.number().optional(),
766
- minPosition: z.number().optional(),
767
- maxPosition: z.number().optional(),
768
- maxCtr: z.number().optional(),
769
- searchType: searchTypeSchema.optional()
770
- }).superRefine((value, ctx) => {
771
- if ((value.preset === "brand-only" || value.preset === "non-brand") && !value.brandTerms?.trim()) ctx.addIssue({
772
- code: "custom",
773
- path: ["brandTerms"],
774
- message: "brandTerms is required for brand/non-brand presets"
775
- });
776
- });
777
- const gscdumpAnalysisResponseSchema = z.object({
778
- preset: gscdumpAnalysisPresetSchema,
779
- keywords: z.array(unknownRecord),
780
- totalCount: z.number(),
781
- summary: unknownRecord.optional(),
782
- meta: gscdumpMetaSchema
783
- }).loose();
784
- const gscdumpSitemapsResponseSchema = z.object({
785
- sitemaps: z.array(z.object({
786
- path: z.string(),
787
- urlCount: z.number(),
788
- errors: z.number(),
789
- warnings: z.number(),
790
- isIndex: z.boolean().optional(),
791
- lastSubmitted: z.string().nullable().optional(),
792
- lastDownloaded: z.string().nullable().optional()
793
- }).loose()),
794
- history: z.array(z.object({
795
- date: z.string(),
796
- errors: z.number(),
797
- warnings: z.number(),
798
- urlCount: z.number(),
799
- urlDelta: z.number()
800
- }).loose()),
801
- perSitemapHistory: z.record(z.string(), z.array(z.object({
802
- date: z.string(),
803
- urlCount: z.number(),
804
- changed: z.boolean(),
805
- urlDelta: z.number()
806
- }).loose())),
807
- meta: z.object({
808
- siteUrl: z.string(),
809
- syncStatus: z.string().nullable()
810
- }).loose()
811
- }).loose();
812
- const gscdumpSitemapChangesResponseSchema = z.object({
813
- added: z.array(z.object({
814
- url: z.string(),
815
- sitemap: z.string(),
816
- firstSeenAt: z.number()
817
- }).loose()),
818
- removed: z.array(z.object({
819
- url: z.string(),
820
- sitemap: z.string(),
821
- removedAt: z.number()
822
- }).loose()),
823
- summary: z.object({
824
- totalAdded: z.number(),
825
- totalRemoved: z.number(),
826
- period: z.object({ days: z.number() })
827
- }).optional()
828
- }).loose();
829
- const indexingUrlsParamsSchema = z.object({
830
- limit: z.number().optional(),
831
- offset: z.number().optional(),
832
- status: z.enum([
833
- "indexed",
834
- "not_indexed",
835
- "pending"
836
- ]).optional(),
837
- issue: z.string().optional(),
838
- search: z.string().optional()
839
- }).optional();
840
- const gscdumpIndexingResponseSchema = z.object({
841
- trend: z.array(z.object({
842
- date: z.string(),
843
- totalUrls: z.number(),
844
- indexedCount: z.number().nullable(),
845
- notIndexedCount: z.number().nullable(),
846
- errorCount: z.number().nullable(),
847
- indexedPercent: z.number(),
848
- issues: z.object({
849
- blockedByRobots: z.number().nullable(),
850
- noindexDetected: z.number().nullable(),
851
- soft404: z.number().nullable(),
852
- redirect: z.number().nullable(),
853
- notFound: z.number().nullable(),
854
- serverError: z.number().nullable()
855
- }).loose(),
856
- coverage: z.object({
857
- submittedIndexed: z.number().nullable(),
858
- crawledNotIndexed: z.number().nullable(),
859
- discoveredNotCrawled: z.number().nullable()
860
- }).loose(),
861
- signals: z.object({
862
- mobilePass: z.number(),
863
- mobileFail: z.number(),
864
- richResultsPass: z.number(),
865
- richResultsFail: z.number()
866
- }).loose()
867
- }).loose()),
868
- summary: z.object({
869
- totalUrls: z.number(),
870
- indexed: z.number(),
871
- notIndexed: z.number(),
872
- pending: z.number(),
873
- indexedPercent: z.number(),
874
- oldestCheck: z.string().nullable(),
875
- newestCheck: z.string().nullable(),
876
- change7d: z.number().nullable(),
877
- change28d: z.number().nullable(),
878
- signals: z.object({
879
- mobilePass: z.number(),
880
- mobileFail: z.number(),
881
- mobileUnspecified: z.number(),
882
- richResultsPass: z.number(),
883
- richResultsFail: z.number(),
884
- richResultTypes: z.array(z.object({
885
- type: z.string(),
886
- count: z.number()
887
- }).loose()),
888
- crawlingMobile: z.number(),
889
- crawlingDesktop: z.number()
890
- }).loose()
891
- }).loose(),
892
- meta: z.object({
893
- siteUrl: z.string(),
894
- syncStatus: z.string().nullable(),
895
- indexingStatus: z.enum([
896
- "pending",
897
- "partial",
898
- "complete"
899
- ]),
900
- indexingProgress: z.number(),
901
- sitemapTotal: z.number(),
902
- inspectedCount: z.number(),
903
- noSitemapsSubmitted: z.boolean(),
904
- sitemapsPending: z.boolean(),
905
- rollupBuiltAt: z.number().optional()
906
- }).loose()
907
- }).loose();
908
- const gscdumpIndexingUrlsResponseSchema = z.object({
909
- urls: z.array(unknownRecord),
910
- pagination: z.object({
911
- total: z.number(),
912
- limit: z.number(),
913
- offset: z.number(),
914
- hasMore: z.boolean()
915
- }),
916
- meta: z.object({
917
- siteUrl: z.string(),
918
- status: z.string(),
919
- issue: z.string().nullable()
920
- }).loose()
921
- }).loose();
922
- const gscdumpIndexingDiagnosticsResponseSchema = z.object({
923
- summary: z.object({
924
- totalUrls: z.number(),
925
- indexed: z.number(),
926
- indexedPercent: z.number()
927
- }).loose(),
928
- issues: z.array(unknownRecord),
929
- meta: z.object({ siteUrl: z.string() }).loose()
930
- }).loose();
931
- const gscdumpUserSettingsSchema = z.object({ browserAnalyzerEnabled: z.boolean() }).loose();
932
- const gscdumpPermissionRecoverySchema = z.object({
933
- success: z.boolean(),
934
- permissionLevel: z.string().nullable(),
935
- jobsQueued: z.number(),
936
- message: z.string()
937
- }).loose();
938
- const gscdumpUserMeResponseSchema = z.object({
939
- id: z.string(),
940
- name: z.string().optional(),
941
- email: z.string(),
942
- picture: z.string().optional(),
943
- setupComplete: z.boolean(),
944
- databaseReady: z.boolean(),
945
- plan: z.string(),
946
- accountStatus: z.enum(accountStatuses),
947
- accountNextAction: z.enum(accountNextActions),
948
- missingScopes: z.array(z.string()),
949
- browserAnalyzerEnabled: z.boolean(),
950
- stats: z.object({
951
- activeSessions: z.number(),
952
- totalApiCalls: z.number(),
953
- lastUsed: z.number().nullable()
954
- }).nullable()
955
- }).loose();
956
- const gscdumpHealthResponseSchema = z.object({
957
- timestamp: z.number(),
958
- jobs: z.object({
959
- byStatus: z.record(z.string(), z.number()),
960
- byQueue: z.record(z.string(), z.number()),
961
- stuck: z.number(),
962
- oldCompleted: z.number()
963
- }).loose(),
964
- failures: z.object({ lastHour: z.number() }).loose(),
965
- users: z.object({ needsReauth: z.number() }).loose(),
966
- throughput: z.object({ completedLastHour: z.number() }).loose(),
967
- totals: z.object({
968
- users: z.number(),
969
- sites: z.number(),
970
- byPlan: z.record(z.string(), z.number())
971
- }).loose()
972
- }).loose();
973
- const syncProgressPhaseCountsSchema = z.object({
974
- total: z.number(),
975
- done: z.number(),
976
- pending: z.number(),
977
- stuck: z.number(),
978
- failed: z.number(),
979
- percent: z.number(),
980
- rows: z.number()
981
- }).loose();
982
- const gscdumpSyncProgressResponseSchema = z.object({
983
- summary: z.object({
984
- total: z.number(),
985
- inInitial: z.number(),
986
- inBackfill: z.number(),
987
- complete: z.number(),
988
- stalled: z.number(),
989
- authBlocked: z.number(),
990
- totalRows: z.number(),
991
- avgInitialPercent: z.number(),
992
- avgBackfillPercent: z.number()
993
- }).loose(),
994
- sites: z.array(z.object({
995
- id: z.string(),
996
- userId: z.number(),
997
- partnerId: z.number().nullable(),
998
- siteUrl: z.string(),
999
- syncStatus: z.string().nullable(),
1000
- lastError: z.string().nullable(),
1001
- createdAt: z.number(),
1002
- oldestDateSynced: z.string().nullable(),
1003
- newestDateSynced: z.string().nullable(),
1004
- oldestDateAvailable: z.string().nullable(),
1005
- userEmail: z.string().nullable(),
1006
- partnerName: z.string().nullable(),
1007
- needsReauth: z.boolean(),
1008
- authFailureCount: z.number(),
1009
- currentPhase: z.enum([
1010
- "initial",
1011
- "backfill",
1012
- "complete"
1013
- ]),
1014
- isStalled: z.boolean(),
1015
- stallDays: z.number(),
1016
- needsContinuation: z.boolean(),
1017
- missingDays: z.number(),
1018
- initial: syncProgressPhaseCountsSchema,
1019
- backfill: syncProgressPhaseCountsSchema.extend({
1020
- processing: z.number(),
1021
- daysTarget: z.number(),
1022
- daysQueued: z.number()
1023
- }).loose(),
1024
- tables: z.record(z.string(), z.object({
1025
- percent: z.number(),
1026
- rows: z.number()
1027
- }).loose()),
1028
- overallPercent: z.number(),
1029
- totalRows: z.number(),
1030
- dateStatuses: z.array(z.object({
1031
- date: z.string(),
1032
- status: z.enum([
1033
- "completed",
1034
- "queued",
1035
- "processing",
1036
- "failed"
1037
- ])
1038
- }).loose())
1039
- }).loose()),
1040
- pagination: z.object({
1041
- total: z.number(),
1042
- limit: z.number(),
1043
- offset: z.number(),
1044
- hasMore: z.boolean()
1045
- }).loose(),
1046
- hasD1Stats: z.boolean()
1047
- }).loose();
1048
- const syncJobsQueueCountsSchema = z.object({
1049
- queued: z.number(),
1050
- processing: z.number()
1051
- }).loose();
1052
- const gscdumpSyncJobsResponseSchema = z.object({
1053
- jobs: z.array(z.object({
1054
- id: z.number(),
1055
- userSiteId: z.string().nullable(),
1056
- tableName: z.string().optional(),
1057
- tableTier: z.string().optional(),
1058
- date: z.string().optional(),
1059
- priority: z.string().optional(),
1060
- status: z.enum([
1061
- "queued",
1062
- "processing",
1063
- "completed",
1064
- "failed",
1065
- "scheduled"
1066
- ]),
1067
- siteUrl: z.string().nullable(),
1068
- userEmail: z.string().nullable().optional(),
1069
- rowsFetched: z.number().nullable(),
1070
- rowsInserted: z.number().nullable(),
1071
- error: z.string().nullable(),
1072
- retryCount: z.number(),
1073
- queuedAt: z.number(),
1074
- startedAt: z.number().nullable(),
1075
- completedAt: z.number().nullable()
1076
- }).loose()),
1077
- summary: z.object({
1078
- queued: z.number(),
1079
- processing: z.number(),
1080
- completed: z.number(),
1081
- failed: z.number()
1082
- }).loose(),
1083
- queues: z.record(z.string(), syncJobsQueueCountsSchema),
1084
- tiers: z.object({
1085
- critical: syncJobsQueueCountsSchema.optional(),
1086
- standard: syncJobsQueueCountsSchema.optional(),
1087
- extended: syncJobsQueueCountsSchema.optional()
1088
- }).loose().optional()
1089
- }).loose();
1090
- const gscdumpSiteReportResponseSchema = z.object({
1091
- status: z.enum(["done", "error"]),
1092
- cached: z.boolean(),
1093
- result: z.unknown().optional(),
1094
- error: z.string().optional()
1095
- }).loose();
1096
- const gscdumpTopAssociationParamsSchema = z.object({
1097
- type: z.enum(["topPage", "topKeyword"]),
1098
- identifier: z.string().min(1),
1099
- startDate: z.string(),
1100
- endDate: z.string()
1101
- });
1102
- const gscdumpTopAssociationResponseSchema = z.object({ value: z.string().nullable() }).loose();
1103
- const gscdumpAnalysisSourcesResponseSchema = z.object({
1104
- tables: z.record(z.string(), z.array(z.string())),
1105
- generatedAt: z.string(),
1106
- manifestVersion: z.string()
1107
- }).loose();
1108
- const gscdumpKeywordSparklinesParamsSchema = z.object({
1109
- keywords: z.array(z.string()).min(1).max(20),
1110
- startDate: z.string(),
1111
- endDate: z.string(),
1112
- searchType: searchTypeSchema.optional()
1113
- });
1114
- const gscdumpKeywordSparklinesResponseSchema = z.object({ sparklines: z.record(z.string(), z.array(z.number())) }).loose();
1115
- const gscdumpQueryTrendParamsSchema = z.object({
1116
- startDate: z.string(),
1117
- endDate: z.string(),
1118
- prevStartDate: z.string().optional(),
1119
- prevEndDate: z.string().optional(),
1120
- searchType: searchTypeSchema.optional()
1121
- });
1122
- const gscdumpQueryTrendResponseSchema = z.object({
1123
- daily: z.array(z.object({
1124
- date: z.string(),
1125
- queryCount: z.number()
1126
- }).loose()),
1127
- total: z.number(),
1128
- previousTotal: z.number().optional(),
1129
- meta: z.object({
1130
- siteUrl: z.string(),
1131
- syncStatus: z.string().nullable()
1132
- }).loose()
1133
- }).loose();
1134
- const gscdumpPageTrendParamsSchema = z.object({
1135
- startDate: z.string(),
1136
- endDate: z.string(),
1137
- prevStartDate: z.string().optional(),
1138
- prevEndDate: z.string().optional(),
1139
- searchType: searchTypeSchema.optional()
1140
- });
1141
- const gscdumpPageTrendResponseSchema = z.object({
1142
- daily: z.array(z.object({
1143
- date: z.string(),
1144
- pageCount: z.number()
1145
- }).loose()),
1146
- total: z.number(),
1147
- previousTotal: z.number().optional(),
1148
- meta: z.object({
1149
- siteUrl: z.string(),
1150
- syncStatus: z.string().nullable()
1151
- }).loose()
1152
- }).loose();
1153
- const gscdumpDateRangeParamsSchema = z.object({
1154
- startDate: z.string(),
1155
- endDate: z.string()
1156
- });
1157
- const gscdumpIndexPercentParamsSchema = z.object({
1158
- invisibleLimit: z.number().optional(),
1159
- invisibleOffset: z.number().optional(),
1160
- orphanLimit: z.number().optional()
1161
- }).optional();
1162
- const gscdumpCanonicalMismatchesResponseSchema = z.object({
1163
- mismatches: z.array(z.object({
1164
- url: z.string(),
1165
- userCanonical: z.string(),
1166
- googleCanonical: z.string(),
1167
- verdict: z.string().nullable(),
1168
- coverageState: z.string().nullable(),
1169
- lastCrawlTime: z.string().nullable(),
1170
- lastCheckedAt: z.string().nullable()
1171
- }).loose()),
1172
- totalCount: z.number(),
1173
- consolidationTargets: z.array(z.object({
1174
- google_canonical: z.string(),
1175
- count: z.number()
1176
- }).loose()),
1177
- trend: z.array(z.object({
1178
- date: z.string(),
1179
- count: z.number()
1180
- }).loose()),
1181
- meta: z.object({
1182
- siteUrl: z.string(),
1183
- syncStatus: z.string().nullable()
1184
- }).loose()
1185
- }).loose();
1186
- const gscdumpIndexPercentResponseSchema = z.object({
1187
- trend: z.array(z.object({
1188
- date: z.string(),
1189
- percent: z.number(),
1190
- total: z.number(),
1191
- visible: z.number(),
1192
- added: z.number().nullable(),
1193
- removed: z.number().nullable()
1194
- }).loose()),
1195
- invisibleUrls: z.array(z.object({
1196
- url: z.string(),
1197
- firstSeen: z.string().optional(),
1198
- lastmod: z.string().nullable()
1199
- }).loose()),
1200
- invisibleCount: z.number(),
1201
- orphanPages: z.array(z.object({
1202
- url: z.string(),
1203
- impressions: z.number().nullable(),
1204
- clicks: z.number().nullable()
1205
- }).loose()),
1206
- orphanCount: z.number(),
1207
- sitemaps: z.array(z.object({
1208
- path: z.string(),
1209
- urlCount: z.number(),
1210
- isIndex: z.boolean()
1211
- }).loose()),
1212
- summary: z.object({
1213
- currentPercent: z.number(),
1214
- totalSitemapUrls: z.number(),
1215
- visibleUrls: z.number(),
1216
- change7d: z.number().nullable(),
1217
- change28d: z.number().nullable(),
1218
- dataDate: z.string()
1219
- }).loose(),
1220
- meta: z.object({
1221
- siteUrl: z.string(),
1222
- syncStatus: z.string().nullable(),
1223
- newestDateSynced: z.string().nullable()
1224
- }).loose()
1225
- }).loose();
1226
- const gscdumpDeletePartnerUserResponseSchema = z.object({
1227
- ok: z.literal(true),
1228
- queued: z.literal(true),
1229
- userId: z.number(),
1230
- publicId: z.string()
1231
- }).loose();
1232
- const gscdumpTeamRoleSchema = z.enum([
1233
- "admin",
1234
- "editor",
1235
- "viewer"
1236
- ]);
1237
- const gscdumpTeamRowSchema = z.object({
1238
- id: z.string(),
1239
- ownerId: z.number(),
1240
- name: z.string(),
1241
- personalTeam: z.boolean(),
1242
- createdAt: z.number(),
1243
- updatedAt: z.number()
1244
- }).loose();
1245
- const gscdumpTeamMemberRowSchema = z.object({
1246
- userId: z.number(),
1247
- publicId: z.string(),
1248
- name: z.string().nullable(),
1249
- email: z.email(),
1250
- picture: z.string().nullable(),
1251
- role: gscdumpTeamRoleSchema,
1252
- joinedAt: z.number()
1253
- }).loose();
1254
- const createPartnerTeamSchema = z.object({
1255
- ownerUserId: z.string(),
1256
- name: z.string().min(2).max(60),
1257
- personalTeam: z.boolean().optional()
1258
- });
1259
- const addPartnerTeamMemberSchema = z.object({
1260
- userId: z.string(),
1261
- role: gscdumpTeamRoleSchema
1262
- });
1263
- const bindPartnerSiteTeamSchema = z.object({ teamId: z.string().nullable() });
1264
- const partnerRealtimeEventSchema = z.discriminatedUnion("event", [
1265
- z.object({
1266
- event: z.literal("sync.progress"),
1267
- siteId: z.string(),
1268
- siteUrl: z.string(),
1269
- table: z.string(),
1270
- date: z.string(),
1271
- progress: z.number()
1272
- }).loose(),
1273
- z.object({
1274
- event: z.literal("sync.complete"),
1275
- userId: z.number(),
1276
- siteId: z.string(),
1277
- siteUrl: z.string(),
1278
- table: z.string(),
1279
- date: z.string(),
1280
- rowsFetched: z.number(),
1281
- rowsInserted: z.number(),
1282
- timestamp: z.number()
1283
- }).loose(),
1284
- z.object({
1285
- event: z.literal("sync.job_complete"),
1286
- userId: z.number(),
1287
- siteId: z.string(),
1288
- siteUrl: z.string(),
1289
- table: z.string(),
1290
- date: z.string(),
1291
- rowsFetched: z.number(),
1292
- rowsInserted: z.number(),
1293
- syncStatus: z.string(),
1294
- timestamp: z.number()
1295
- }).loose(),
1296
- z.object({
1297
- event: z.literal("sync.site_complete"),
1298
- userId: z.number(),
1299
- siteId: z.string(),
1300
- siteUrl: z.string(),
1301
- syncStatus: z.string(),
1302
- timestamp: z.number()
1303
- }).loose(),
1304
- z.object({
1305
- event: z.literal("sync.failed"),
1306
- userId: z.number(),
1307
- siteId: z.string(),
1308
- siteUrl: z.string(),
1309
- table: z.string(),
1310
- date: z.string(),
1311
- error: z.string(),
1312
- timestamp: z.number()
1313
- }).loose(),
1314
- z.object({
1315
- event: z.literal("job.failed"),
1316
- siteId: z.string(),
1317
- siteUrl: z.string(),
1318
- table: z.string(),
1319
- date: z.string(),
1320
- error: z.string(),
1321
- timestamp: z.number()
1322
- }).loose(),
1323
- z.object({
1324
- event: z.literal("site.added"),
1325
- userId: z.number(),
1326
- siteId: z.string(),
1327
- siteUrl: z.string()
1328
- }).loose(),
1329
- z.object({
1330
- event: z.literal("site.removed"),
1331
- userId: z.number(),
1332
- siteId: z.string(),
1333
- siteUrl: z.string()
1334
- }).loose(),
1335
- z.object({
1336
- event: z.literal("auth.failed"),
1337
- userId: z.number(),
1338
- siteId: z.string(),
1339
- siteUrl: z.string(),
1340
- error: z.string(),
1341
- timestamp: z.number()
1342
- }).loose(),
1343
- z.object({
1344
- event: z.literal("auth.needs_reauth"),
1345
- userId: z.number(),
1346
- failureCount: z.number(),
1347
- timestamp: z.number()
1348
- }).loose(),
1349
- z.object({
1350
- event: z.literal("enrichment.complete"),
1351
- siteId: z.string(),
1352
- userId: z.number(),
1353
- timestamp: z.number()
1354
- }).loose()
1355
- ]);
1356
- const canonicalWebhookEventTypeSchema = z.enum(CANONICAL_WEBHOOK_EVENTS);
1357
- const webhookEventTypeSchema = canonicalWebhookEventTypeSchema;
1358
- const jobFailedWebhookPayloadSchema = z.object({
1359
- event: z.literal("job.failed"),
1360
- siteId: z.string(),
1361
- siteUrl: z.string(),
1362
- table: z.string(),
1363
- date: z.string(),
1364
- error: z.string(),
1365
- timestamp: z.number()
1366
- }).loose();
1367
- const partnerWebhookDataSchema = unknownRecord;
1368
- const partnerWebhookEnvelopeSchema = z.object({
1369
- contractVersion: z.literal(WEBHOOK_CONTRACT_VERSION),
1370
- deliveryId: z.string().min(1),
1371
- event: canonicalWebhookEventTypeSchema,
1372
- partnerId: z.string().min(1),
1373
- userId: z.string().nullable(),
1374
- siteId: z.string().optional(),
1375
- externalUserId: z.string().nullable().optional(),
1376
- externalSiteId: z.string().nullable().optional(),
1377
- lifecycleRevision: z.number().int(),
1378
- occurredAt: z.iso.datetime(),
1379
- data: partnerWebhookDataSchema
1380
- }).loose();
1381
- const partnerEndpointSchemas = {
1382
- appUser: { response: gscdumpUserMeResponseSchema },
1383
- appHealth: { response: gscdumpHealthResponseSchema },
1384
- appSyncProgress: { response: gscdumpSyncProgressResponseSchema },
1385
- appSyncJobs: { response: gscdumpSyncJobsResponseSchema },
1386
- analyticsWhoami: { response: whoamiResponseSchema },
1387
- analyticsSites: { response: z.array(siteListItemSchema) },
1388
- analyticsCountries: { response: countriesResponseSchema },
1389
- analyticsSearchAppearance: { response: searchAppearanceResponseSchema },
1390
- analyticsSitemapHistory: { response: sitemapHistoryResponseSchema },
1391
- analyticsSitemaps: { response: sitemapIndexSchema },
1392
- analyticsInspectionHistory: { response: inspectionHistoryResponseSchema },
1393
- analyticsInspections: { response: inspectionIndexSchema },
1394
- analyticsRows: { response: gscRowQueryResponseSchema },
1395
- analyticsRollup: { response: rollupEnvelopeSchema },
1396
- analyticsBackfill: {
1397
- body: backfillRangeSchema,
1398
- response: backfillResponseSchema
1399
- },
1400
- analyticsIndexingUrls: { response: indexingUrlsResponseSchema },
1401
- analyticsIndexingDiagnostics: { response: indexingDiagnosticsSchema },
1402
- analyticsIndexingInspect: {
1403
- body: indexingInspectRequestSchema,
1404
- response: indexingInspectAnyResponseSchema
1405
- },
1406
- analyticsSitemapChanges: { response: sitemapChangesResponseSchema },
1407
- analyticsAnalysisSources: { response: gscdumpAnalysisSourcesResponseSchema },
1408
- analyticsSourceInfo: { response: sourceInfoResponseSchema },
1409
- registerUser: {
1410
- body: registerPartnerUserSchema,
1411
- response: gscdumpUserRegistrationSchema
1412
- },
1413
- updateUserTokens: {
1414
- body: updatePartnerUserTokensSchema,
1415
- response: z.object({
1416
- userId: z.string(),
1417
- updated: z.boolean(),
1418
- sites: z.array(gscdumpAvailableSiteSchema)
1419
- }).loose()
1420
- },
1421
- getUserStatus: { response: gscdumpUserStatusSchema },
1422
- getUserLifecycle: { response: partnerLifecycleResponseSchema },
1423
- getUserSites: { response: z.object({ sites: z.array(gscdumpUserSiteSchema) }).loose() },
1424
- getAvailableSites: { response: z.object({ sites: z.array(gscdumpAvailableSiteSchema) }).loose() },
1425
- registerSite: {
1426
- body: registerPartnerSiteSchema,
1427
- response: gscdumpSiteRegistrationSchema
1428
- },
1429
- bulkRegisterSites: {
1430
- body: bulkRegisterPartnerSitesSchema,
1431
- response: bulkRegisterPartnerSitesResponseSchema
1432
- },
1433
- deleteUser: { response: gscdumpDeletePartnerUserResponseSchema },
1434
- getAnalysisSources: { response: gscdumpAnalysisSourcesResponseSchema },
1435
- getData: {
1436
- state: builderStateSchema,
1437
- options: dataQueryOptionsSchema,
1438
- response: gscdumpDataResponseSchema
1439
- },
1440
- getDataDetail: {
1441
- state: builderStateSchema,
1442
- options: dataDetailOptionsSchema,
1443
- response: gscdumpDataDetailResponseSchema
1444
- },
1445
- getAnalysis: {
1446
- query: gscdumpAnalysisParamsSchema,
1447
- response: gscdumpAnalysisResponseSchema
1448
- },
1449
- getSitemaps: { response: gscdumpSitemapsResponseSchema },
1450
- getSitemapChanges: { response: gscdumpSitemapChangesResponseSchema },
1451
- getIndexing: { response: gscdumpIndexingResponseSchema },
1452
- getIndexingUrls: {
1453
- query: indexingUrlsParamsSchema,
1454
- response: gscdumpIndexingUrlsResponseSchema
1455
- },
1456
- getIndexingDiagnostics: { response: gscdumpIndexingDiagnosticsResponseSchema },
1457
- getIndexingInspect: {
1458
- body: indexingInspectRequestSchema,
1459
- response: indexingInspectAnyResponseSchema
1460
- },
1461
- getUserSettings: { response: gscdumpUserSettingsSchema },
1462
- patchUserSettings: {
1463
- body: gscdumpUserSettingsSchema.partial(),
1464
- response: gscdumpUserSettingsSchema
1465
- },
1466
- recoverPermission: { response: gscdumpPermissionRecoverySchema },
1467
- getTopAssociation: {
1468
- query: gscdumpTopAssociationParamsSchema,
1469
- response: gscdumpTopAssociationResponseSchema
1470
- },
1471
- getKeywordSparklines: {
1472
- body: gscdumpKeywordSparklinesParamsSchema,
1473
- response: gscdumpKeywordSparklinesResponseSchema
1474
- },
1475
- getQueryTrend: {
1476
- query: gscdumpQueryTrendParamsSchema,
1477
- response: gscdumpQueryTrendResponseSchema
1478
- },
1479
- getPageTrend: {
1480
- query: gscdumpPageTrendParamsSchema,
1481
- response: gscdumpPageTrendResponseSchema
1482
- },
1483
- getDateRangeInsight: {
1484
- query: gscdumpDateRangeParamsSchema,
1485
- response: unknownRecord
1486
- },
1487
- getCanonicalMismatches: { response: gscdumpCanonicalMismatchesResponseSchema },
1488
- getIndexPercent: {
1489
- query: gscdumpIndexPercentParamsSchema,
1490
- response: gscdumpIndexPercentResponseSchema
1491
- },
1492
- getSiteReport: { response: gscdumpSiteReportResponseSchema },
1493
- createTeam: {
1494
- body: createPartnerTeamSchema,
1495
- response: z.object({ team: gscdumpTeamRowSchema }).loose()
1496
- },
1497
- listTeamMembers: { response: z.object({ members: z.array(gscdumpTeamMemberRowSchema) }).loose() },
1498
- addTeamMember: {
1499
- body: addPartnerTeamMemberSchema,
1500
- response: unknownRecord
1501
- },
1502
- bindSiteToTeam: {
1503
- body: bindPartnerSiteTeamSchema,
1504
- response: z.object({
1505
- ok: z.literal(true),
1506
- teamId: z.string().nullable()
1507
- }).loose()
1508
- },
1509
- realtimeEvent: { message: partnerRealtimeEventSchema },
1510
- webhook: { message: partnerWebhookEnvelopeSchema }
1511
- };
1512
- export { CANONICAL_WEBHOOK_EVENTS, GSCDUMP_ONBOARDING_CONTRACT_VERSION, GSCDUMP_OPTIONAL_INDEXING_SCOPE, GSCDUMP_REQUIRED_ANALYTICS_SCOPE, GSCDUMP_WRITE_ANALYTICS_SCOPE, VALID_WEBHOOK_EVENTS, WEBHOOK_CONTRACT_VERSION, WEBHOOK_CONTRACT_VERSION_HEADER, WEBHOOK_DELIVERY_HEADER, WEBHOOK_EVENT_HEADER, WEBHOOK_SIGNATURE_HEADER, WEBHOOK_TIMESTAMP_HEADER, accountNextActions, accountStatuses, addPartnerTeamMemberSchema, analyticsNextActions, analyticsRoutes, analyticsStatuses, backfillRangeSchema, backfillResponseSchema, bindPartnerSiteTeamSchema, builderStateSchema, bulkRegisterPartnerSitesResponseSchema, bulkRegisterPartnerSitesSchema, canonicalWebhookEventTypeSchema, countriesResponseSchema, countryRowSchema, createPartnerTeamSchema, dataDetailOptionsSchema, dataQueryOptionsSchema, gscApiRangeSchema, gscComparisonFilterSchema, gscRowQueryMetaSchema, gscRowQueryResponseSchema, gscdumpAnalysisParamsSchema, gscdumpAnalysisPresetSchema, gscdumpAnalysisResponseSchema, gscdumpAnalysisSourcesResponseSchema, gscdumpAvailableSiteSchema, gscdumpCanonicalMismatchesResponseSchema, gscdumpDataDetailResponseSchema, gscdumpDataResponseSchema, gscdumpDataRowSchema, gscdumpDateRangeParamsSchema, gscdumpDeletePartnerUserResponseSchema, gscdumpHealthResponseSchema, gscdumpIndexPercentParamsSchema, gscdumpIndexPercentResponseSchema, gscdumpIndexingDiagnosticsResponseSchema, gscdumpIndexingResponseSchema, gscdumpIndexingUrlsResponseSchema, gscdumpKeywordSparklinesParamsSchema, gscdumpKeywordSparklinesResponseSchema, gscdumpMetaSchema, gscdumpPageTrendParamsSchema, gscdumpPageTrendResponseSchema, gscdumpPermissionRecoverySchema, gscdumpQueryTrendParamsSchema, gscdumpQueryTrendResponseSchema, gscdumpSiteRegistrationSchema, gscdumpSiteReportResponseSchema, gscdumpSitemapChangesResponseSchema, gscdumpSitemapsResponseSchema, gscdumpSyncJobsResponseSchema, gscdumpSyncProgressResponseSchema, gscdumpTeamMemberRowSchema, gscdumpTeamRoleSchema, gscdumpTeamRowSchema, gscdumpTopAssociationParamsSchema, gscdumpTopAssociationResponseSchema, gscdumpTotalsSchema, gscdumpUserMeResponseSchema, gscdumpUserRegistrationSchema, gscdumpUserSettingsSchema, gscdumpUserSiteSchema, gscdumpUserStatusSchema, hasOptionalIndexingScope, hasRequiredAnalyticsScope, indexingDiagnosticsSchema, indexingInspectAnyResponseSchema, indexingInspectRateLimitedSchema, indexingInspectRequestSchema, indexingInspectResponseSchema, indexingInspectResultSchema, indexingIssueSchema, indexingNextActions, indexingStatuses, indexingUrlRowSchema, indexingUrlStatusSchema, indexingUrlsParamsSchema, indexingUrlsResponseSchema, inspectionHistoryRecordSchema, inspectionHistoryResponseSchema, inspectionIndexSchema, inspectionRecordRawSchema, jobFailedWebhookPayloadSchema, lifecycleErrorCodes, lifecycleErrorSchema, lifecycleProgressSchema, lifecycleWebhookEvents, parseGrantedScopes, partnerEndpointSchemas, partnerLifecycleAccountSchema, partnerLifecycleResponseSchema, partnerLifecycleSiteSchema, partnerRealtimeEventSchema, partnerRoutes, partnerWebhookDataSchema, partnerWebhookEnvelopeSchema, propertyNextActions, propertyStatuses, querySourceModes, registerPartnerSiteSchema, registerPartnerUserSchema, rollupEnvelopeSchema, scheduleStateSchema, searchAppearanceResponseSchema, searchAppearanceRowSchema, searchTypeSchema, siteListItemSchema, sitemapChangesResponseSchema, sitemapHistoryRecordSchema, sitemapHistoryResponseSchema, sitemapIndexSchema, sitemapNextActions, sitemapStatuses, sourceInfoResponseSchema, updatePartnerUserTokensSchema, webhookEventTypeSchema, whoamiResponseSchema };
1
+ import { ARCHETYPE_EXECUTION_CLASS } from "./archetypes.mjs";
2
+ import { CANONICAL_WEBHOOK_EVENTS, GSCDUMP_ONBOARDING_CONTRACT_VERSION, GSCDUMP_OPTIONAL_INDEXING_SCOPE, GSCDUMP_REQUIRED_ANALYTICS_SCOPE, GSCDUMP_WRITE_ANALYTICS_SCOPE, VALID_WEBHOOK_EVENTS, WEBHOOK_CONTRACT_VERSION, WEBHOOK_CONTRACT_VERSION_HEADER, WEBHOOK_DELIVERY_HEADER, WEBHOOK_EVENT_HEADER, WEBHOOK_SIGNATURE_HEADER, WEBHOOK_TIMESTAMP_HEADER, accountNextActions, accountStatuses, addPartnerTeamMemberSchema, analyticsEndpointSchemas, analyticsNextActions, analyticsRoutes, analyticsStatuses, backfillRangeSchema, backfillResponseSchema, bindPartnerSiteTeamSchema, builderStateSchema, bulkRegisterPartnerSitesResponseSchema, bulkRegisterPartnerSitesSchema, canonicalWebhookEventTypeSchema, countriesResponseSchema, countryRowSchema, createPartnerTeamSchema, dataDetailOptionsSchema, dataQueryOptionsSchema, gscApiRangeSchema, gscComparisonFilterSchema, gscRowQueryMetaSchema, gscRowQueryResponseSchema, gscdumpAnalysisParamsSchema, gscdumpAnalysisPresetSchema, gscdumpAnalysisResponseSchema, gscdumpAnalysisSourcesResponseSchema, gscdumpAvailableSiteSchema, gscdumpCanonicalMismatchesResponseSchema, gscdumpDataDetailResponseSchema, gscdumpDataResponseSchema, gscdumpDataRowSchema, gscdumpDateRangeParamsSchema, gscdumpDeletePartnerUserResponseSchema, gscdumpHealthResponseSchema, gscdumpIndexPercentParamsSchema, gscdumpIndexPercentResponseSchema, gscdumpIndexingDiagnosticsResponseSchema, gscdumpIndexingResponseSchema, gscdumpIndexingUrlsResponseSchema, gscdumpKeywordSparklinesParamsSchema, gscdumpKeywordSparklinesResponseSchema, gscdumpMetaSchema, gscdumpPageTrendParamsSchema, gscdumpPageTrendResponseSchema, gscdumpPermissionRecoverySchema, gscdumpQueryTrendParamsSchema, gscdumpQueryTrendResponseSchema, gscdumpSiteRegistrationSchema, gscdumpSiteReportResponseSchema, gscdumpSitemapChangesResponseSchema, gscdumpSitemapsResponseSchema, gscdumpSyncJobsResponseSchema, gscdumpSyncProgressResponseSchema, gscdumpTeamMemberRowSchema, gscdumpTeamRoleSchema, gscdumpTeamRowSchema, gscdumpTopAssociationParamsSchema, gscdumpTopAssociationResponseSchema, gscdumpTotalsSchema, gscdumpUserMeResponseSchema, gscdumpUserRegistrationSchema, gscdumpUserSettingsSchema, gscdumpUserSiteSchema, gscdumpUserStatusSchema, hasOptionalIndexingScope, hasRequiredAnalyticsScope, indexingDiagnosticsSchema, indexingInspectAnyResponseSchema, indexingInspectRateLimitedSchema, indexingInspectRequestSchema, indexingInspectResponseSchema, indexingInspectResultSchema, indexingIssueSchema, indexingNextActions, indexingStatuses, indexingUrlRowSchema, indexingUrlStatusSchema, indexingUrlsParamsSchema, indexingUrlsResponseSchema, inspectionHistoryRecordSchema, inspectionHistoryResponseSchema, inspectionIndexSchema, inspectionRecordRawSchema, jobFailedWebhookPayloadSchema, lifecycleErrorCodes, lifecycleErrorSchema, lifecycleProgressSchema, lifecycleWebhookEvents, parseGrantedScopes, partnerControlEndpointSchemas, partnerEndpointSchemas, partnerLifecycleAccountSchema, partnerLifecycleResponseSchema, partnerLifecycleSiteSchema, partnerRealtimeEventSchema, partnerRoutes, partnerWebhookDataSchema, partnerWebhookEnvelopeSchema, propertyNextActions, propertyStatuses, querySourceModes, registerPartnerSiteSchema, registerPartnerUserSchema, rollupEnvelopeSchema, scheduleStateSchema, searchAppearanceResponseSchema, searchAppearanceRowSchema, searchTypeSchema, siteListItemSchema, sitemapChangesResponseSchema, sitemapHistoryRecordSchema, sitemapHistoryResponseSchema, sitemapIndexSchema, sitemapNextActions, sitemapStatuses, sourceInfoResponseSchema, updatePartnerUserTokensSchema, webhookEventTypeSchema, whoamiResponseSchema } from "./_chunks/schemas.mjs";
3
+ export { ARCHETYPE_EXECUTION_CLASS, CANONICAL_WEBHOOK_EVENTS, GSCDUMP_ONBOARDING_CONTRACT_VERSION, GSCDUMP_OPTIONAL_INDEXING_SCOPE, GSCDUMP_REQUIRED_ANALYTICS_SCOPE, GSCDUMP_WRITE_ANALYTICS_SCOPE, VALID_WEBHOOK_EVENTS, WEBHOOK_CONTRACT_VERSION, WEBHOOK_CONTRACT_VERSION_HEADER, WEBHOOK_DELIVERY_HEADER, WEBHOOK_EVENT_HEADER, WEBHOOK_SIGNATURE_HEADER, WEBHOOK_TIMESTAMP_HEADER, accountNextActions, accountStatuses, addPartnerTeamMemberSchema, analyticsEndpointSchemas, analyticsNextActions, analyticsRoutes, analyticsStatuses, backfillRangeSchema, backfillResponseSchema, bindPartnerSiteTeamSchema, builderStateSchema, bulkRegisterPartnerSitesResponseSchema, bulkRegisterPartnerSitesSchema, canonicalWebhookEventTypeSchema, countriesResponseSchema, countryRowSchema, createPartnerTeamSchema, dataDetailOptionsSchema, dataQueryOptionsSchema, gscApiRangeSchema, gscComparisonFilterSchema, gscRowQueryMetaSchema, gscRowQueryResponseSchema, gscdumpAnalysisParamsSchema, gscdumpAnalysisPresetSchema, gscdumpAnalysisResponseSchema, gscdumpAnalysisSourcesResponseSchema, gscdumpAvailableSiteSchema, gscdumpCanonicalMismatchesResponseSchema, gscdumpDataDetailResponseSchema, gscdumpDataResponseSchema, gscdumpDataRowSchema, gscdumpDateRangeParamsSchema, gscdumpDeletePartnerUserResponseSchema, gscdumpHealthResponseSchema, gscdumpIndexPercentParamsSchema, gscdumpIndexPercentResponseSchema, gscdumpIndexingDiagnosticsResponseSchema, gscdumpIndexingResponseSchema, gscdumpIndexingUrlsResponseSchema, gscdumpKeywordSparklinesParamsSchema, gscdumpKeywordSparklinesResponseSchema, gscdumpMetaSchema, gscdumpPageTrendParamsSchema, gscdumpPageTrendResponseSchema, gscdumpPermissionRecoverySchema, gscdumpQueryTrendParamsSchema, gscdumpQueryTrendResponseSchema, gscdumpSiteRegistrationSchema, gscdumpSiteReportResponseSchema, gscdumpSitemapChangesResponseSchema, gscdumpSitemapsResponseSchema, gscdumpSyncJobsResponseSchema, gscdumpSyncProgressResponseSchema, gscdumpTeamMemberRowSchema, gscdumpTeamRoleSchema, gscdumpTeamRowSchema, gscdumpTopAssociationParamsSchema, gscdumpTopAssociationResponseSchema, gscdumpTotalsSchema, gscdumpUserMeResponseSchema, gscdumpUserRegistrationSchema, gscdumpUserSettingsSchema, gscdumpUserSiteSchema, gscdumpUserStatusSchema, hasOptionalIndexingScope, hasRequiredAnalyticsScope, indexingDiagnosticsSchema, indexingInspectAnyResponseSchema, indexingInspectRateLimitedSchema, indexingInspectRequestSchema, indexingInspectResponseSchema, indexingInspectResultSchema, indexingIssueSchema, indexingNextActions, indexingStatuses, indexingUrlRowSchema, indexingUrlStatusSchema, indexingUrlsParamsSchema, indexingUrlsResponseSchema, inspectionHistoryRecordSchema, inspectionHistoryResponseSchema, inspectionIndexSchema, inspectionRecordRawSchema, jobFailedWebhookPayloadSchema, lifecycleErrorCodes, lifecycleErrorSchema, lifecycleProgressSchema, lifecycleWebhookEvents, parseGrantedScopes, partnerControlEndpointSchemas, partnerEndpointSchemas, partnerLifecycleAccountSchema, partnerLifecycleResponseSchema, partnerLifecycleSiteSchema, partnerRealtimeEventSchema, partnerRoutes, partnerWebhookDataSchema, partnerWebhookEnvelopeSchema, propertyNextActions, propertyStatuses, querySourceModes, registerPartnerSiteSchema, registerPartnerUserSchema, rollupEnvelopeSchema, scheduleStateSchema, searchAppearanceResponseSchema, searchAppearanceRowSchema, searchTypeSchema, siteListItemSchema, sitemapChangesResponseSchema, sitemapHistoryRecordSchema, sitemapHistoryResponseSchema, sitemapIndexSchema, sitemapNextActions, sitemapStatuses, sourceInfoResponseSchema, updatePartnerUserTokensSchema, webhookEventTypeSchema, whoamiResponseSchema };