gscdump 0.17.0 → 0.17.2

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
@@ -50,6 +50,18 @@ async function batchRequestIndexing(client, urls, options = {}) {
50
50
  onProgress
51
51
  });
52
52
  }
53
+ function hasGscReadScope(scopes) {
54
+ if (!scopes) return false;
55
+ return scopes.includes("webmasters.readonly") || scopes.includes("webmasters");
56
+ }
57
+ function hasGscWriteScope(scopes) {
58
+ if (!scopes) return false;
59
+ return scopes.includes("webmasters") && !scopes.includes("webmasters.readonly");
60
+ }
61
+ function hasIndexingScope(scopes) {
62
+ if (!scopes) return false;
63
+ return scopes.includes("googleapis.com/auth/indexing");
64
+ }
53
65
  async function inspectUrl(client, siteUrl, inspectionUrl) {
54
66
  const inspection = (await client.inspect(siteUrl, inspectionUrl)).inspectionResult;
55
67
  return {
@@ -72,6 +84,328 @@ async function batchInspectUrls(client, siteUrl, urls, options = {}) {
72
84
  onProgress
73
85
  });
74
86
  }
87
+ async function inspectUrlFlat(client, siteUrl, inspectionUrl) {
88
+ const inspection = (await client.inspect(siteUrl, inspectionUrl)).inspectionResult;
89
+ const index = inspection?.indexStatusResult;
90
+ const mobile = inspection?.mobileUsabilityResult;
91
+ const rich = inspection?.richResultsResult;
92
+ return {
93
+ url: inspectionUrl,
94
+ verdict: index?.verdict ?? null,
95
+ coverageState: index?.coverageState ?? null,
96
+ indexingState: index?.indexingState ?? null,
97
+ robotsTxtState: index?.robotsTxtState ?? null,
98
+ pageFetchState: index?.pageFetchState ?? null,
99
+ lastCrawlTime: index?.lastCrawlTime ?? null,
100
+ crawlingUserAgent: index?.crawledAs ?? null,
101
+ userCanonical: index?.userCanonical ?? null,
102
+ googleCanonical: index?.googleCanonical ?? null,
103
+ sitemaps: index?.sitemap?.length ? JSON.stringify(index.sitemap) : null,
104
+ referringUrls: index?.referringUrls?.length ? JSON.stringify(index.referringUrls) : null,
105
+ mobileVerdict: mobile?.verdict ?? null,
106
+ mobileIssues: mobile?.issues?.length ? JSON.stringify(mobile.issues) : null,
107
+ richResultsVerdict: rich?.verdict ?? null,
108
+ richResultsItems: rich?.detectedItems?.length ? JSON.stringify(rich.detectedItems) : null,
109
+ inspectionResultLink: inspection?.inspectionResultLink ?? null
110
+ };
111
+ }
112
+ function getNextCheckPriority(result) {
113
+ if (!result.verdict || result.verdict === "VERDICT_UNSPECIFIED") return "medium";
114
+ if (result.verdict === "FAIL" || result.verdict === "PARTIAL" || result.verdict === "NEUTRAL") return "high";
115
+ if (result.verdict === "PASS") return "low";
116
+ return "medium";
117
+ }
118
+ function getNextCheckAfter(priority) {
119
+ const now = Math.floor(Date.now() / 1e3);
120
+ switch (priority) {
121
+ case "high": return now + 7 * 86400;
122
+ case "medium": return now + 14 * 86400;
123
+ case "low": return now + 30 * 86400;
124
+ }
125
+ }
126
+ const INSPECTION_ALLOWED_PERMISSIONS = new Set(["siteOwner", "siteFullUser"]);
127
+ function canUseUrlInspection(permissionLevel) {
128
+ return !!permissionLevel && INSPECTION_ALLOWED_PERMISSIONS.has(permissionLevel);
129
+ }
130
+ function grantedScopeList(scopes) {
131
+ return scopes?.split(/\s+/).map((s) => s.trim()).filter(Boolean) ?? [];
132
+ }
133
+ function getIndexingEligibility(grantedScopes, permissionLevel) {
134
+ const scopes = grantedScopeList(grantedScopes);
135
+ if (!hasIndexingScope(grantedScopes)) return {
136
+ indexingEligible: false,
137
+ indexingIneligibleReason: "missing_indexing_scope",
138
+ indexingPermissionLevel: permissionLevel ?? null,
139
+ grantedScopes: scopes
140
+ };
141
+ if (!canUseUrlInspection(permissionLevel)) return {
142
+ indexingEligible: false,
143
+ indexingIneligibleReason: "insufficient_gsc_permission",
144
+ indexingPermissionLevel: permissionLevel ?? null,
145
+ grantedScopes: scopes
146
+ };
147
+ return {
148
+ indexingEligible: true,
149
+ indexingPermissionLevel: permissionLevel ?? null,
150
+ grantedScopes: scopes
151
+ };
152
+ }
153
+ const GSC_QUOTAS = {
154
+ searchAnalytics: 25e3,
155
+ urlInspection: 2e3,
156
+ indexing: 200
157
+ };
158
+ function pickField(error, paths, is) {
159
+ if (!error || typeof error !== "object") return void 0;
160
+ for (const path of paths) {
161
+ let current = error;
162
+ for (const key of path) {
163
+ if (!current || typeof current !== "object") {
164
+ current = void 0;
165
+ break;
166
+ }
167
+ current = current[key];
168
+ }
169
+ if (is(current)) return current;
170
+ }
171
+ }
172
+ const isNumber = (v) => typeof v === "number";
173
+ const isString = (v) => typeof v === "string";
174
+ function extractStatus(error) {
175
+ return pickField(error, [
176
+ ["statusCode"],
177
+ ["status"],
178
+ ["response", "status"],
179
+ ["code"]
180
+ ], isNumber);
181
+ }
182
+ function extractMessage(error) {
183
+ if (!error) return "Unknown error";
184
+ if (typeof error === "string") return error;
185
+ if (error instanceof Error) return error.message;
186
+ if (typeof error !== "object") return String(error);
187
+ return pickField(error, [
188
+ [
189
+ "data",
190
+ "error",
191
+ "message"
192
+ ],
193
+ ["message"],
194
+ ["statusMessage"]
195
+ ], isString) ?? String(error);
196
+ }
197
+ function extractRetryAfter(error) {
198
+ const raw = pickField(error, [
199
+ ["headers", "retry-after"],
200
+ ["headers", "Retry-After"],
201
+ [
202
+ "response",
203
+ "headers",
204
+ "retry-after"
205
+ ],
206
+ [
207
+ "response",
208
+ "headers",
209
+ "Retry-After"
210
+ ]
211
+ ], (v) => typeof v === "number" || typeof v === "string");
212
+ if (typeof raw === "number") return raw;
213
+ if (typeof raw === "string") {
214
+ const seconds = Number.parseInt(raw, 10);
215
+ return Number.isNaN(seconds) ? void 0 : seconds;
216
+ }
217
+ }
218
+ const QUOTA_MESSAGE_RE = /quota|rate\s*limit/i;
219
+ function classifyError(cause) {
220
+ const status = extractStatus(cause);
221
+ const message = extractMessage(cause);
222
+ if (status === 401) return {
223
+ kind: "auth-expired",
224
+ message,
225
+ cause
226
+ };
227
+ if (status === 429) return {
228
+ kind: "rate-limited",
229
+ message,
230
+ retryAfter: extractRetryAfter(cause),
231
+ cause
232
+ };
233
+ if (status === 403) {
234
+ if (QUOTA_MESSAGE_RE.test(message)) return {
235
+ kind: "rate-limited",
236
+ message,
237
+ retryAfter: extractRetryAfter(cause),
238
+ cause
239
+ };
240
+ return {
241
+ kind: "auth-expired",
242
+ message,
243
+ cause
244
+ };
245
+ }
246
+ if (status === 404) return {
247
+ kind: "not-found",
248
+ message,
249
+ cause
250
+ };
251
+ if (status === 400 || status === 422) return {
252
+ kind: "validation",
253
+ message,
254
+ cause
255
+ };
256
+ return {
257
+ kind: "transport",
258
+ message,
259
+ status,
260
+ cause
261
+ };
262
+ }
263
+ function storageError(message, cause) {
264
+ return {
265
+ kind: "storage",
266
+ message,
267
+ cause
268
+ };
269
+ }
270
+ function parseGoogleError(text, httpStatus) {
271
+ let parsed = null;
272
+ try {
273
+ parsed = JSON.parse(text);
274
+ } catch {}
275
+ if (!parsed || !("error" in parsed)) return {
276
+ code: httpStatus ?? 500,
277
+ message: text || "Unknown Google API error"
278
+ };
279
+ if (typeof parsed.error === "string") {
280
+ const oauth = parsed;
281
+ return {
282
+ code: httpStatus ?? 400,
283
+ message: oauth.error_description || oauth.error,
284
+ reason: oauth.error
285
+ };
286
+ }
287
+ const err = parsed.error;
288
+ const errorInfo = err.details?.find((d) => d["@type"]?.includes("ErrorInfo"));
289
+ return {
290
+ code: err.code ?? httpStatus ?? 500,
291
+ message: err.message || err.status || text || `HTTP ${httpStatus ?? "?"}`,
292
+ reason: errorInfo?.reason,
293
+ status: err.status
294
+ };
295
+ }
296
+ var GscApiError = class extends Error {
297
+ info;
298
+ constructor(message, info) {
299
+ super(message);
300
+ this.info = info;
301
+ this.name = "GscApiError";
302
+ }
303
+ };
304
+ function rethrowAsGscApiError(prefix) {
305
+ return (err) => {
306
+ if (err instanceof GscApiError) throw err;
307
+ const maybe = err;
308
+ if (maybe && maybe.name === "FetchError") {
309
+ const info = parseGoogleError(typeof maybe.data === "string" ? maybe.data : JSON.stringify(maybe.data ?? {}), maybe.statusCode);
310
+ throw new GscApiError(`${prefix}: ${info.message}`, info);
311
+ }
312
+ throw err;
313
+ };
314
+ }
315
+ const PERMISSION_SIGNALS = [
316
+ "403 forbidden",
317
+ "permission_denied",
318
+ "does not have sufficient permission",
319
+ "insufficient permission"
320
+ ];
321
+ function isPermissionDeniedError(err) {
322
+ const msg = String(err?.message ?? err ?? "").toLowerCase();
323
+ return PERMISSION_SIGNALS.some((s) => msg.includes(s));
324
+ }
325
+ function suggestionFor(err) {
326
+ switch (err.kind) {
327
+ case "auth-expired": return "Run `gscdump auth` to re-authenticate.";
328
+ case "rate-limited": {
329
+ const retryIn = err.retryAfter ? `${err.retryAfter}s` : "a few minutes";
330
+ if (QUOTA_MESSAGE_RE.test(err.message)) {
331
+ if (err.message.includes("Indexing API")) return `Indexing API quota exhausted (~${GSC_QUOTAS.indexing}/day). Try again tomorrow.`;
332
+ return `Quota or rate limit hit (Search Analytics ~${GSC_QUOTAS.searchAnalytics}/day). Try again in ${retryIn}.`;
333
+ }
334
+ return `Rate limited. Slow down requests. Try again in ${retryIn}.`;
335
+ }
336
+ case "not-found":
337
+ case "validation":
338
+ case "storage":
339
+ case "transport": return "";
340
+ }
341
+ }
342
+ function formatErrorForCli(cause) {
343
+ const err = classifyError(cause);
344
+ const lines = [`\x1B[31m${err.message}\x1B[0m`];
345
+ const suggestion = suggestionFor(err);
346
+ if (suggestion) {
347
+ lines.push("");
348
+ lines.push(suggestion);
349
+ }
350
+ return lines.join("\n");
351
+ }
352
+ const OAUTH_TOKEN_URL = "https://oauth2.googleapis.com/token";
353
+ const OAUTH_TIMEOUT_MS = 8e3;
354
+ const OAUTH_MAX_ATTEMPTS = 3;
355
+ const OAUTH_BACKOFF_MS = [
356
+ 0,
357
+ 400,
358
+ 1500
359
+ ];
360
+ async function refreshAccessToken(refreshToken, clientId, clientSecret) {
361
+ return postOAuthToken(new URLSearchParams({
362
+ client_id: clientId,
363
+ client_secret: clientSecret,
364
+ refresh_token: refreshToken,
365
+ grant_type: "refresh_token"
366
+ }), "refresh");
367
+ }
368
+ async function exchangeAuthCode(code, clientId, clientSecret, redirectUri) {
369
+ const tokens = await postOAuthToken(new URLSearchParams({
370
+ client_id: clientId,
371
+ client_secret: clientSecret,
372
+ code,
373
+ redirect_uri: redirectUri,
374
+ grant_type: "authorization_code"
375
+ }), "exchange");
376
+ const refreshToken = tokens.refresh_token;
377
+ return {
378
+ ...tokens,
379
+ refreshToken
380
+ };
381
+ }
382
+ async function postOAuthToken(body, op) {
383
+ let lastError;
384
+ for (let attempt = 0; attempt < OAUTH_MAX_ATTEMPTS; attempt++) {
385
+ if (OAUTH_BACKOFF_MS[attempt]) await new Promise((r) => setTimeout(r, OAUTH_BACKOFF_MS[attempt]));
386
+ const res = await fetch(OAUTH_TOKEN_URL, {
387
+ method: "POST",
388
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
389
+ body,
390
+ signal: AbortSignal.timeout(OAUTH_TIMEOUT_MS)
391
+ }).catch((err) => {
392
+ lastError = err;
393
+ return null;
394
+ });
395
+ if (!res) continue;
396
+ if (!res.ok) {
397
+ const info = parseGoogleError(await res.text(), res.status);
398
+ throw new GscApiError(`Failed to ${op} token: ${info.message}`, info);
399
+ }
400
+ const data = await res.json();
401
+ return {
402
+ accessToken: data.access_token,
403
+ expiresAt: Math.floor(Date.now() / 1e3) + data.expires_in,
404
+ refresh_token: data.refresh_token
405
+ };
406
+ }
407
+ throw lastError instanceof Error ? lastError : /* @__PURE__ */ new Error(`OAuth ${op} failed after ${OAUTH_MAX_ATTEMPTS} attempts`);
408
+ }
75
409
  async function fetchSites(client) {
76
410
  return client.sites();
77
411
  }
@@ -253,6 +587,1511 @@ function getBackfillProgress(oldestDateSynced, newestDateSynced) {
253
587
  isComplete: oldestDateSynced <= oldestGsc
254
588
  };
255
589
  }
590
+ var countries_default = [
591
+ {
592
+ "name": "Afghanistan",
593
+ "alpha-2": "AF",
594
+ "alpha-3": "AFG",
595
+ "country-code": "004"
596
+ },
597
+ {
598
+ "name": "Åland Islands",
599
+ "alpha-2": "AX",
600
+ "alpha-3": "ALA",
601
+ "country-code": "248"
602
+ },
603
+ {
604
+ "name": "Albania",
605
+ "alpha-2": "AL",
606
+ "alpha-3": "ALB",
607
+ "country-code": "008"
608
+ },
609
+ {
610
+ "name": "Algeria",
611
+ "alpha-2": "DZ",
612
+ "alpha-3": "DZA",
613
+ "country-code": "012"
614
+ },
615
+ {
616
+ "name": "American Samoa",
617
+ "alpha-2": "AS",
618
+ "alpha-3": "ASM",
619
+ "country-code": "016"
620
+ },
621
+ {
622
+ "name": "Andorra",
623
+ "alpha-2": "AD",
624
+ "alpha-3": "AND",
625
+ "country-code": "020"
626
+ },
627
+ {
628
+ "name": "Angola",
629
+ "alpha-2": "AO",
630
+ "alpha-3": "AGO",
631
+ "country-code": "024"
632
+ },
633
+ {
634
+ "name": "Anguilla",
635
+ "alpha-2": "AI",
636
+ "alpha-3": "AIA",
637
+ "country-code": "660"
638
+ },
639
+ {
640
+ "name": "Antarctica",
641
+ "alpha-2": "AQ",
642
+ "alpha-3": "ATA",
643
+ "country-code": "010"
644
+ },
645
+ {
646
+ "name": "Antigua and Barbuda",
647
+ "alpha-2": "AG",
648
+ "alpha-3": "ATG",
649
+ "country-code": "028"
650
+ },
651
+ {
652
+ "name": "Argentina",
653
+ "alpha-2": "AR",
654
+ "alpha-3": "ARG",
655
+ "country-code": "032"
656
+ },
657
+ {
658
+ "name": "Armenia",
659
+ "alpha-2": "AM",
660
+ "alpha-3": "ARM",
661
+ "country-code": "051"
662
+ },
663
+ {
664
+ "name": "Aruba",
665
+ "alpha-2": "AW",
666
+ "alpha-3": "ABW",
667
+ "country-code": "533"
668
+ },
669
+ {
670
+ "name": "Australia",
671
+ "alpha-2": "AU",
672
+ "alpha-3": "AUS",
673
+ "country-code": "036"
674
+ },
675
+ {
676
+ "name": "Austria",
677
+ "alpha-2": "AT",
678
+ "alpha-3": "AUT",
679
+ "country-code": "040"
680
+ },
681
+ {
682
+ "name": "Azerbaijan",
683
+ "alpha-2": "AZ",
684
+ "alpha-3": "AZE",
685
+ "country-code": "031"
686
+ },
687
+ {
688
+ "name": "Bahamas",
689
+ "alpha-2": "BS",
690
+ "alpha-3": "BHS",
691
+ "country-code": "044"
692
+ },
693
+ {
694
+ "name": "Bahrain",
695
+ "alpha-2": "BH",
696
+ "alpha-3": "BHR",
697
+ "country-code": "048"
698
+ },
699
+ {
700
+ "name": "Bangladesh",
701
+ "alpha-2": "BD",
702
+ "alpha-3": "BGD",
703
+ "country-code": "050"
704
+ },
705
+ {
706
+ "name": "Barbados",
707
+ "alpha-2": "BB",
708
+ "alpha-3": "BRB",
709
+ "country-code": "052"
710
+ },
711
+ {
712
+ "name": "Belarus",
713
+ "alpha-2": "BY",
714
+ "alpha-3": "BLR",
715
+ "country-code": "112"
716
+ },
717
+ {
718
+ "name": "Belgium",
719
+ "alpha-2": "BE",
720
+ "alpha-3": "BEL",
721
+ "country-code": "056"
722
+ },
723
+ {
724
+ "name": "Belize",
725
+ "alpha-2": "BZ",
726
+ "alpha-3": "BLZ",
727
+ "country-code": "084"
728
+ },
729
+ {
730
+ "name": "Benin",
731
+ "alpha-2": "BJ",
732
+ "alpha-3": "BEN",
733
+ "country-code": "204"
734
+ },
735
+ {
736
+ "name": "Bermuda",
737
+ "alpha-2": "BM",
738
+ "alpha-3": "BMU",
739
+ "country-code": "060"
740
+ },
741
+ {
742
+ "name": "Bhutan",
743
+ "alpha-2": "BT",
744
+ "alpha-3": "BTN",
745
+ "country-code": "064"
746
+ },
747
+ {
748
+ "name": "Bolivia (Plurinational State of)",
749
+ "alpha-2": "BO",
750
+ "alpha-3": "BOL",
751
+ "country-code": "068"
752
+ },
753
+ {
754
+ "name": "Bonaire, Sint Eustatius and Saba",
755
+ "alpha-2": "BQ",
756
+ "alpha-3": "BES",
757
+ "country-code": "535"
758
+ },
759
+ {
760
+ "name": "Bosnia and Herzegovina",
761
+ "alpha-2": "BA",
762
+ "alpha-3": "BIH",
763
+ "country-code": "070"
764
+ },
765
+ {
766
+ "name": "Botswana",
767
+ "alpha-2": "BW",
768
+ "alpha-3": "BWA",
769
+ "country-code": "072"
770
+ },
771
+ {
772
+ "name": "Bouvet Island",
773
+ "alpha-2": "BV",
774
+ "alpha-3": "BVT",
775
+ "country-code": "074"
776
+ },
777
+ {
778
+ "name": "Brazil",
779
+ "alpha-2": "BR",
780
+ "alpha-3": "BRA",
781
+ "country-code": "076"
782
+ },
783
+ {
784
+ "name": "British Indian Ocean Territory",
785
+ "alpha-2": "IO",
786
+ "alpha-3": "IOT",
787
+ "country-code": "086"
788
+ },
789
+ {
790
+ "name": "Brunei Darussalam",
791
+ "alpha-2": "BN",
792
+ "alpha-3": "BRN",
793
+ "country-code": "096"
794
+ },
795
+ {
796
+ "name": "Bulgaria",
797
+ "alpha-2": "BG",
798
+ "alpha-3": "BGR",
799
+ "country-code": "100"
800
+ },
801
+ {
802
+ "name": "Burkina Faso",
803
+ "alpha-2": "BF",
804
+ "alpha-3": "BFA",
805
+ "country-code": "854"
806
+ },
807
+ {
808
+ "name": "Burundi",
809
+ "alpha-2": "BI",
810
+ "alpha-3": "BDI",
811
+ "country-code": "108"
812
+ },
813
+ {
814
+ "name": "Cabo Verde",
815
+ "alpha-2": "CV",
816
+ "alpha-3": "CPV",
817
+ "country-code": "132"
818
+ },
819
+ {
820
+ "name": "Cambodia",
821
+ "alpha-2": "KH",
822
+ "alpha-3": "KHM",
823
+ "country-code": "116"
824
+ },
825
+ {
826
+ "name": "Cameroon",
827
+ "alpha-2": "CM",
828
+ "alpha-3": "CMR",
829
+ "country-code": "120"
830
+ },
831
+ {
832
+ "name": "Canada",
833
+ "alpha-2": "CA",
834
+ "alpha-3": "CAN",
835
+ "country-code": "124"
836
+ },
837
+ {
838
+ "name": "Cayman Islands",
839
+ "alpha-2": "KY",
840
+ "alpha-3": "CYM",
841
+ "country-code": "136"
842
+ },
843
+ {
844
+ "name": "Central African Republic",
845
+ "alpha-2": "CF",
846
+ "alpha-3": "CAF",
847
+ "country-code": "140"
848
+ },
849
+ {
850
+ "name": "Chad",
851
+ "alpha-2": "TD",
852
+ "alpha-3": "TCD",
853
+ "country-code": "148"
854
+ },
855
+ {
856
+ "name": "Chile",
857
+ "alpha-2": "CL",
858
+ "alpha-3": "CHL",
859
+ "country-code": "152"
860
+ },
861
+ {
862
+ "name": "China",
863
+ "alpha-2": "CN",
864
+ "alpha-3": "CHN",
865
+ "country-code": "156"
866
+ },
867
+ {
868
+ "name": "Christmas Island",
869
+ "alpha-2": "CX",
870
+ "alpha-3": "CXR",
871
+ "country-code": "162"
872
+ },
873
+ {
874
+ "name": "Cocos (Keeling) Islands",
875
+ "alpha-2": "CC",
876
+ "alpha-3": "CCK",
877
+ "country-code": "166"
878
+ },
879
+ {
880
+ "name": "Colombia",
881
+ "alpha-2": "CO",
882
+ "alpha-3": "COL",
883
+ "country-code": "170"
884
+ },
885
+ {
886
+ "name": "Comoros",
887
+ "alpha-2": "KM",
888
+ "alpha-3": "COM",
889
+ "country-code": "174"
890
+ },
891
+ {
892
+ "name": "Congo",
893
+ "alpha-2": "CG",
894
+ "alpha-3": "COG",
895
+ "country-code": "178"
896
+ },
897
+ {
898
+ "name": "Congo, Democratic Republic of the",
899
+ "alpha-2": "CD",
900
+ "alpha-3": "COD",
901
+ "country-code": "180"
902
+ },
903
+ {
904
+ "name": "Cook Islands",
905
+ "alpha-2": "CK",
906
+ "alpha-3": "COK",
907
+ "country-code": "184"
908
+ },
909
+ {
910
+ "name": "Costa Rica",
911
+ "alpha-2": "CR",
912
+ "alpha-3": "CRI",
913
+ "country-code": "188"
914
+ },
915
+ {
916
+ "name": "Côte d'Ivoire",
917
+ "alpha-2": "CI",
918
+ "alpha-3": "CIV",
919
+ "country-code": "384"
920
+ },
921
+ {
922
+ "name": "Croatia",
923
+ "alpha-2": "HR",
924
+ "alpha-3": "HRV",
925
+ "country-code": "191"
926
+ },
927
+ {
928
+ "name": "Cuba",
929
+ "alpha-2": "CU",
930
+ "alpha-3": "CUB",
931
+ "country-code": "192"
932
+ },
933
+ {
934
+ "name": "Curaçao",
935
+ "alpha-2": "CW",
936
+ "alpha-3": "CUW",
937
+ "country-code": "531"
938
+ },
939
+ {
940
+ "name": "Cyprus",
941
+ "alpha-2": "CY",
942
+ "alpha-3": "CYP",
943
+ "country-code": "196"
944
+ },
945
+ {
946
+ "name": "Czechia",
947
+ "alpha-2": "CZ",
948
+ "alpha-3": "CZE",
949
+ "country-code": "203"
950
+ },
951
+ {
952
+ "name": "Denmark",
953
+ "alpha-2": "DK",
954
+ "alpha-3": "DNK",
955
+ "country-code": "208"
956
+ },
957
+ {
958
+ "name": "Djibouti",
959
+ "alpha-2": "DJ",
960
+ "alpha-3": "DJI",
961
+ "country-code": "262"
962
+ },
963
+ {
964
+ "name": "Dominica",
965
+ "alpha-2": "DM",
966
+ "alpha-3": "DMA",
967
+ "country-code": "212"
968
+ },
969
+ {
970
+ "name": "Dominican Republic",
971
+ "alpha-2": "DO",
972
+ "alpha-3": "DOM",
973
+ "country-code": "214"
974
+ },
975
+ {
976
+ "name": "Ecuador",
977
+ "alpha-2": "EC",
978
+ "alpha-3": "ECU",
979
+ "country-code": "218"
980
+ },
981
+ {
982
+ "name": "Egypt",
983
+ "alpha-2": "EG",
984
+ "alpha-3": "EGY",
985
+ "country-code": "818"
986
+ },
987
+ {
988
+ "name": "El Salvador",
989
+ "alpha-2": "SV",
990
+ "alpha-3": "SLV",
991
+ "country-code": "222"
992
+ },
993
+ {
994
+ "name": "Equatorial Guinea",
995
+ "alpha-2": "GQ",
996
+ "alpha-3": "GNQ",
997
+ "country-code": "226"
998
+ },
999
+ {
1000
+ "name": "Eritrea",
1001
+ "alpha-2": "ER",
1002
+ "alpha-3": "ERI",
1003
+ "country-code": "232"
1004
+ },
1005
+ {
1006
+ "name": "Estonia",
1007
+ "alpha-2": "EE",
1008
+ "alpha-3": "EST",
1009
+ "country-code": "233"
1010
+ },
1011
+ {
1012
+ "name": "Eswatini",
1013
+ "alpha-2": "SZ",
1014
+ "alpha-3": "SWZ",
1015
+ "country-code": "748"
1016
+ },
1017
+ {
1018
+ "name": "Ethiopia",
1019
+ "alpha-2": "ET",
1020
+ "alpha-3": "ETH",
1021
+ "country-code": "231"
1022
+ },
1023
+ {
1024
+ "name": "Falkland Islands (Malvinas)",
1025
+ "alpha-2": "FK",
1026
+ "alpha-3": "FLK",
1027
+ "country-code": "238"
1028
+ },
1029
+ {
1030
+ "name": "Faroe Islands",
1031
+ "alpha-2": "FO",
1032
+ "alpha-3": "FRO",
1033
+ "country-code": "234"
1034
+ },
1035
+ {
1036
+ "name": "Fiji",
1037
+ "alpha-2": "FJ",
1038
+ "alpha-3": "FJI",
1039
+ "country-code": "242"
1040
+ },
1041
+ {
1042
+ "name": "Finland",
1043
+ "alpha-2": "FI",
1044
+ "alpha-3": "FIN",
1045
+ "country-code": "246"
1046
+ },
1047
+ {
1048
+ "name": "France",
1049
+ "alpha-2": "FR",
1050
+ "alpha-3": "FRA",
1051
+ "country-code": "250"
1052
+ },
1053
+ {
1054
+ "name": "French Guiana",
1055
+ "alpha-2": "GF",
1056
+ "alpha-3": "GUF",
1057
+ "country-code": "254"
1058
+ },
1059
+ {
1060
+ "name": "French Polynesia",
1061
+ "alpha-2": "PF",
1062
+ "alpha-3": "PYF",
1063
+ "country-code": "258"
1064
+ },
1065
+ {
1066
+ "name": "French Southern Territories",
1067
+ "alpha-2": "TF",
1068
+ "alpha-3": "ATF",
1069
+ "country-code": "260"
1070
+ },
1071
+ {
1072
+ "name": "Gabon",
1073
+ "alpha-2": "GA",
1074
+ "alpha-3": "GAB",
1075
+ "country-code": "266"
1076
+ },
1077
+ {
1078
+ "name": "Gambia",
1079
+ "alpha-2": "GM",
1080
+ "alpha-3": "GMB",
1081
+ "country-code": "270"
1082
+ },
1083
+ {
1084
+ "name": "Georgia",
1085
+ "alpha-2": "GE",
1086
+ "alpha-3": "GEO",
1087
+ "country-code": "268"
1088
+ },
1089
+ {
1090
+ "name": "Germany",
1091
+ "alpha-2": "DE",
1092
+ "alpha-3": "DEU",
1093
+ "country-code": "276"
1094
+ },
1095
+ {
1096
+ "name": "Ghana",
1097
+ "alpha-2": "GH",
1098
+ "alpha-3": "GHA",
1099
+ "country-code": "288"
1100
+ },
1101
+ {
1102
+ "name": "Gibraltar",
1103
+ "alpha-2": "GI",
1104
+ "alpha-3": "GIB",
1105
+ "country-code": "292"
1106
+ },
1107
+ {
1108
+ "name": "Greece",
1109
+ "alpha-2": "GR",
1110
+ "alpha-3": "GRC",
1111
+ "country-code": "300"
1112
+ },
1113
+ {
1114
+ "name": "Greenland",
1115
+ "alpha-2": "GL",
1116
+ "alpha-3": "GRL",
1117
+ "country-code": "304"
1118
+ },
1119
+ {
1120
+ "name": "Grenada",
1121
+ "alpha-2": "GD",
1122
+ "alpha-3": "GRD",
1123
+ "country-code": "308"
1124
+ },
1125
+ {
1126
+ "name": "Guadeloupe",
1127
+ "alpha-2": "GP",
1128
+ "alpha-3": "GLP",
1129
+ "country-code": "312"
1130
+ },
1131
+ {
1132
+ "name": "Guam",
1133
+ "alpha-2": "GU",
1134
+ "alpha-3": "GUM",
1135
+ "country-code": "316"
1136
+ },
1137
+ {
1138
+ "name": "Guatemala",
1139
+ "alpha-2": "GT",
1140
+ "alpha-3": "GTM",
1141
+ "country-code": "320"
1142
+ },
1143
+ {
1144
+ "name": "Guernsey",
1145
+ "alpha-2": "GG",
1146
+ "alpha-3": "GGY",
1147
+ "country-code": "831"
1148
+ },
1149
+ {
1150
+ "name": "Guinea",
1151
+ "alpha-2": "GN",
1152
+ "alpha-3": "GIN",
1153
+ "country-code": "324"
1154
+ },
1155
+ {
1156
+ "name": "Guinea-Bissau",
1157
+ "alpha-2": "GW",
1158
+ "alpha-3": "GNB",
1159
+ "country-code": "624"
1160
+ },
1161
+ {
1162
+ "name": "Guyana",
1163
+ "alpha-2": "GY",
1164
+ "alpha-3": "GUY",
1165
+ "country-code": "328"
1166
+ },
1167
+ {
1168
+ "name": "Haiti",
1169
+ "alpha-2": "HT",
1170
+ "alpha-3": "HTI",
1171
+ "country-code": "332"
1172
+ },
1173
+ {
1174
+ "name": "Heard Island and McDonald Islands",
1175
+ "alpha-2": "HM",
1176
+ "alpha-3": "HMD",
1177
+ "country-code": "334"
1178
+ },
1179
+ {
1180
+ "name": "Holy See",
1181
+ "alpha-2": "VA",
1182
+ "alpha-3": "VAT",
1183
+ "country-code": "336"
1184
+ },
1185
+ {
1186
+ "name": "Honduras",
1187
+ "alpha-2": "HN",
1188
+ "alpha-3": "HND",
1189
+ "country-code": "340"
1190
+ },
1191
+ {
1192
+ "name": "Hong Kong",
1193
+ "alpha-2": "HK",
1194
+ "alpha-3": "HKG",
1195
+ "country-code": "344"
1196
+ },
1197
+ {
1198
+ "name": "Hungary",
1199
+ "alpha-2": "HU",
1200
+ "alpha-3": "HUN",
1201
+ "country-code": "348"
1202
+ },
1203
+ {
1204
+ "name": "Iceland",
1205
+ "alpha-2": "IS",
1206
+ "alpha-3": "ISL",
1207
+ "country-code": "352"
1208
+ },
1209
+ {
1210
+ "name": "India",
1211
+ "alpha-2": "IN",
1212
+ "alpha-3": "IND",
1213
+ "country-code": "356"
1214
+ },
1215
+ {
1216
+ "name": "Indonesia",
1217
+ "alpha-2": "ID",
1218
+ "alpha-3": "IDN",
1219
+ "country-code": "360"
1220
+ },
1221
+ {
1222
+ "name": "Iran (Islamic Republic of)",
1223
+ "alpha-2": "IR",
1224
+ "alpha-3": "IRN",
1225
+ "country-code": "364"
1226
+ },
1227
+ {
1228
+ "name": "Iraq",
1229
+ "alpha-2": "IQ",
1230
+ "alpha-3": "IRQ",
1231
+ "country-code": "368"
1232
+ },
1233
+ {
1234
+ "name": "Ireland",
1235
+ "alpha-2": "IE",
1236
+ "alpha-3": "IRL",
1237
+ "country-code": "372"
1238
+ },
1239
+ {
1240
+ "name": "Isle of Man",
1241
+ "alpha-2": "IM",
1242
+ "alpha-3": "IMN",
1243
+ "country-code": "833"
1244
+ },
1245
+ {
1246
+ "name": "Israel",
1247
+ "alpha-2": "IL",
1248
+ "alpha-3": "ISR",
1249
+ "country-code": "376"
1250
+ },
1251
+ {
1252
+ "name": "Italy",
1253
+ "alpha-2": "IT",
1254
+ "alpha-3": "ITA",
1255
+ "country-code": "380"
1256
+ },
1257
+ {
1258
+ "name": "Jamaica",
1259
+ "alpha-2": "JM",
1260
+ "alpha-3": "JAM",
1261
+ "country-code": "388"
1262
+ },
1263
+ {
1264
+ "name": "Japan",
1265
+ "alpha-2": "JP",
1266
+ "alpha-3": "JPN",
1267
+ "country-code": "392"
1268
+ },
1269
+ {
1270
+ "name": "Jersey",
1271
+ "alpha-2": "JE",
1272
+ "alpha-3": "JEY",
1273
+ "country-code": "832"
1274
+ },
1275
+ {
1276
+ "name": "Jordan",
1277
+ "alpha-2": "JO",
1278
+ "alpha-3": "JOR",
1279
+ "country-code": "400"
1280
+ },
1281
+ {
1282
+ "name": "Kazakhstan",
1283
+ "alpha-2": "KZ",
1284
+ "alpha-3": "KAZ",
1285
+ "country-code": "398"
1286
+ },
1287
+ {
1288
+ "name": "Kenya",
1289
+ "alpha-2": "KE",
1290
+ "alpha-3": "KEN",
1291
+ "country-code": "404"
1292
+ },
1293
+ {
1294
+ "name": "Kiribati",
1295
+ "alpha-2": "KI",
1296
+ "alpha-3": "KIR",
1297
+ "country-code": "296"
1298
+ },
1299
+ {
1300
+ "name": "Korea (Democratic People's Republic of)",
1301
+ "alpha-2": "KP",
1302
+ "alpha-3": "PRK",
1303
+ "country-code": "408"
1304
+ },
1305
+ {
1306
+ "name": "Korea, Republic of",
1307
+ "alpha-2": "KR",
1308
+ "alpha-3": "KOR",
1309
+ "country-code": "410"
1310
+ },
1311
+ {
1312
+ "name": "Kuwait",
1313
+ "alpha-2": "KW",
1314
+ "alpha-3": "KWT",
1315
+ "country-code": "414"
1316
+ },
1317
+ {
1318
+ "name": "Kyrgyzstan",
1319
+ "alpha-2": "KG",
1320
+ "alpha-3": "KGZ",
1321
+ "country-code": "417"
1322
+ },
1323
+ {
1324
+ "name": "Lao People's Democratic Republic",
1325
+ "alpha-2": "LA",
1326
+ "alpha-3": "LAO",
1327
+ "country-code": "418"
1328
+ },
1329
+ {
1330
+ "name": "Latvia",
1331
+ "alpha-2": "LV",
1332
+ "alpha-3": "LVA",
1333
+ "country-code": "428"
1334
+ },
1335
+ {
1336
+ "name": "Lebanon",
1337
+ "alpha-2": "LB",
1338
+ "alpha-3": "LBN",
1339
+ "country-code": "422"
1340
+ },
1341
+ {
1342
+ "name": "Lesotho",
1343
+ "alpha-2": "LS",
1344
+ "alpha-3": "LSO",
1345
+ "country-code": "426"
1346
+ },
1347
+ {
1348
+ "name": "Liberia",
1349
+ "alpha-2": "LR",
1350
+ "alpha-3": "LBR",
1351
+ "country-code": "430"
1352
+ },
1353
+ {
1354
+ "name": "Libya",
1355
+ "alpha-2": "LY",
1356
+ "alpha-3": "LBY",
1357
+ "country-code": "434"
1358
+ },
1359
+ {
1360
+ "name": "Liechtenstein",
1361
+ "alpha-2": "LI",
1362
+ "alpha-3": "LIE",
1363
+ "country-code": "438"
1364
+ },
1365
+ {
1366
+ "name": "Lithuania",
1367
+ "alpha-2": "LT",
1368
+ "alpha-3": "LTU",
1369
+ "country-code": "440"
1370
+ },
1371
+ {
1372
+ "name": "Luxembourg",
1373
+ "alpha-2": "LU",
1374
+ "alpha-3": "LUX",
1375
+ "country-code": "442"
1376
+ },
1377
+ {
1378
+ "name": "Macao",
1379
+ "alpha-2": "MO",
1380
+ "alpha-3": "MAC",
1381
+ "country-code": "446"
1382
+ },
1383
+ {
1384
+ "name": "Madagascar",
1385
+ "alpha-2": "MG",
1386
+ "alpha-3": "MDG",
1387
+ "country-code": "450"
1388
+ },
1389
+ {
1390
+ "name": "Malawi",
1391
+ "alpha-2": "MW",
1392
+ "alpha-3": "MWI",
1393
+ "country-code": "454"
1394
+ },
1395
+ {
1396
+ "name": "Malaysia",
1397
+ "alpha-2": "MY",
1398
+ "alpha-3": "MYS",
1399
+ "country-code": "458"
1400
+ },
1401
+ {
1402
+ "name": "Maldives",
1403
+ "alpha-2": "MV",
1404
+ "alpha-3": "MDV",
1405
+ "country-code": "462"
1406
+ },
1407
+ {
1408
+ "name": "Mali",
1409
+ "alpha-2": "ML",
1410
+ "alpha-3": "MLI",
1411
+ "country-code": "466"
1412
+ },
1413
+ {
1414
+ "name": "Malta",
1415
+ "alpha-2": "MT",
1416
+ "alpha-3": "MLT",
1417
+ "country-code": "470"
1418
+ },
1419
+ {
1420
+ "name": "Marshall Islands",
1421
+ "alpha-2": "MH",
1422
+ "alpha-3": "MHL",
1423
+ "country-code": "584"
1424
+ },
1425
+ {
1426
+ "name": "Martinique",
1427
+ "alpha-2": "MQ",
1428
+ "alpha-3": "MTQ",
1429
+ "country-code": "474"
1430
+ },
1431
+ {
1432
+ "name": "Mauritania",
1433
+ "alpha-2": "MR",
1434
+ "alpha-3": "MRT",
1435
+ "country-code": "478"
1436
+ },
1437
+ {
1438
+ "name": "Mauritius",
1439
+ "alpha-2": "MU",
1440
+ "alpha-3": "MUS",
1441
+ "country-code": "480"
1442
+ },
1443
+ {
1444
+ "name": "Mayotte",
1445
+ "alpha-2": "YT",
1446
+ "alpha-3": "MYT",
1447
+ "country-code": "175"
1448
+ },
1449
+ {
1450
+ "name": "Mexico",
1451
+ "alpha-2": "MX",
1452
+ "alpha-3": "MEX",
1453
+ "country-code": "484"
1454
+ },
1455
+ {
1456
+ "name": "Micronesia (Federated States of)",
1457
+ "alpha-2": "FM",
1458
+ "alpha-3": "FSM",
1459
+ "country-code": "583"
1460
+ },
1461
+ {
1462
+ "name": "Moldova, Republic of",
1463
+ "alpha-2": "MD",
1464
+ "alpha-3": "MDA",
1465
+ "country-code": "498"
1466
+ },
1467
+ {
1468
+ "name": "Monaco",
1469
+ "alpha-2": "MC",
1470
+ "alpha-3": "MCO",
1471
+ "country-code": "492"
1472
+ },
1473
+ {
1474
+ "name": "Mongolia",
1475
+ "alpha-2": "MN",
1476
+ "alpha-3": "MNG",
1477
+ "country-code": "496"
1478
+ },
1479
+ {
1480
+ "name": "Montenegro",
1481
+ "alpha-2": "ME",
1482
+ "alpha-3": "MNE",
1483
+ "country-code": "499"
1484
+ },
1485
+ {
1486
+ "name": "Montserrat",
1487
+ "alpha-2": "MS",
1488
+ "alpha-3": "MSR",
1489
+ "country-code": "500"
1490
+ },
1491
+ {
1492
+ "name": "Morocco",
1493
+ "alpha-2": "MA",
1494
+ "alpha-3": "MAR",
1495
+ "country-code": "504"
1496
+ },
1497
+ {
1498
+ "name": "Mozambique",
1499
+ "alpha-2": "MZ",
1500
+ "alpha-3": "MOZ",
1501
+ "country-code": "508"
1502
+ },
1503
+ {
1504
+ "name": "Myanmar",
1505
+ "alpha-2": "MM",
1506
+ "alpha-3": "MMR",
1507
+ "country-code": "104"
1508
+ },
1509
+ {
1510
+ "name": "Namibia",
1511
+ "alpha-2": "NA",
1512
+ "alpha-3": "NAM",
1513
+ "country-code": "516"
1514
+ },
1515
+ {
1516
+ "name": "Nauru",
1517
+ "alpha-2": "NR",
1518
+ "alpha-3": "NRU",
1519
+ "country-code": "520"
1520
+ },
1521
+ {
1522
+ "name": "Nepal",
1523
+ "alpha-2": "NP",
1524
+ "alpha-3": "NPL",
1525
+ "country-code": "524"
1526
+ },
1527
+ {
1528
+ "name": "Netherlands",
1529
+ "alpha-2": "NL",
1530
+ "alpha-3": "NLD",
1531
+ "country-code": "528"
1532
+ },
1533
+ {
1534
+ "name": "New Caledonia",
1535
+ "alpha-2": "NC",
1536
+ "alpha-3": "NCL",
1537
+ "country-code": "540"
1538
+ },
1539
+ {
1540
+ "name": "New Zealand",
1541
+ "alpha-2": "NZ",
1542
+ "alpha-3": "NZL",
1543
+ "country-code": "554"
1544
+ },
1545
+ {
1546
+ "name": "Nicaragua",
1547
+ "alpha-2": "NI",
1548
+ "alpha-3": "NIC",
1549
+ "country-code": "558"
1550
+ },
1551
+ {
1552
+ "name": "Niger",
1553
+ "alpha-2": "NE",
1554
+ "alpha-3": "NER",
1555
+ "country-code": "562"
1556
+ },
1557
+ {
1558
+ "name": "Nigeria",
1559
+ "alpha-2": "NG",
1560
+ "alpha-3": "NGA",
1561
+ "country-code": "566"
1562
+ },
1563
+ {
1564
+ "name": "Niue",
1565
+ "alpha-2": "NU",
1566
+ "alpha-3": "NIU",
1567
+ "country-code": "570"
1568
+ },
1569
+ {
1570
+ "name": "Norfolk Island",
1571
+ "alpha-2": "NF",
1572
+ "alpha-3": "NFK",
1573
+ "country-code": "574"
1574
+ },
1575
+ {
1576
+ "name": "North Macedonia",
1577
+ "alpha-2": "MK",
1578
+ "alpha-3": "MKD",
1579
+ "country-code": "807"
1580
+ },
1581
+ {
1582
+ "name": "Northern Mariana Islands",
1583
+ "alpha-2": "MP",
1584
+ "alpha-3": "MNP",
1585
+ "country-code": "580"
1586
+ },
1587
+ {
1588
+ "name": "Norway",
1589
+ "alpha-2": "NO",
1590
+ "alpha-3": "NOR",
1591
+ "country-code": "578"
1592
+ },
1593
+ {
1594
+ "name": "Oman",
1595
+ "alpha-2": "OM",
1596
+ "alpha-3": "OMN",
1597
+ "country-code": "512"
1598
+ },
1599
+ {
1600
+ "name": "Pakistan",
1601
+ "alpha-2": "PK",
1602
+ "alpha-3": "PAK",
1603
+ "country-code": "586"
1604
+ },
1605
+ {
1606
+ "name": "Palau",
1607
+ "alpha-2": "PW",
1608
+ "alpha-3": "PLW",
1609
+ "country-code": "585"
1610
+ },
1611
+ {
1612
+ "name": "Palestine, State of",
1613
+ "alpha-2": "PS",
1614
+ "alpha-3": "PSE",
1615
+ "country-code": "275"
1616
+ },
1617
+ {
1618
+ "name": "Panama",
1619
+ "alpha-2": "PA",
1620
+ "alpha-3": "PAN",
1621
+ "country-code": "591"
1622
+ },
1623
+ {
1624
+ "name": "Papua New Guinea",
1625
+ "alpha-2": "PG",
1626
+ "alpha-3": "PNG",
1627
+ "country-code": "598"
1628
+ },
1629
+ {
1630
+ "name": "Paraguay",
1631
+ "alpha-2": "PY",
1632
+ "alpha-3": "PRY",
1633
+ "country-code": "600"
1634
+ },
1635
+ {
1636
+ "name": "Peru",
1637
+ "alpha-2": "PE",
1638
+ "alpha-3": "PER",
1639
+ "country-code": "604"
1640
+ },
1641
+ {
1642
+ "name": "Philippines",
1643
+ "alpha-2": "PH",
1644
+ "alpha-3": "PHL",
1645
+ "country-code": "608"
1646
+ },
1647
+ {
1648
+ "name": "Pitcairn",
1649
+ "alpha-2": "PN",
1650
+ "alpha-3": "PCN",
1651
+ "country-code": "612"
1652
+ },
1653
+ {
1654
+ "name": "Poland",
1655
+ "alpha-2": "PL",
1656
+ "alpha-3": "POL",
1657
+ "country-code": "616"
1658
+ },
1659
+ {
1660
+ "name": "Portugal",
1661
+ "alpha-2": "PT",
1662
+ "alpha-3": "PRT",
1663
+ "country-code": "620"
1664
+ },
1665
+ {
1666
+ "name": "Puerto Rico",
1667
+ "alpha-2": "PR",
1668
+ "alpha-3": "PRI",
1669
+ "country-code": "630"
1670
+ },
1671
+ {
1672
+ "name": "Qatar",
1673
+ "alpha-2": "QA",
1674
+ "alpha-3": "QAT",
1675
+ "country-code": "634"
1676
+ },
1677
+ {
1678
+ "name": "Réunion",
1679
+ "alpha-2": "RE",
1680
+ "alpha-3": "REU",
1681
+ "country-code": "638"
1682
+ },
1683
+ {
1684
+ "name": "Romania",
1685
+ "alpha-2": "RO",
1686
+ "alpha-3": "ROU",
1687
+ "country-code": "642"
1688
+ },
1689
+ {
1690
+ "name": "Russian Federation",
1691
+ "alpha-2": "RU",
1692
+ "alpha-3": "RUS",
1693
+ "country-code": "643"
1694
+ },
1695
+ {
1696
+ "name": "Rwanda",
1697
+ "alpha-2": "RW",
1698
+ "alpha-3": "RWA",
1699
+ "country-code": "646"
1700
+ },
1701
+ {
1702
+ "name": "Saint Barthélemy",
1703
+ "alpha-2": "BL",
1704
+ "alpha-3": "BLM",
1705
+ "country-code": "652"
1706
+ },
1707
+ {
1708
+ "name": "Saint Helena, Ascension and Tristan da Cunha",
1709
+ "alpha-2": "SH",
1710
+ "alpha-3": "SHN",
1711
+ "country-code": "654"
1712
+ },
1713
+ {
1714
+ "name": "Saint Kitts and Nevis",
1715
+ "alpha-2": "KN",
1716
+ "alpha-3": "KNA",
1717
+ "country-code": "659"
1718
+ },
1719
+ {
1720
+ "name": "Saint Lucia",
1721
+ "alpha-2": "LC",
1722
+ "alpha-3": "LCA",
1723
+ "country-code": "662"
1724
+ },
1725
+ {
1726
+ "name": "Saint Martin (French part)",
1727
+ "alpha-2": "MF",
1728
+ "alpha-3": "MAF",
1729
+ "country-code": "663"
1730
+ },
1731
+ {
1732
+ "name": "Saint Pierre and Miquelon",
1733
+ "alpha-2": "PM",
1734
+ "alpha-3": "SPM",
1735
+ "country-code": "666"
1736
+ },
1737
+ {
1738
+ "name": "Saint Vincent and the Grenadines",
1739
+ "alpha-2": "VC",
1740
+ "alpha-3": "VCT",
1741
+ "country-code": "670"
1742
+ },
1743
+ {
1744
+ "name": "Samoa",
1745
+ "alpha-2": "WS",
1746
+ "alpha-3": "WSM",
1747
+ "country-code": "882"
1748
+ },
1749
+ {
1750
+ "name": "San Marino",
1751
+ "alpha-2": "SM",
1752
+ "alpha-3": "SMR",
1753
+ "country-code": "674"
1754
+ },
1755
+ {
1756
+ "name": "Sao Tome and Principe",
1757
+ "alpha-2": "ST",
1758
+ "alpha-3": "STP",
1759
+ "country-code": "678"
1760
+ },
1761
+ {
1762
+ "name": "Saudi Arabia",
1763
+ "alpha-2": "SA",
1764
+ "alpha-3": "SAU",
1765
+ "country-code": "682"
1766
+ },
1767
+ {
1768
+ "name": "Senegal",
1769
+ "alpha-2": "SN",
1770
+ "alpha-3": "SEN",
1771
+ "country-code": "686"
1772
+ },
1773
+ {
1774
+ "name": "Serbia",
1775
+ "alpha-2": "RS",
1776
+ "alpha-3": "SRB",
1777
+ "country-code": "688"
1778
+ },
1779
+ {
1780
+ "name": "Seychelles",
1781
+ "alpha-2": "SC",
1782
+ "alpha-3": "SYC",
1783
+ "country-code": "690"
1784
+ },
1785
+ {
1786
+ "name": "Sierra Leone",
1787
+ "alpha-2": "SL",
1788
+ "alpha-3": "SLE",
1789
+ "country-code": "694"
1790
+ },
1791
+ {
1792
+ "name": "Singapore",
1793
+ "alpha-2": "SG",
1794
+ "alpha-3": "SGP",
1795
+ "country-code": "702"
1796
+ },
1797
+ {
1798
+ "name": "Sint Maarten (Dutch part)",
1799
+ "alpha-2": "SX",
1800
+ "alpha-3": "SXM",
1801
+ "country-code": "534"
1802
+ },
1803
+ {
1804
+ "name": "Slovakia",
1805
+ "alpha-2": "SK",
1806
+ "alpha-3": "SVK",
1807
+ "country-code": "703"
1808
+ },
1809
+ {
1810
+ "name": "Slovenia",
1811
+ "alpha-2": "SI",
1812
+ "alpha-3": "SVN",
1813
+ "country-code": "705"
1814
+ },
1815
+ {
1816
+ "name": "Solomon Islands",
1817
+ "alpha-2": "SB",
1818
+ "alpha-3": "SLB",
1819
+ "country-code": "090"
1820
+ },
1821
+ {
1822
+ "name": "Somalia",
1823
+ "alpha-2": "SO",
1824
+ "alpha-3": "SOM",
1825
+ "country-code": "706"
1826
+ },
1827
+ {
1828
+ "name": "South Africa",
1829
+ "alpha-2": "ZA",
1830
+ "alpha-3": "ZAF",
1831
+ "country-code": "710"
1832
+ },
1833
+ {
1834
+ "name": "South Georgia and the South Sandwich Islands",
1835
+ "alpha-2": "GS",
1836
+ "alpha-3": "SGS",
1837
+ "country-code": "239"
1838
+ },
1839
+ {
1840
+ "name": "South Sudan",
1841
+ "alpha-2": "SS",
1842
+ "alpha-3": "SSD",
1843
+ "country-code": "728"
1844
+ },
1845
+ {
1846
+ "name": "Spain",
1847
+ "alpha-2": "ES",
1848
+ "alpha-3": "ESP",
1849
+ "country-code": "724"
1850
+ },
1851
+ {
1852
+ "name": "Sri Lanka",
1853
+ "alpha-2": "LK",
1854
+ "alpha-3": "LKA",
1855
+ "country-code": "144"
1856
+ },
1857
+ {
1858
+ "name": "Sudan",
1859
+ "alpha-2": "SD",
1860
+ "alpha-3": "SDN",
1861
+ "country-code": "729"
1862
+ },
1863
+ {
1864
+ "name": "Suriname",
1865
+ "alpha-2": "SR",
1866
+ "alpha-3": "SUR",
1867
+ "country-code": "740"
1868
+ },
1869
+ {
1870
+ "name": "Svalbard and Jan Mayen",
1871
+ "alpha-2": "SJ",
1872
+ "alpha-3": "SJM",
1873
+ "country-code": "744"
1874
+ },
1875
+ {
1876
+ "name": "Sweden",
1877
+ "alpha-2": "SE",
1878
+ "alpha-3": "SWE",
1879
+ "country-code": "752"
1880
+ },
1881
+ {
1882
+ "name": "Switzerland",
1883
+ "alpha-2": "CH",
1884
+ "alpha-3": "CHE",
1885
+ "country-code": "756"
1886
+ },
1887
+ {
1888
+ "name": "Syrian Arab Republic",
1889
+ "alpha-2": "SY",
1890
+ "alpha-3": "SYR",
1891
+ "country-code": "760"
1892
+ },
1893
+ {
1894
+ "name": "Taiwan",
1895
+ "alpha-2": "TW",
1896
+ "alpha-3": "TWN",
1897
+ "country-code": "158"
1898
+ },
1899
+ {
1900
+ "name": "Tajikistan",
1901
+ "alpha-2": "TJ",
1902
+ "alpha-3": "TJK",
1903
+ "country-code": "762"
1904
+ },
1905
+ {
1906
+ "name": "Tanzania, United Republic of",
1907
+ "alpha-2": "TZ",
1908
+ "alpha-3": "TZA",
1909
+ "country-code": "834"
1910
+ },
1911
+ {
1912
+ "name": "Thailand",
1913
+ "alpha-2": "TH",
1914
+ "alpha-3": "THA",
1915
+ "country-code": "764"
1916
+ },
1917
+ {
1918
+ "name": "Timor-Leste",
1919
+ "alpha-2": "TL",
1920
+ "alpha-3": "TLS",
1921
+ "country-code": "626"
1922
+ },
1923
+ {
1924
+ "name": "Togo",
1925
+ "alpha-2": "TG",
1926
+ "alpha-3": "TGO",
1927
+ "country-code": "768"
1928
+ },
1929
+ {
1930
+ "name": "Tokelau",
1931
+ "alpha-2": "TK",
1932
+ "alpha-3": "TKL",
1933
+ "country-code": "772"
1934
+ },
1935
+ {
1936
+ "name": "Tonga",
1937
+ "alpha-2": "TO",
1938
+ "alpha-3": "TON",
1939
+ "country-code": "776"
1940
+ },
1941
+ {
1942
+ "name": "Trinidad and Tobago",
1943
+ "alpha-2": "TT",
1944
+ "alpha-3": "TTO",
1945
+ "country-code": "780"
1946
+ },
1947
+ {
1948
+ "name": "Tunisia",
1949
+ "alpha-2": "TN",
1950
+ "alpha-3": "TUN",
1951
+ "country-code": "788"
1952
+ },
1953
+ {
1954
+ "name": "Turkey",
1955
+ "alpha-2": "TR",
1956
+ "alpha-3": "TUR",
1957
+ "country-code": "792"
1958
+ },
1959
+ {
1960
+ "name": "Turkmenistan",
1961
+ "alpha-2": "TM",
1962
+ "alpha-3": "TKM",
1963
+ "country-code": "795"
1964
+ },
1965
+ {
1966
+ "name": "Turks and Caicos Islands",
1967
+ "alpha-2": "TC",
1968
+ "alpha-3": "TCA",
1969
+ "country-code": "796"
1970
+ },
1971
+ {
1972
+ "name": "Tuvalu",
1973
+ "alpha-2": "TV",
1974
+ "alpha-3": "TUV",
1975
+ "country-code": "798"
1976
+ },
1977
+ {
1978
+ "name": "Uganda",
1979
+ "alpha-2": "UG",
1980
+ "alpha-3": "UGA",
1981
+ "country-code": "800"
1982
+ },
1983
+ {
1984
+ "name": "Ukraine",
1985
+ "alpha-2": "UA",
1986
+ "alpha-3": "UKR",
1987
+ "country-code": "804"
1988
+ },
1989
+ {
1990
+ "name": "United Arab Emirates",
1991
+ "alpha-2": "AE",
1992
+ "alpha-3": "ARE",
1993
+ "country-code": "784"
1994
+ },
1995
+ {
1996
+ "name": "United Kingdom",
1997
+ "alpha-2": "GB",
1998
+ "alpha-3": "GBR",
1999
+ "country-code": "826"
2000
+ },
2001
+ {
2002
+ "name": "America",
2003
+ "alpha-2": "US",
2004
+ "alpha-3": "USA",
2005
+ "country-code": "840"
2006
+ },
2007
+ {
2008
+ "name": "United States Minor Outlying Islands",
2009
+ "alpha-2": "UM",
2010
+ "alpha-3": "UMI",
2011
+ "country-code": "581"
2012
+ },
2013
+ {
2014
+ "name": "Uruguay",
2015
+ "alpha-2": "UY",
2016
+ "alpha-3": "URY",
2017
+ "country-code": "858"
2018
+ },
2019
+ {
2020
+ "name": "Uzbekistan",
2021
+ "alpha-2": "UZ",
2022
+ "alpha-3": "UZB",
2023
+ "country-code": "860"
2024
+ },
2025
+ {
2026
+ "name": "Vanuatu",
2027
+ "alpha-2": "VU",
2028
+ "alpha-3": "VUT",
2029
+ "country-code": "548"
2030
+ },
2031
+ {
2032
+ "name": "Venezuela (Bolivarian Republic of)",
2033
+ "alpha-2": "VE",
2034
+ "alpha-3": "VEN",
2035
+ "country-code": "862"
2036
+ },
2037
+ {
2038
+ "name": "Vietnam",
2039
+ "alpha-2": "VN",
2040
+ "alpha-3": "VNM",
2041
+ "country-code": "704"
2042
+ },
2043
+ {
2044
+ "name": "Virgin Islands (British)",
2045
+ "alpha-2": "VG",
2046
+ "alpha-3": "VGB",
2047
+ "country-code": "092"
2048
+ },
2049
+ {
2050
+ "name": "Virgin Islands (U.S.)",
2051
+ "alpha-2": "VI",
2052
+ "alpha-3": "VIR",
2053
+ "country-code": "850"
2054
+ },
2055
+ {
2056
+ "name": "Wallis and Futuna",
2057
+ "alpha-2": "WF",
2058
+ "alpha-3": "WLF",
2059
+ "country-code": "876"
2060
+ },
2061
+ {
2062
+ "name": "Western Sahara",
2063
+ "alpha-2": "EH",
2064
+ "alpha-3": "ESH",
2065
+ "country-code": "732"
2066
+ },
2067
+ {
2068
+ "name": "Yemen",
2069
+ "alpha-2": "YE",
2070
+ "alpha-3": "YEM",
2071
+ "country-code": "887"
2072
+ },
2073
+ {
2074
+ "name": "Zambia",
2075
+ "alpha-2": "ZM",
2076
+ "alpha-3": "ZMB",
2077
+ "country-code": "894"
2078
+ },
2079
+ {
2080
+ "name": "Zimbabwe",
2081
+ "alpha-2": "ZW",
2082
+ "alpha-3": "ZWE",
2083
+ "country-code": "716"
2084
+ }
2085
+ ];
2086
+ const SearchTypes = {
2087
+ WEB: "web",
2088
+ IMAGE: "image",
2089
+ VIDEO: "video",
2090
+ NEWS: "news",
2091
+ DISCOVER: "discover",
2092
+ GOOGLE_NEWS: "googleNews"
2093
+ };
2094
+ Object.fromEntries(countries_default.map((c) => [c["alpha-3"], c["alpha-3"].toLowerCase()]));
256
2095
  const DATE_OPERATORS = [
257
2096
  "gte",
258
2097
  "gt",
@@ -281,6 +2120,7 @@ function isSpecialOperator(op) {
281
2120
  function isQueryParam(value) {
282
2121
  return QUERY_PARAMS.includes(value);
283
2122
  }
2123
+ new Set(Object.values(SearchTypes));
284
2124
  function extractSpecialFilters(filter) {
285
2125
  if (!filter) return {};
286
2126
  let startDate;
@@ -704,160 +2544,6 @@ function googleSearchConsole(auth, options = {}) {
704
2544
  _rawQuery: rawQuery
705
2545
  };
706
2546
  }
707
- const GSC_QUOTAS = {
708
- searchAnalytics: 25e3,
709
- urlInspection: 2e3,
710
- indexing: 200
711
- };
712
- function pickField(error, paths, is) {
713
- if (!error || typeof error !== "object") return void 0;
714
- for (const path of paths) {
715
- let current = error;
716
- for (const key of path) {
717
- if (!current || typeof current !== "object") {
718
- current = void 0;
719
- break;
720
- }
721
- current = current[key];
722
- }
723
- if (is(current)) return current;
724
- }
725
- }
726
- const isNumber = (v) => typeof v === "number";
727
- const isString = (v) => typeof v === "string";
728
- function extractStatus(error) {
729
- return pickField(error, [
730
- ["statusCode"],
731
- ["status"],
732
- ["response", "status"],
733
- ["code"]
734
- ], isNumber);
735
- }
736
- function extractMessage(error) {
737
- if (!error) return "Unknown error";
738
- if (typeof error === "string") return error;
739
- if (error instanceof Error) return error.message;
740
- if (typeof error !== "object") return String(error);
741
- return pickField(error, [
742
- [
743
- "data",
744
- "error",
745
- "message"
746
- ],
747
- ["message"],
748
- ["statusMessage"]
749
- ], isString) ?? String(error);
750
- }
751
- function extractRetryAfter(error) {
752
- const raw = pickField(error, [
753
- ["headers", "retry-after"],
754
- ["headers", "Retry-After"],
755
- [
756
- "response",
757
- "headers",
758
- "retry-after"
759
- ],
760
- [
761
- "response",
762
- "headers",
763
- "Retry-After"
764
- ]
765
- ], (v) => typeof v === "number" || typeof v === "string");
766
- if (typeof raw === "number") return raw;
767
- if (typeof raw === "string") {
768
- const seconds = Number.parseInt(raw, 10);
769
- return Number.isNaN(seconds) ? void 0 : seconds;
770
- }
771
- }
772
- const QUOTA_MESSAGE_RE = /quota|rate\s*limit/i;
773
- function classifyError(cause) {
774
- const status = extractStatus(cause);
775
- const message = extractMessage(cause);
776
- if (status === 401) return {
777
- kind: "auth-expired",
778
- message,
779
- cause
780
- };
781
- if (status === 429) return {
782
- kind: "rate-limited",
783
- message,
784
- retryAfter: extractRetryAfter(cause),
785
- cause
786
- };
787
- if (status === 403) {
788
- if (QUOTA_MESSAGE_RE.test(message)) return {
789
- kind: "rate-limited",
790
- message,
791
- retryAfter: extractRetryAfter(cause),
792
- cause
793
- };
794
- return {
795
- kind: "auth-expired",
796
- message,
797
- cause
798
- };
799
- }
800
- if (status === 404) return {
801
- kind: "not-found",
802
- message,
803
- cause
804
- };
805
- if (status === 400 || status === 422) return {
806
- kind: "validation",
807
- message,
808
- cause
809
- };
810
- return {
811
- kind: "transport",
812
- message,
813
- status,
814
- cause
815
- };
816
- }
817
- function storageError(message, cause) {
818
- return {
819
- kind: "storage",
820
- message,
821
- cause
822
- };
823
- }
824
- const PERMISSION_SIGNALS = [
825
- "403 forbidden",
826
- "permission_denied",
827
- "does not have sufficient permission",
828
- "insufficient permission"
829
- ];
830
- function isPermissionDeniedError(err) {
831
- const msg = String(err?.message ?? err ?? "").toLowerCase();
832
- return PERMISSION_SIGNALS.some((s) => msg.includes(s));
833
- }
834
- function suggestionFor(err) {
835
- switch (err.kind) {
836
- case "auth-expired": return "Run `gscdump auth` to re-authenticate.";
837
- case "rate-limited": {
838
- const retryIn = err.retryAfter ? `${err.retryAfter}s` : "a few minutes";
839
- if (QUOTA_MESSAGE_RE.test(err.message)) {
840
- if (err.message.includes("Indexing API")) return `Indexing API quota exhausted (~${GSC_QUOTAS.indexing}/day). Try again tomorrow.`;
841
- return `Quota or rate limit hit (Search Analytics ~${GSC_QUOTAS.searchAnalytics}/day). Try again in ${retryIn}.`;
842
- }
843
- return `Rate limited. Slow down requests. Try again in ${retryIn}.`;
844
- }
845
- case "not-found":
846
- case "validation":
847
- case "storage":
848
- case "transport": return "";
849
- }
850
- }
851
- function formatErrorForCli(cause) {
852
- const err = classifyError(cause);
853
- const lines = [`\x1B[31m${err.message}\x1B[0m`];
854
- const suggestion = suggestionFor(err);
855
- if (suggestion) {
856
- lines.push("");
857
- lines.push(suggestion);
858
- }
859
- return lines.join("\n");
860
- }
861
2547
  const INDEXING_ISSUE_FILTERS = {
862
2548
  canonical_mismatch: `user_canonical IS NOT NULL AND google_canonical IS NOT NULL AND user_canonical != google_canonical`,
863
2549
  stale_crawl: `last_crawl_time < datetime('now', '-30 days')`,
@@ -918,20 +2604,99 @@ const INDEXING_ISSUE_SEVERITY = {
918
2604
  rich_results_warning: "warning",
919
2605
  rich_results_pass: "info"
920
2606
  };
921
- const INDEXING_DAILY_LIMIT = 2e3;
922
- const INDEXING_EFFECTIVE_LIMIT = 1800;
923
- function hasGscReadScope(scopes) {
924
- if (!scopes) return false;
925
- return scopes.includes("webmasters.readonly") || scopes.includes("webmasters");
2607
+ const SCHEME_RE = /^(sc-domain:|https?:\/\/)/;
2608
+ function parseGscSiteUrl(siteUrl) {
2609
+ const isDomain = siteUrl.startsWith("sc-domain:");
2610
+ let hostname = siteUrl;
2611
+ if (isDomain) hostname = siteUrl.slice(10);
2612
+ else try {
2613
+ hostname = new URL(siteUrl).hostname;
2614
+ } catch {
2615
+ hostname = siteUrl;
2616
+ }
2617
+ const displayLabel = siteUrl.replace(SCHEME_RE, "").replace(/\/$/, "");
2618
+ return {
2619
+ label: siteUrl,
2620
+ hostname,
2621
+ displayLabel,
2622
+ propertyType: isDomain ? "domain" : "url-prefix",
2623
+ isDomain
2624
+ };
926
2625
  }
927
- function hasGscWriteScope(scopes) {
928
- if (!scopes) return false;
929
- return scopes.includes("webmasters") && !scopes.includes("webmasters.readonly");
2626
+ function normalizeRegistrationTarget(inputUrl) {
2627
+ const trimmed = inputUrl.trim();
2628
+ if (!trimmed) return null;
2629
+ const inputParsed = parseGscSiteUrl(trimmed);
2630
+ if (inputParsed.isDomain) return inputParsed.hostname.toLowerCase();
2631
+ return trimmed.match(/^(?:https?:\/\/)?([^/]+)/)?.[1]?.toLowerCase() ?? null;
2632
+ }
2633
+ const VERIFIED_PERMISSIONS = new Set([
2634
+ "siteOwner",
2635
+ "siteFullUser",
2636
+ "siteRestrictedUser"
2637
+ ]);
2638
+ function isVerifiedGscProperty(property) {
2639
+ return !!property?.permissionLevel && VERIFIED_PERMISSIONS.has(property.permissionLevel);
2640
+ }
2641
+ function isVerifiedGscPermission(level) {
2642
+ return !!level && VERIFIED_PERMISSIONS.has(level);
2643
+ }
2644
+ const stripWww = (d) => d.replace(/^www\./, "");
2645
+ function gscPropertyMatchesTarget(targetDomain, propertyUrl) {
2646
+ if (!propertyUrl) return false;
2647
+ const cleanTarget = stripWww(targetDomain);
2648
+ const parsed = parseGscSiteUrl(propertyUrl);
2649
+ if (parsed.isDomain) return cleanTarget === parsed.hostname || cleanTarget.endsWith(`.${parsed.hostname}`);
2650
+ const match = propertyUrl.match(/^https?:\/\/([^/]+)/);
2651
+ return !!match && stripWww(match[1].toLowerCase()) === cleanTarget;
2652
+ }
2653
+ function matchGscSite(siteUrl, gscSiteUrl) {
2654
+ if (!siteUrl || !gscSiteUrl) return false;
2655
+ const getHostname = (url) => {
2656
+ if (url.startsWith("sc-domain:")) return url.replace("sc-domain:", "");
2657
+ try {
2658
+ return new URL(url).hostname;
2659
+ } catch {
2660
+ return url;
2661
+ }
2662
+ };
2663
+ return gscPropertyMatchesTarget(getHostname(siteUrl), gscSiteUrl);
2664
+ }
2665
+ function pickBestGscProperty(origin, availableSites) {
2666
+ const matches = availableSites.filter((p) => matchGscSite(origin, p.siteUrl));
2667
+ if (!matches.length) return void 0;
2668
+ const isDomain = (p) => !!p.siteUrl?.startsWith("sc-domain:");
2669
+ const verified = matches.filter((p) => isVerifiedGscPermission(p.permissionLevel));
2670
+ const pool = verified.length ? verified : matches;
2671
+ return pool.find(isDomain) ?? pool[0];
2672
+ }
2673
+ function findBestGscProperty(targetDomain, properties) {
2674
+ const cleanTarget = stripWww(targetDomain);
2675
+ const domainProperty = properties.find((property) => {
2676
+ if (!property.siteUrl) return false;
2677
+ const parsed = parseGscSiteUrl(property.siteUrl);
2678
+ if (!parsed.isDomain) return false;
2679
+ return cleanTarget === parsed.hostname || cleanTarget.endsWith(`.${parsed.hostname}`);
2680
+ });
2681
+ const urlProperty = properties.find((property) => {
2682
+ if (!property.siteUrl) return false;
2683
+ const match = property.siteUrl.match(/^https?:\/\/([^/]+)/);
2684
+ return match && stripWww(match[1].toLowerCase()) === cleanTarget;
2685
+ });
2686
+ return {
2687
+ matchedSite: (isVerifiedGscProperty(domainProperty) ? domainProperty : isVerifiedGscProperty(urlProperty) ? urlProperty : domainProperty || urlProperty) ?? null,
2688
+ domainProperty: domainProperty ?? null,
2689
+ urlProperty: urlProperty ?? null
2690
+ };
930
2691
  }
931
- function hasIndexingScope(scopes) {
932
- if (!scopes) return false;
933
- return scopes.includes("googleapis.com/auth/indexing");
2692
+ function findExactGscProperty(propertyUrl, properties) {
2693
+ return properties.find((property) => property.siteUrl === propertyUrl) ?? null;
2694
+ }
2695
+ function formatGscPropertyCandidates(candidates) {
2696
+ return candidates.filter((c) => !!c).map((property) => `${property.siteUrl} (${property.permissionLevel})`).join(", ");
934
2697
  }
2698
+ const INDEXING_DAILY_LIMIT = 2e3;
2699
+ const INDEXING_EFFECTIVE_LIMIT = 1800;
935
2700
  const GSCDUMP_ONBOARDING_CONTRACT_VERSION = "2026-05-11";
936
2701
  const GSCDUMP_REQUIRED_ANALYTICS_SCOPE = "https://www.googleapis.com/auth/webmasters.readonly";
937
2702
  const GSCDUMP_OPTIONAL_INDEXING_SCOPE = "https://www.googleapis.com/auth/indexing";
@@ -1120,4 +2885,4 @@ async function fetchSitemapUrls(sitemapUrl, options = {}) {
1120
2885
  await visit(sitemapUrl, 0);
1121
2886
  return out;
1122
2887
  }
1123
- export { DAYS_PER_RANGE, GSCDUMP_ONBOARDING_CONTRACT_VERSION, GSCDUMP_OPTIONAL_INDEXING_SCOPE, GSCDUMP_REQUIRED_ANALYTICS_SCOPE, GSC_FINALIZED_LAG_DAYS, GSC_FRESHEST_LAG_DAYS, GSC_QUOTAS, GSC_RETENTION_MONTHS, INDEXING_DAILY_LIMIT, INDEXING_EFFECTIVE_LIMIT, INDEXING_ISSUE_FILTERS, INDEXING_ISSUE_LABELS, INDEXING_ISSUE_SEVERITY, MS_PER_DAY, accountNextActions, accountStatuses, addDays, addSite, analyticsNextActions, analyticsStatuses, batchInspectUrls, batchRequestIndexing, classifyError, countDays, createAuth, createFetch, daysAgo, deleteSite, deleteSitemap, discoverSitemap, fetchSitemap, fetchSitemapUrls, fetchSitemaps, fetchSites, fetchSitesWithSitemaps, formatErrorForCli, generateGscDateRange, getBackfillProgress, getDateRange, getFreshestGscDate, getIndexingMetadata, getLatestGscDate, getNextDate, getOldestGscDate, getPendingDates, getPreviousDate, getPstDate, getVerificationToken, getVerifiedSite, googleSearchConsole, groupIntoRanges, gscdumpApi, hasGscReadScope, hasGscWriteScope, hasIndexingScope, hasOptionalIndexingScope, hasRequiredAnalyticsScope, indexingNextActions, indexingStatuses, inspectUrl, isPermissionDeniedError, isValidGscDate, lifecycleErrorCodes, lifecycleWebhookEvents, listVerifiedSites, parseGrantedScopes, progressBar, propertyNextActions, propertyStatuses, querySourceModes, requestIndexing, rowWithMetricDefaults, runSequentialBatch, siteUrlToVerificationSite, sitemapNextActions, sitemapStatuses, storageError, submitSitemap, toIsoDate, unverifySite, verificationMethodsFor, verifySite };
2888
+ export { DAYS_PER_RANGE, GSCDUMP_ONBOARDING_CONTRACT_VERSION, GSCDUMP_OPTIONAL_INDEXING_SCOPE, GSCDUMP_REQUIRED_ANALYTICS_SCOPE, GSC_FINALIZED_LAG_DAYS, GSC_FRESHEST_LAG_DAYS, GSC_QUOTAS, GSC_RETENTION_MONTHS, GscApiError, INDEXING_DAILY_LIMIT, INDEXING_EFFECTIVE_LIMIT, INDEXING_ISSUE_FILTERS, INDEXING_ISSUE_LABELS, INDEXING_ISSUE_SEVERITY, MS_PER_DAY, accountNextActions, accountStatuses, addDays, addSite, analyticsNextActions, analyticsStatuses, batchInspectUrls, batchRequestIndexing, canUseUrlInspection, classifyError, countDays, createAuth, createFetch, daysAgo, deleteSite, deleteSitemap, discoverSitemap, exchangeAuthCode, fetchSitemap, fetchSitemapUrls, fetchSitemaps, fetchSites, fetchSitesWithSitemaps, findBestGscProperty, findExactGscProperty, formatErrorForCli, formatGscPropertyCandidates, generateGscDateRange, getBackfillProgress, getDateRange, getFreshestGscDate, getIndexingEligibility, getIndexingMetadata, getLatestGscDate, getNextCheckAfter, getNextCheckPriority, getNextDate, getOldestGscDate, getPendingDates, getPreviousDate, getPstDate, getVerificationToken, getVerifiedSite, googleSearchConsole, grantedScopeList, groupIntoRanges, gscPropertyMatchesTarget, gscdumpApi, hasGscReadScope, hasGscWriteScope, hasIndexingScope, hasOptionalIndexingScope, hasRequiredAnalyticsScope, indexingNextActions, indexingStatuses, inspectUrl, inspectUrlFlat, isPermissionDeniedError, isValidGscDate, isVerifiedGscPermission, isVerifiedGscProperty, lifecycleErrorCodes, lifecycleWebhookEvents, listVerifiedSites, matchGscSite, normalizeRegistrationTarget, parseGoogleError, parseGrantedScopes, parseGscSiteUrl, pickBestGscProperty, progressBar, propertyNextActions, propertyStatuses, querySourceModes, refreshAccessToken, requestIndexing, rethrowAsGscApiError, rowWithMetricDefaults, runSequentialBatch, siteUrlToVerificationSite, sitemapNextActions, sitemapStatuses, storageError, submitSitemap, toIsoDate, unverifySite, verificationMethodsFor, verifySite };