gscdump 4.2.2 → 4.2.3
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/core/errors.d.mts +12 -0
- package/dist/core/errors.mjs +16 -1
- package/dist/errors.d.mts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/query/types.d.mts +2 -2
- package/package.json +2 -2
package/dist/core/errors.d.mts
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
export type GscErrorKind = 'auth-expired' | 'permission-denied' | 'rate-limited' | 'not-found' | 'validation' | 'storage' | 'transport';
|
|
2
|
+
/**
|
|
3
|
+
* Which Google quota a `rate-limited` refusal spent. Each one refills on its
|
|
4
|
+
* own clock, so a caller picks its backoff from this:
|
|
5
|
+
*
|
|
6
|
+
* - `load`: the Search Analytics load quota. Google charges it by query cost
|
|
7
|
+
* (a `page,query,date` query on a large Site is the expensive shape) over
|
|
8
|
+
* 10 minute windows, so a retry sooner than that is refused again.
|
|
9
|
+
* - `daily`: a per-day cap. It resets at Pacific midnight.
|
|
10
|
+
* - `rate`: a per-second or per-minute cap. A short backoff clears it.
|
|
11
|
+
*/
|
|
12
|
+
export type GscQuota = 'load' | 'daily' | 'rate';
|
|
2
13
|
export type GscError = {
|
|
3
14
|
kind: 'auth-expired';
|
|
4
15
|
message: string;
|
|
@@ -9,6 +20,7 @@ export type GscError = {
|
|
|
9
20
|
cause: unknown;
|
|
10
21
|
} | {
|
|
11
22
|
kind: 'rate-limited';
|
|
23
|
+
quota: GscQuota;
|
|
12
24
|
message: string;
|
|
13
25
|
retryAfter?: number;
|
|
14
26
|
cause: unknown;
|
package/dist/core/errors.mjs
CHANGED
|
@@ -59,7 +59,14 @@ function extractRetryAfter(error) {
|
|
|
59
59
|
return Number.isNaN(seconds) ? void 0 : seconds;
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
const QUOTA_MESSAGE_RE = /quota|rate\s*limit|\bqps\b/i;
|
|
62
|
+
const QUOTA_MESSAGE_RE = /quota|rate\s*limit|\bqps\b|daily\s*limit/i;
|
|
63
|
+
const LOAD_QUOTA_MESSAGE_RE = /load\s*quota/i;
|
|
64
|
+
const DAILY_QUOTA_MESSAGE_RE = /daily\s*limit|per\s*day|for\s*the\s*day/i;
|
|
65
|
+
const DAILY_QUOTA_REASONS = /* @__PURE__ */ new Set([
|
|
66
|
+
"dailyLimitExceeded",
|
|
67
|
+
"dailyLimitExceededUnreg",
|
|
68
|
+
"variableTermExpiredDailyExceeded"
|
|
69
|
+
]);
|
|
63
70
|
const QUOTA_REASONS = /* @__PURE__ */ new Set([
|
|
64
71
|
"dailyLimitExceeded",
|
|
65
72
|
"dailyLimitExceededUnreg",
|
|
@@ -98,6 +105,12 @@ function isQuotaCondition(cause, message) {
|
|
|
98
105
|
if (reason && QUOTA_REASONS.has(reason)) return true;
|
|
99
106
|
return QUOTA_MESSAGE_RE.test(message);
|
|
100
107
|
}
|
|
108
|
+
function quotaOf(cause, message) {
|
|
109
|
+
if (LOAD_QUOTA_MESSAGE_RE.test(message)) return "load";
|
|
110
|
+
const reason = extractReason(cause);
|
|
111
|
+
if (reason && DAILY_QUOTA_REASONS.has(reason) || DAILY_QUOTA_MESSAGE_RE.test(message)) return "daily";
|
|
112
|
+
return "rate";
|
|
113
|
+
}
|
|
101
114
|
function classifyError(cause) {
|
|
102
115
|
const status = extractStatus(cause);
|
|
103
116
|
const message = extractMessage(cause);
|
|
@@ -108,6 +121,7 @@ function classifyError(cause) {
|
|
|
108
121
|
};
|
|
109
122
|
if (status === 429) return {
|
|
110
123
|
kind: "rate-limited",
|
|
124
|
+
quota: quotaOf(cause, message),
|
|
111
125
|
message,
|
|
112
126
|
retryAfter: extractRetryAfter(cause),
|
|
113
127
|
cause
|
|
@@ -115,6 +129,7 @@ function classifyError(cause) {
|
|
|
115
129
|
if (status === 403) {
|
|
116
130
|
if (isQuotaCondition(cause, message)) return {
|
|
117
131
|
kind: "rate-limited",
|
|
132
|
+
quota: quotaOf(cause, message),
|
|
118
133
|
message,
|
|
119
134
|
retryAfter: extractRetryAfter(cause),
|
|
120
135
|
cause
|
package/dist/errors.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { GscApiError, GscApiErrorInfo, GscError, GscErrorKind, classifyError, gscErrorToException, isPermissionDeniedError, parseGoogleError, rethrowAsGscApiError } from "./core/errors.mjs";
|
|
2
|
-
export { GscApiError, type GscApiErrorInfo, type GscError, type GscErrorKind, classifyError, gscErrorToException, isPermissionDeniedError, parseGoogleError, rethrowAsGscApiError };
|
|
1
|
+
import { GscApiError, GscApiErrorInfo, GscError, GscErrorKind, GscQuota, classifyError, gscErrorToException, isPermissionDeniedError, parseGoogleError, rethrowAsGscApiError } from "./core/errors.mjs";
|
|
2
|
+
export { GscApiError, type GscApiErrorInfo, type GscError, type GscErrorKind, type GscQuota, classifyError, gscErrorToException, isPermissionDeniedError, parseGoogleError, rethrowAsGscApiError };
|
package/dist/index.d.mts
CHANGED
|
@@ -4,7 +4,7 @@ import { Auth, AuthClient, AuthOptions, CallOptions, DEFAULT_GSC_REQUEST_TIMEOUT
|
|
|
4
4
|
import { GSC_INDEXING_SCOPE, GSC_READ_SCOPE, GSC_SITE_VERIFICATION_SCOPE, GSC_WRITE_SCOPE, hasGoogleScope } from "./core/scope-values.mjs";
|
|
5
5
|
import { hasGscReadScope, hasGscWriteScope, hasIndexingScope } from "./core/scopes.mjs";
|
|
6
6
|
import { BackfillProgress, DAYS_PER_RANGE, GSC_FINALIZED_LAG_DAYS, GSC_FRESHEST_LAG_DAYS, GSC_RETENTION_MONTHS, MS_PER_DAY, addDays, countDays, generateGscDateRange, getBackfillProgress, getDateRange, getFreshestGscDate, getLatestGscDate, getNextDate, getOldestGscDate, getPendingDates, getPreviousDate, getPstDate, groupIntoRanges, isValidGscDate, toIsoDate } from "./core/gsc-dates.mjs";
|
|
7
|
-
import { GscApiError, GscApiErrorInfo, GscError, GscErrorKind, classifyError, gscErrorToException, isPermissionDeniedError, parseGoogleError, rethrowAsGscApiError } from "./core/errors.mjs";
|
|
7
|
+
import { GscApiError, GscApiErrorInfo, GscError, GscErrorKind, GscQuota, classifyError, gscErrorToException, isPermissionDeniedError, parseGoogleError, rethrowAsGscApiError } from "./core/errors.mjs";
|
|
8
8
|
import { runSequentialBatch } from "./api/batch.mjs";
|
|
9
9
|
import { IndexingMetadata, IndexingNotificationType, IndexingResult, batchRequestIndexing, getIndexingMetadata, requestIndexing } from "./api/indexing.mjs";
|
|
10
10
|
import { BatchInspectUrlsFlatSettledOptions, IndexingEligibility, IndexingIneligibleReason, InspectUrlFlatSettledResult, InspectUrlResult, InspectionPriority, LegacyInspectionPriority, MAX_FLAT_INSPECTION_BATCH_CONCURRENCY, ParsedIndexingResult, URL_INSPECTION_QUOTA, ValueWeightedInspectionPriority, batchInspectUrls, batchInspectUrlsFlatSettled, canUseUrlInspection, describeInspectionError, getIndexingEligibility, getNextCheckAfter, getNextCheckPriority, inspectUrl, inspectUrlFlat } from "./api/inspection.mjs";
|
|
@@ -20,4 +20,4 @@ import { normalizeUrl } from "./normalize.mjs";
|
|
|
20
20
|
import { AccountNextAction, AccountStatus, AnalyticsNextAction, AnalyticsStatus, GSCDUMP_ONBOARDING_CONTRACT_VERSION, GSCDUMP_OPTIONAL_INDEXING_SCOPE, GSCDUMP_REQUIRED_ANALYTICS_SCOPE, GSCDUMP_WRITE_ANALYTICS_SCOPE, IndexingNextAction, IndexingStatus, LifecycleError, LifecycleErrorCode, LifecycleProgress, LifecycleWebhookEnvelope, LifecycleWebhookEvent, PartnerLifecycleAccount, PartnerLifecycleResponse, PartnerLifecycleSite, PropertyNextAction, PropertyStatus, QuerySourceMode, SitemapNextAction, SitemapStatus, accountNextActions, accountStatuses, analyticsNextActions, analyticsStatuses, hasOptionalIndexingScope, hasRequiredAnalyticsScope, indexingNextActions, indexingStatuses, lifecycleErrorCodes, parseGrantedScopes, propertyNextActions, propertyStatuses, querySourceModes, sitemapNextActions, sitemapStatuses } from "./onboarding.mjs";
|
|
21
21
|
import { decodeSiteId, encodeSiteId, normalizeSiteUrl } from "./tenant.mjs";
|
|
22
22
|
import { urlMatchKey } from "./url.mjs";
|
|
23
|
-
export { type AccountNextAction, type AccountStatus, AmpInspectionResult, AmpIssue, type AnalyticsNextAction, type AnalyticsStatus, ApiSite, ApiSitemap, ApiSitemapContent, Auth, AuthClient, AuthOptions, type BackfillProgress, BatchInspectUrlsFlatSettledOptions, CallOptions, CanonicalDifferenceKind, DAYS_PER_RANGE, DEFAULT_GSC_REQUEST_TIMEOUT_MS, DataRow, DimensionFilter, DimensionFilterGroup, Err, FetchSitesWithSitemapsOptions, GSCDUMP_ONBOARDING_CONTRACT_VERSION, GSCDUMP_OPTIONAL_INDEXING_SCOPE, GSCDUMP_REQUIRED_ANALYTICS_SCOPE, GSCDUMP_WRITE_ANALYTICS_SCOPE, GSC_FINALIZED_LAG_DAYS, GSC_FRESHEST_LAG_DAYS, GSC_INDEXING_SCOPE, GSC_READ_SCOPE, GSC_RETENTION_MONTHS, GSC_SITE_VERIFICATION_SCOPE, GSC_WRITE_SCOPE, GoogleSearchConsoleClient, GoogleSearchConsoleClientOptions, GscApiError, type GscApiErrorInfo, type GscError, type GscErrorKind, GscPropertyCandidate, INDEXING_ISSUE_FILTERS, INDEXING_ISSUE_LABELS, INDEXING_ISSUE_SEVERITY, IndexStatusResult, IndexingEligibility, IndexingIneligibleReason, IndexingIssueType, IndexingMetadata, type IndexingNextAction, IndexingNotificationType, IndexingResult, type IndexingStatus, InspectUrlFlatSettledResult, InspectUrlIndexResponse, InspectUrlResult, InspectionPriority, KNOWN_COVERAGE_STATES, KNOWN_PAGE_FETCH_STATES, LegacyInspectionPriority, type LifecycleError, type LifecycleErrorCode, type LifecycleProgress, type LifecycleWebhookEnvelope, type LifecycleWebhookEvent, MAX_FLAT_INSPECTION_BATCH_CONCURRENCY, MS_PER_DAY, MobileUsabilityIssue, MobileUsabilityResult, OAuthTokenInfo, OAuthTokens, Ok, ParsedGscSiteUrl, ParsedIndexingResult, type PartnerLifecycleAccount, type PartnerLifecycleResponse, type PartnerLifecycleSite, Period, type PropertyNextAction, type PropertyStatus, PublishUrlNotificationResponse, QueryReturn, type QuerySourceMode, RequiredNonNullable, ResolvedAnalyticsRange, Result, RichResultsDetectedItem, RichResultsIssue, RichResultsItem, RichResultsResult, SearchAnalyticsMetadata, SearchAnalyticsQuery, SearchAnalyticsResponse, Site, SiteAnalytics, SiteCandidate, SiteResolution, type SitemapNextAction, type SitemapStatus, URL_INSPECTION_EFFECTIVE_LIMIT, URL_INSPECTION_QUOTA, UnmappedInspectionReasons, UrlInspectionResult, UrlNotification, UrlNotificationMetadata, ValueWeightedInspectionPriority, VerificationMethod, VerificationSite, VerificationSiteType, VerificationToken, VerificationWebResource, accountNextActions, accountStatuses, addDays, addSite, analyticsNextActions, analyticsStatuses, batchInspectUrls, batchInspectUrlsFlatSettled, batchRequestIndexing, canUseUrlInspection, classifyCanonicalDifference, classifyError, countDays, createAuth, createFetch, decodeSiteId, deleteSite, deleteSitemap, describeInspectionError, encodeSiteId, err, exchangeAuthCodeResult, fetchSitemap, fetchSitemaps, fetchSites, fetchSitesWithSitemaps, findBestGscProperty, findExactGscProperty, formatGscPropertyCandidates, generateGscDateRange, getBackfillProgress, getDateRange, getFreshestGscDate, getIndexingEligibility, getIndexingMetadata, getLatestGscDate, getNextCheckAfter, getNextCheckPriority, getNextDate, getOldestGscDate, getPendingDates, getPreviousDate, getPstDate, getVerificationToken, getVerifiedSite, googleSearchConsole, groupIntoRanges, gscErrorToException, gscPropertyMatchesTarget, hasGoogleScope, hasGscReadScope, hasGscWriteScope, hasIndexingScope, hasOptionalIndexingScope, hasRequiredAnalyticsScope, indexingNextActions, indexingStatuses, inspectUrl, inspectUrlFlat, introspectAccessToken, introspectAccessTokenResult, isCanonicalMismatch, isErr, isFragmentUrl, isOk, isPermissionDeniedError, isValidGscDate, isVerifiedGscPermission, isVerifiedGscProperty, lifecycleErrorCodes, listVerifiedSites, matchGscSite, normalizeGscSiteUrl, normalizeRegistrationTarget, normalizeSiteUrl, normalizeUrl, ok, parseGoogleError, parseGrantedScopes, parseGscSiteUrl, pickBestGscProperty, propertyNextActions, propertyStatuses, querySourceModes, refreshAccessToken, requestIndexing, resolveSiteInput, resolveVerificationTarget, rethrowAsGscApiError, revokeOAuthToken, revokeOAuthTokenResult, runSequentialBatch, siteUrlToVerificationSite, sitemapNextActions, sitemapStatuses, submitSitemap, toIsoDate, unmappedInspectionReasons, unverifySite, unwrapResult, urlMatchKey, verificationMethodsFor, verifySite };
|
|
23
|
+
export { type AccountNextAction, type AccountStatus, AmpInspectionResult, AmpIssue, type AnalyticsNextAction, type AnalyticsStatus, ApiSite, ApiSitemap, ApiSitemapContent, Auth, AuthClient, AuthOptions, type BackfillProgress, BatchInspectUrlsFlatSettledOptions, CallOptions, CanonicalDifferenceKind, DAYS_PER_RANGE, DEFAULT_GSC_REQUEST_TIMEOUT_MS, DataRow, DimensionFilter, DimensionFilterGroup, Err, FetchSitesWithSitemapsOptions, GSCDUMP_ONBOARDING_CONTRACT_VERSION, GSCDUMP_OPTIONAL_INDEXING_SCOPE, GSCDUMP_REQUIRED_ANALYTICS_SCOPE, GSCDUMP_WRITE_ANALYTICS_SCOPE, GSC_FINALIZED_LAG_DAYS, GSC_FRESHEST_LAG_DAYS, GSC_INDEXING_SCOPE, GSC_READ_SCOPE, GSC_RETENTION_MONTHS, GSC_SITE_VERIFICATION_SCOPE, GSC_WRITE_SCOPE, GoogleSearchConsoleClient, GoogleSearchConsoleClientOptions, GscApiError, type GscApiErrorInfo, type GscError, type GscErrorKind, GscPropertyCandidate, type GscQuota, INDEXING_ISSUE_FILTERS, INDEXING_ISSUE_LABELS, INDEXING_ISSUE_SEVERITY, IndexStatusResult, IndexingEligibility, IndexingIneligibleReason, IndexingIssueType, IndexingMetadata, type IndexingNextAction, IndexingNotificationType, IndexingResult, type IndexingStatus, InspectUrlFlatSettledResult, InspectUrlIndexResponse, InspectUrlResult, InspectionPriority, KNOWN_COVERAGE_STATES, KNOWN_PAGE_FETCH_STATES, LegacyInspectionPriority, type LifecycleError, type LifecycleErrorCode, type LifecycleProgress, type LifecycleWebhookEnvelope, type LifecycleWebhookEvent, MAX_FLAT_INSPECTION_BATCH_CONCURRENCY, MS_PER_DAY, MobileUsabilityIssue, MobileUsabilityResult, OAuthTokenInfo, OAuthTokens, Ok, ParsedGscSiteUrl, ParsedIndexingResult, type PartnerLifecycleAccount, type PartnerLifecycleResponse, type PartnerLifecycleSite, Period, type PropertyNextAction, type PropertyStatus, PublishUrlNotificationResponse, QueryReturn, type QuerySourceMode, RequiredNonNullable, ResolvedAnalyticsRange, Result, RichResultsDetectedItem, RichResultsIssue, RichResultsItem, RichResultsResult, SearchAnalyticsMetadata, SearchAnalyticsQuery, SearchAnalyticsResponse, Site, SiteAnalytics, SiteCandidate, SiteResolution, type SitemapNextAction, type SitemapStatus, URL_INSPECTION_EFFECTIVE_LIMIT, URL_INSPECTION_QUOTA, UnmappedInspectionReasons, UrlInspectionResult, UrlNotification, UrlNotificationMetadata, ValueWeightedInspectionPriority, VerificationMethod, VerificationSite, VerificationSiteType, VerificationToken, VerificationWebResource, accountNextActions, accountStatuses, addDays, addSite, analyticsNextActions, analyticsStatuses, batchInspectUrls, batchInspectUrlsFlatSettled, batchRequestIndexing, canUseUrlInspection, classifyCanonicalDifference, classifyError, countDays, createAuth, createFetch, decodeSiteId, deleteSite, deleteSitemap, describeInspectionError, encodeSiteId, err, exchangeAuthCodeResult, fetchSitemap, fetchSitemaps, fetchSites, fetchSitesWithSitemaps, findBestGscProperty, findExactGscProperty, formatGscPropertyCandidates, generateGscDateRange, getBackfillProgress, getDateRange, getFreshestGscDate, getIndexingEligibility, getIndexingMetadata, getLatestGscDate, getNextCheckAfter, getNextCheckPriority, getNextDate, getOldestGscDate, getPendingDates, getPreviousDate, getPstDate, getVerificationToken, getVerifiedSite, googleSearchConsole, groupIntoRanges, gscErrorToException, gscPropertyMatchesTarget, hasGoogleScope, hasGscReadScope, hasGscWriteScope, hasIndexingScope, hasOptionalIndexingScope, hasRequiredAnalyticsScope, indexingNextActions, indexingStatuses, inspectUrl, inspectUrlFlat, introspectAccessToken, introspectAccessTokenResult, isCanonicalMismatch, isErr, isFragmentUrl, isOk, isPermissionDeniedError, isValidGscDate, isVerifiedGscPermission, isVerifiedGscProperty, lifecycleErrorCodes, listVerifiedSites, matchGscSite, normalizeGscSiteUrl, normalizeRegistrationTarget, normalizeSiteUrl, normalizeUrl, ok, parseGoogleError, parseGrantedScopes, parseGscSiteUrl, pickBestGscProperty, propertyNextActions, propertyStatuses, querySourceModes, refreshAccessToken, requestIndexing, resolveSiteInput, resolveVerificationTarget, rethrowAsGscApiError, revokeOAuthToken, revokeOAuthTokenResult, runSequentialBatch, siteUrlToVerificationSite, sitemapNextActions, sitemapStatuses, submitSitemap, toIsoDate, unmappedInspectionReasons, unverifySite, unwrapResult, urlMatchKey, verificationMethodsFor, verifySite };
|
package/dist/query/types.d.mts
CHANGED
|
@@ -57,7 +57,7 @@ export interface MetricColumn<M extends Metric> {
|
|
|
57
57
|
readonly __metricColumnBrand: 'gscdump.MetricColumn';
|
|
58
58
|
readonly metric: M;
|
|
59
59
|
}
|
|
60
|
-
export
|
|
60
|
+
export type BuilderState = {
|
|
61
61
|
dimensions: Dimension[];
|
|
62
62
|
metrics?: Metric[];
|
|
63
63
|
filter?: Filter<any>;
|
|
@@ -74,7 +74,7 @@ export interface BuilderState {
|
|
|
74
74
|
aggregationType?: GscAggregationType;
|
|
75
75
|
/** GSC search corpus. Wins over any `searchType` filter when both are set. */
|
|
76
76
|
searchType?: SearchType;
|
|
77
|
-
}
|
|
77
|
+
};
|
|
78
78
|
export interface JsonInternalFilter {
|
|
79
79
|
dimension: string;
|
|
80
80
|
operator: string;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gscdump",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "4.2.
|
|
4
|
+
"version": "4.2.3",
|
|
5
5
|
"description": "Direct Google Search Console and Bing Webmaster clients with typed queries and Indexing Evidence",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Harlan Wilton",
|
|
@@ -113,7 +113,7 @@
|
|
|
113
113
|
"node": ">=22.13.0"
|
|
114
114
|
},
|
|
115
115
|
"dependencies": {
|
|
116
|
-
"@gscdump/contracts": "^4.2.
|
|
116
|
+
"@gscdump/contracts": "^4.2.3",
|
|
117
117
|
"ofetch": "^1.5.1"
|
|
118
118
|
},
|
|
119
119
|
"scripts": {
|