@canonry/canonry 7.45.0 → 7.45.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/README.md +2 -0
- package/assets/agent-workspace/skills/canonry/references/google-business-profile.md +3 -3
- package/assets/assets/{AuditHistoryPanel-CZOskgSK.js → AuditHistoryPanel-BJDLPf4D.js} +1 -1
- package/assets/assets/{BacklinksPage-CgyR9Ydh.js → BacklinksPage-BDbYMh4s.js} +1 -1
- package/assets/assets/{HistoryPage-luN-L4CJ.js → HistoryPage-B9c7cjV4.js} +1 -1
- package/assets/assets/{MeasurementPropertyPage-B0vFWHFx.js → MeasurementPropertyPage-B2wDvzLz.js} +1 -1
- package/assets/assets/{ProjectPage-BkLOWkz9.js → ProjectPage-Cgj5ZmRt.js} +1 -1
- package/assets/assets/{RunsPage-CeW09PIZ.js → RunsPage-DNJpOT2C.js} +1 -1
- package/assets/assets/{SettingsPage-C4jww6eS.js → SettingsPage-BJABQP0W.js} +1 -1
- package/assets/assets/{SiteHealthSection-DXxY03vO.js → SiteHealthSection-Co-YnYL1.js} +3 -3
- package/assets/assets/{TrafficPage-DvUYZXne.js → TrafficPage-DGks1U43.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-DG-6Vn9Z.js → TrafficSourceDetailPage-B9EC-koW.js} +1 -1
- package/assets/assets/{extract-error-message-1VWodBea.js → extract-error-message-BnQj6MRg.js} +1 -1
- package/assets/assets/{index-rBPSQ6B7.js → index-CQ2txiby.js} +3 -3
- package/assets/assets/{react-sigma_core.esm.min-Cm1_Mhdd.js → react-sigma_core.esm.min-DMBVhOEe.js} +1 -1
- package/assets/assets/{v2-overview-adapter-DSOkIdKV.js → v2-overview-adapter-DUYXYO7p.js} +1 -1
- package/assets/index.html +1 -1
- package/dist/{chunk-K3AEOEB7.js → chunk-55QNMM7V.js} +3 -3
- package/dist/{chunk-3T3JQB2J.js → chunk-5A57TIOK.js} +2 -2
- package/dist/{chunk-3MGCNSUL.js → chunk-6333IHPS.js} +5 -0
- package/dist/{chunk-73YOKKHS.js → chunk-E7BG7QGP.js} +87 -68
- package/dist/{chunk-H4YKQAY7.js → chunk-KMMOYVAO.js} +3 -3
- package/dist/{chunk-A2RC2Y24.js → chunk-KVUBP25C.js} +20 -10
- package/dist/{chunk-JAQNHQGR.js → chunk-KZS5N3JH.js} +1 -1
- package/dist/{chunk-TH7WZBUX.js → chunk-MBOOXUPV.js} +23 -83
- package/dist/{chunk-D42JVABX.js → chunk-T2MBKWUP.js} +2 -2
- package/dist/{chunk-6HUFI2G5.js → chunk-ZJUP7CHK.js} +24 -18
- package/dist/{cli-catalog-6ABJHAAK.js → cli-catalog-E45QWSSR.js} +3 -3
- package/dist/cli-commands-E2TXR3OQ.js +15 -0
- package/dist/cli.js +10 -10
- package/dist/{demo-server-ZNK2UDRJ.js → demo-server-M45RUD4A.js} +5 -5
- package/dist/index.d.ts +33588 -4
- package/dist/index.js +6 -6
- package/dist/{intelligence-service-MDXUBZPJ.js → intelligence-service-FWOKBYOM.js} +2 -2
- package/dist/mcp.js +4 -4
- package/package.json +30 -30
- package/dist/cli-commands-OLFYNI6A.js +0 -15
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
trackFeatureCompleted,
|
|
32
32
|
trackIntegrationConnection,
|
|
33
33
|
waitForServerRuntimeStartup
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-KVUBP25C.js";
|
|
35
35
|
import {
|
|
36
36
|
clearDashboardPassword,
|
|
37
37
|
configExists,
|
|
@@ -50,7 +50,7 @@ import {
|
|
|
50
50
|
saveConfigPatch,
|
|
51
51
|
shouldPrintServeSkillsNudge,
|
|
52
52
|
withBootstrapProviderDefaults
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-5A57TIOK.js";
|
|
54
54
|
import {
|
|
55
55
|
emitJsonl,
|
|
56
56
|
getBoolean,
|
|
@@ -64,16 +64,20 @@ import {
|
|
|
64
64
|
resolveCliAccess,
|
|
65
65
|
stringOption,
|
|
66
66
|
unknownSubcommand
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-KZS5N3JH.js";
|
|
68
68
|
import {
|
|
69
69
|
DEFAULT_DEMO_TRUSTED_PROXIES,
|
|
70
70
|
trustedProxiesProblem,
|
|
71
71
|
trustedProxyProblem
|
|
72
72
|
} from "./chunk-RB2F4D3Z.js";
|
|
73
73
|
import {
|
|
74
|
+
dedupeGscSitemapUrls,
|
|
74
75
|
measurementDraftOperationSchema,
|
|
75
|
-
|
|
76
|
-
|
|
76
|
+
requireGscSitemapUrls,
|
|
77
|
+
resolveDiscoveredGscSitemapUrls,
|
|
78
|
+
runMeasurementDraftAction,
|
|
79
|
+
submitGscSitemapBatches
|
|
80
|
+
} from "./chunk-E7BG7QGP.js";
|
|
77
81
|
import {
|
|
78
82
|
CANONRY_DISCORD_URL,
|
|
79
83
|
CANONRY_ISSUES_URL,
|
|
@@ -118,7 +122,7 @@ import {
|
|
|
118
122
|
rawEventSamples,
|
|
119
123
|
readMarketCompetitorNames,
|
|
120
124
|
runs
|
|
121
|
-
} from "./chunk-
|
|
125
|
+
} from "./chunk-ZJUP7CHK.js";
|
|
122
126
|
import {
|
|
123
127
|
AdsDeliverySnapshotStatuses,
|
|
124
128
|
AdsHistoricalCampaignRollupStatuses,
|
|
@@ -274,7 +278,7 @@ import {
|
|
|
274
278
|
visibilityCompareSelectionSchema,
|
|
275
279
|
visibilityReportRequestSchema,
|
|
276
280
|
winnabilityClassSchema
|
|
277
|
-
} from "./chunk-
|
|
281
|
+
} from "./chunk-6333IHPS.js";
|
|
278
282
|
|
|
279
283
|
// src/cli-commands/sentiment.ts
|
|
280
284
|
import "zod";
|
|
@@ -582,7 +586,7 @@ function parseDemoTrustedProxies(values) {
|
|
|
582
586
|
async function demoCommand(options) {
|
|
583
587
|
const { host, port } = parseDemoListenOptions(options);
|
|
584
588
|
const trustProxy = parseDemoTrustedProxies(options.trustProxy);
|
|
585
|
-
const { createDemoServer } = await import("./demo-server-
|
|
589
|
+
const { createDemoServer } = await import("./demo-server-M45RUD4A.js");
|
|
586
590
|
const app = await createDemoServer({ trustProxy });
|
|
587
591
|
let stopping = false;
|
|
588
592
|
const stop = () => {
|
|
@@ -996,7 +1000,7 @@ No DB writes performed. Re-run without --dry-run to apply.`);
|
|
|
996
1000
|
}
|
|
997
1001
|
}
|
|
998
1002
|
async function backfillInsightsCommand(project2, opts) {
|
|
999
|
-
const { IntelligenceService } = await import("./intelligence-service-
|
|
1003
|
+
const { IntelligenceService } = await import("./intelligence-service-FWOKBYOM.js");
|
|
1000
1004
|
const config = loadConfig();
|
|
1001
1005
|
const db = createClient(config.database);
|
|
1002
1006
|
migrate(db);
|
|
@@ -10575,11 +10579,8 @@ function sitemapSubmittedUrlTotal(contents) {
|
|
|
10575
10579
|
if (!contents?.length) return "?";
|
|
10576
10580
|
return contents.reduce((total, content) => total + (Number.parseInt(content.submitted, 10) || 0), 0);
|
|
10577
10581
|
}
|
|
10578
|
-
function dedupeSitemapUrls(urls) {
|
|
10579
|
-
return [...new Set(urls.map((url) => url.trim()).filter(Boolean))];
|
|
10580
|
-
}
|
|
10581
10582
|
async function submitGscSitemaps(client, project2, opts) {
|
|
10582
|
-
const explicitUrls =
|
|
10583
|
+
const explicitUrls = dedupeGscSitemapUrls(opts.sitemapUrls ?? []);
|
|
10583
10584
|
const modes = Number(explicitUrls.length > 0) + Number(Boolean(opts.configured)) + Number(Boolean(opts.all)) + Number(Boolean(opts.allFiles));
|
|
10584
10585
|
if (modes !== 1) {
|
|
10585
10586
|
throw new CliError({
|
|
@@ -10609,77 +10610,16 @@ async function submitGscSitemaps(client, project2, opts) {
|
|
|
10609
10610
|
details: { command: "google.submit-sitemap", project: project2 }
|
|
10610
10611
|
});
|
|
10611
10612
|
}
|
|
10612
|
-
sitemapUrls =
|
|
10613
|
+
sitemapUrls = dedupeGscSitemapUrls([sitemapUrl]);
|
|
10613
10614
|
} else if (opts.all || opts.allFiles) {
|
|
10614
|
-
|
|
10615
|
-
|
|
10616
|
-
|
|
10617
|
-
|
|
10618
|
-
|
|
10619
|
-
|
|
10620
|
-
const indexes = topLevel.sitemaps.filter((sitemap) => sitemap.isSitemapsIndex).map((sitemap) => sitemap.path);
|
|
10621
|
-
const children = [];
|
|
10622
|
-
for (let offset = 0; offset < indexes.length; offset += 4) {
|
|
10623
|
-
children.push(...await Promise.all(
|
|
10624
|
-
indexes.slice(offset, offset + 4).map((sitemapIndex) => client.gscSitemaps(project2, { sitemapIndex }))
|
|
10625
|
-
));
|
|
10626
|
-
}
|
|
10627
|
-
const expandedIndexUrls = children.flatMap(
|
|
10628
|
-
(result, index) => result.sitemaps.length > 0 ? result.sitemaps.map((sitemap) => sitemap.path) : [indexes[index]]
|
|
10629
|
-
);
|
|
10630
|
-
sitemapUrls = dedupeSitemapUrls([
|
|
10631
|
-
...topLevel.sitemaps.filter((sitemap) => !sitemap.isSitemapsIndex).map((sitemap) => sitemap.path),
|
|
10632
|
-
...expandedIndexUrls
|
|
10633
|
-
]);
|
|
10634
|
-
}
|
|
10635
|
-
if (sitemapUrls.length === 0) {
|
|
10636
|
-
throw new CliError({
|
|
10637
|
-
code: "CLI_USAGE_ERROR",
|
|
10638
|
-
message: "no GSC sitemaps found; provide a URL or use --configured",
|
|
10639
|
-
displayMessage: "Error: no GSC sitemaps found; provide a URL or use --configured",
|
|
10640
|
-
details: { command: "google.submit-sitemap", project: project2 }
|
|
10641
|
-
});
|
|
10642
|
-
}
|
|
10643
|
-
}
|
|
10644
|
-
const batches = opts.all || opts.allFiles ? Array.from({ length: Math.ceil(sitemapUrls.length / 50) }, (_, index) => sitemapUrls.slice(index * 50, index * 50 + 50)) : [sitemapUrls];
|
|
10645
|
-
const aggregate = {
|
|
10646
|
-
summary: { total: 0, accepted: 0, failed: 0 },
|
|
10647
|
-
results: []
|
|
10648
|
-
};
|
|
10649
|
-
for (const [index, batchSitemapUrls] of batches.entries()) {
|
|
10650
|
-
try {
|
|
10651
|
-
const result = await client.gscSubmitSitemaps(project2, { sitemapUrls: batchSitemapUrls });
|
|
10652
|
-
aggregate.summary.total += result.summary.total;
|
|
10653
|
-
aggregate.summary.accepted += result.summary.accepted;
|
|
10654
|
-
aggregate.summary.failed += result.summary.failed;
|
|
10655
|
-
aggregate.results.push(...result.results);
|
|
10656
|
-
opts.onProgress?.(index + 1, batches.length);
|
|
10657
|
-
} catch (cause) {
|
|
10658
|
-
if (index === 0) throw cause;
|
|
10659
|
-
const attempted = aggregate.summary.total + batchSitemapUrls.length;
|
|
10660
|
-
const remaining = sitemapUrls.length - attempted;
|
|
10661
|
-
const causeDetails = cause instanceof CliError ? { code: cause.code, message: cause.message, details: cause.details } : { message: describeError(cause) };
|
|
10662
|
-
throw new CliError({
|
|
10663
|
-
code: "GOOGLE_SITEMAP_SUBMISSION_PARTIAL",
|
|
10664
|
-
message: `Sitemap submission stopped at batch ${index + 1}/${batches.length}; ${aggregate.summary.accepted} accepted, ${aggregate.summary.failed} failed, ${batchSitemapUrls.length} unconfirmed, ${remaining} not attempted.`,
|
|
10665
|
-
displayMessage: `Sitemap submission stopped at batch ${index + 1}/${batches.length}; ${aggregate.summary.accepted} accepted, ${aggregate.summary.failed} failed, ${batchSitemapUrls.length} unconfirmed, ${remaining} not attempted. Earlier accepted submissions were not rolled back.`,
|
|
10666
|
-
exitCode: cause instanceof CliError && cause.exitCode === 1 ? 1 : EXIT_SYSTEM_ERROR,
|
|
10667
|
-
details: {
|
|
10668
|
-
project: project2,
|
|
10669
|
-
accepted: aggregate.summary.accepted,
|
|
10670
|
-
failed: aggregate.summary.failed,
|
|
10671
|
-
completed: aggregate.summary.total,
|
|
10672
|
-
attempted,
|
|
10673
|
-
unconfirmed: batchSitemapUrls.length,
|
|
10674
|
-
remaining,
|
|
10675
|
-
unconfirmedBatch: { index: index + 1, total: batches.length, sitemapUrls: batchSitemapUrls },
|
|
10676
|
-
partialResult: aggregate,
|
|
10677
|
-
cause: causeDetails
|
|
10678
|
-
}
|
|
10679
|
-
});
|
|
10680
|
-
}
|
|
10615
|
+
sitemapUrls = await resolveDiscoveredGscSitemapUrls(
|
|
10616
|
+
client,
|
|
10617
|
+
project2,
|
|
10618
|
+
opts.allFiles ? "all-files" : "indexes"
|
|
10619
|
+
);
|
|
10620
|
+
requireGscSitemapUrls(project2, sitemapUrls);
|
|
10681
10621
|
}
|
|
10682
|
-
return
|
|
10622
|
+
return submitGscSitemapBatches(client, project2, sitemapUrls, opts);
|
|
10683
10623
|
}
|
|
10684
10624
|
async function googleSubmitSitemaps(project2, opts) {
|
|
10685
10625
|
const client = getClient11();
|
|
@@ -19438,7 +19378,7 @@ var SYSTEM_CLI_COMMANDS = [
|
|
|
19438
19378
|
options: { access: stringOption() },
|
|
19439
19379
|
run: async (input) => {
|
|
19440
19380
|
if (input.positionals.length > 1) throw usageError("Expected at most one command group");
|
|
19441
|
-
const [{ printCliCatalog }, { REGISTERED_CLI_COMMANDS: REGISTERED_CLI_COMMANDS2 }] = await Promise.all([import("./cli-catalog-
|
|
19381
|
+
const [{ printCliCatalog }, { REGISTERED_CLI_COMMANDS: REGISTERED_CLI_COMMANDS2 }] = await Promise.all([import("./cli-catalog-E45QWSSR.js"), import("./cli-commands-E2TXR3OQ.js")]);
|
|
19442
19382
|
printCliCatalog(REGISTERED_CLI_COMMANDS2, input.format, input.positionals[0], getString(input.values, "access"));
|
|
19443
19383
|
}
|
|
19444
19384
|
},
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
siteCrawlGraphNodes,
|
|
6
6
|
siteCrawlPages,
|
|
7
7
|
siteCrawlSnapshots
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-ZJUP7CHK.js";
|
|
9
9
|
import {
|
|
10
10
|
SITE_CRAWL_GRAPH_MAX_EDGES,
|
|
11
11
|
SITE_CRAWL_GRAPH_MAX_NODES,
|
|
@@ -15,7 +15,7 @@ import {
|
|
|
15
15
|
factorStatusFromDistribution,
|
|
16
16
|
factorStatusFromScore,
|
|
17
17
|
roundPreservingTotal
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-6333IHPS.js";
|
|
19
19
|
|
|
20
20
|
// src/site-audit-factors.ts
|
|
21
21
|
function recordedSharePct(factor) {
|
|
@@ -483,6 +483,7 @@ import {
|
|
|
483
483
|
googleMarketingOAuthConnectRequestSchema,
|
|
484
484
|
googleMarketingOAuthConnectResponseSchema,
|
|
485
485
|
googleMarketingProviderSchema,
|
|
486
|
+
googleOAuthStartResponseSchema,
|
|
486
487
|
gradedReportMonths,
|
|
487
488
|
groupIsoDateRanges,
|
|
488
489
|
gscCoverageSnapshotDtoSchema,
|
|
@@ -912,7 +913,7 @@ import {
|
|
|
912
913
|
wordpressSchemaDeployResultDtoSchema,
|
|
913
914
|
wordpressSchemaStatusResultDtoSchema,
|
|
914
915
|
wordpressStatusDtoSchema
|
|
915
|
-
} from "./chunk-
|
|
916
|
+
} from "./chunk-6333IHPS.js";
|
|
916
917
|
|
|
917
918
|
// src/intelligence-service.ts
|
|
918
919
|
import { eq as eq99, desc as desc45, asc as asc20, and as and82, ne as ne17, or as or24, inArray as inArray40, gte as gte26, lte as lte23, isNull as isNull19, sql as sql37, exists as exists2 } from "drizzle-orm";
|
|
@@ -2548,7 +2549,7 @@ var gaTrafficSnapshots = sqliteTable("ga_traffic_snapshots", {
|
|
|
2548
2549
|
landingPage: text("landing_page").notNull(),
|
|
2549
2550
|
/**
|
|
2550
2551
|
* Canonicalized form of `landingPage` produced by `normalizeUrlPath()` in
|
|
2551
|
-
* `@
|
|
2552
|
+
* `@canonry/canonry-contracts`. Nullable so existing rows survive migration;
|
|
2552
2553
|
* new GA4 sync writes populate it. Per-page aggregations should
|
|
2553
2554
|
* `GROUP BY COALESCE(landing_page_normalized, landing_page)` so
|
|
2554
2555
|
* partially-backfilled state still aggregates correctly.
|
|
@@ -40381,6 +40382,7 @@ var SCHEMA_TABLE = {
|
|
|
40381
40382
|
GoogleMarketingDisconnectResponse: googleMarketingDisconnectResponseSchema,
|
|
40382
40383
|
GoogleMarketingOAuthConnectRequest: googleMarketingOAuthConnectRequestSchema,
|
|
40383
40384
|
GoogleMarketingOAuthConnectResponse: googleMarketingOAuthConnectResponseSchema,
|
|
40385
|
+
GoogleOAuthStartResponse: googleOAuthStartResponseSchema,
|
|
40384
40386
|
GscCoverageSnapshotDto: gscCoverageSnapshotDtoSchema,
|
|
40385
40387
|
GscCoverageSummaryDto: gscCoverageSummaryDtoSchema,
|
|
40386
40388
|
GscDeindexedRowDto: gscDeindexedRowSchema,
|
|
@@ -44526,7 +44528,7 @@ var routeCatalog = [
|
|
|
44526
44528
|
}
|
|
44527
44529
|
},
|
|
44528
44530
|
responses: {
|
|
44529
|
-
200:
|
|
44531
|
+
200: jsonResponse("Google auth URL returned.", "GoogleOAuthStartResponse"),
|
|
44530
44532
|
400: errorResponse("Invalid Google connection request.")
|
|
44531
44533
|
}
|
|
44532
44534
|
},
|
|
@@ -51084,6 +51086,7 @@ async function fetchSearchLandingPages(accessToken, propertyId, options = {}) {
|
|
|
51084
51086
|
var GBP_SCOPE = "https://www.googleapis.com/auth/business.manage";
|
|
51085
51087
|
var GBP_ACCOUNT_MANAGEMENT_BASE = "https://mybusinessaccountmanagement.googleapis.com/v1";
|
|
51086
51088
|
var GBP_BUSINESS_INFO_BASE = "https://mybusinessbusinessinformation.googleapis.com/v1";
|
|
51089
|
+
var GBP_PLACE_ACTIONS_BASE = "https://mybusinessplaceactions.googleapis.com/v1";
|
|
51087
51090
|
var GBP_LEGACY_V4_BASE = "https://mybusiness.googleapis.com/v4";
|
|
51088
51091
|
var GBP_PERFORMANCE_BASE = "https://businessprofileperformance.googleapis.com/v1";
|
|
51089
51092
|
var GBP_LODGING_BASE = "https://mybusinesslodging.googleapis.com/v1";
|
|
@@ -51353,7 +51356,7 @@ async function listPlaceActionLinks(accessToken, locationName, opts = {}) {
|
|
|
51353
51356
|
let pageToken;
|
|
51354
51357
|
let page3 = 0;
|
|
51355
51358
|
do {
|
|
51356
|
-
const url = new URL(`${
|
|
51359
|
+
const url = new URL(`${GBP_PLACE_ACTIONS_BASE}/${locationName}/placeActionLinks`);
|
|
51357
51360
|
url.searchParams.set("pageSize", String(GBP_DEFAULT_PAGE_SIZE));
|
|
51358
51361
|
if (pageToken) url.searchParams.set("pageToken", pageToken);
|
|
51359
51362
|
const res = await gbpFetchGet(url.toString(), accessToken, opts);
|
|
@@ -51617,6 +51620,18 @@ function isSitemapOwnedByProperty(sitemapUrl, propertyId, canonicalDomain) {
|
|
|
51617
51620
|
return false;
|
|
51618
51621
|
}
|
|
51619
51622
|
}
|
|
51623
|
+
function googleConnectionDto(connection) {
|
|
51624
|
+
return {
|
|
51625
|
+
id: `${connection.domain}:${connection.connectionType}`,
|
|
51626
|
+
domain: connection.domain,
|
|
51627
|
+
connectionType: connection.connectionType,
|
|
51628
|
+
propertyId: connection.propertyId ?? null,
|
|
51629
|
+
sitemapUrl: connection.sitemapUrl ?? null,
|
|
51630
|
+
scopes: connection.scopes ?? [],
|
|
51631
|
+
createdAt: connection.createdAt,
|
|
51632
|
+
updatedAt: connection.updatedAt
|
|
51633
|
+
};
|
|
51634
|
+
}
|
|
51620
51635
|
async function getValidToken(store, domain, connectionType, clientId, clientSecret) {
|
|
51621
51636
|
const conn = store.getConnection(domain, connectionType);
|
|
51622
51637
|
if (!conn) {
|
|
@@ -51750,16 +51765,7 @@ async function googleRoutes(app, opts) {
|
|
|
51750
51765
|
app.get("/projects/:name/google/connections", async (request) => {
|
|
51751
51766
|
const project = resolveProject(app.db, request.params.name);
|
|
51752
51767
|
const conns = opts.googleConnectionStore?.listConnections(project.canonicalDomain) ?? [];
|
|
51753
|
-
return conns.map(
|
|
51754
|
-
id: `${connection.domain}:${connection.connectionType}`,
|
|
51755
|
-
domain: connection.domain,
|
|
51756
|
-
connectionType: connection.connectionType,
|
|
51757
|
-
propertyId: connection.propertyId ?? null,
|
|
51758
|
-
sitemapUrl: connection.sitemapUrl ?? null,
|
|
51759
|
-
scopes: connection.scopes ?? [],
|
|
51760
|
-
createdAt: connection.createdAt,
|
|
51761
|
-
updatedAt: connection.updatedAt
|
|
51762
|
-
}));
|
|
51768
|
+
return conns.map(googleConnectionDto);
|
|
51763
51769
|
});
|
|
51764
51770
|
app.post("/projects/:name/google/connect", connectionRoute(app, (request) => {
|
|
51765
51771
|
const integration = googleIntegration(request.body?.type);
|
|
@@ -52694,7 +52700,7 @@ async function googleRoutes(app, opts) {
|
|
|
52694
52700
|
if (!conn) {
|
|
52695
52701
|
throw notFound("Google connection", request.params.type);
|
|
52696
52702
|
}
|
|
52697
|
-
return
|
|
52703
|
+
return googleConnectionDto(conn);
|
|
52698
52704
|
});
|
|
52699
52705
|
app.put("/projects/:name/google/connections/:type/property", connectionRoute(app, (request) => {
|
|
52700
52706
|
const integration = googleIntegration(request.params.type);
|
|
@@ -52715,7 +52721,7 @@ async function googleRoutes(app, opts) {
|
|
|
52715
52721
|
attempt.failed(void 0, "NOT_CONNECTED");
|
|
52716
52722
|
throw notFound("Google connection", request.params.type);
|
|
52717
52723
|
}
|
|
52718
|
-
return
|
|
52724
|
+
return googleConnectionDto(conn);
|
|
52719
52725
|
}));
|
|
52720
52726
|
app.post("/projects/:name/google/indexing/request", async (request) => {
|
|
52721
52727
|
const { clientId: googleClientId, clientSecret: googleClientSecret } = getAuthConfig();
|
|
@@ -87484,7 +87490,7 @@ var INTEGRATION_SYNC_CHECKS = SPECS.map((spec) => ({
|
|
|
87484
87490
|
var API_HOST_TABLE = {
|
|
87485
87491
|
gsc: [new URL(GSC_API_BASE).hostname, new URL(URL_INSPECTION_API).hostname, new URL(GOOGLE_TOKEN_URL).hostname],
|
|
87486
87492
|
ga: [new URL(GA4_DATA_API_BASE).hostname, new URL(GA4_ADMIN_API_BASE).hostname, new URL(GOOGLE_TOKEN_URL).hostname],
|
|
87487
|
-
gbp: [new URL(GBP_ACCOUNT_MANAGEMENT_BASE).hostname, new URL(GBP_BUSINESS_INFO_BASE).hostname, new URL(GBP_PERFORMANCE_BASE).hostname, new URL(GBP_LEGACY_V4_BASE).hostname, new URL(GBP_LODGING_BASE).hostname, new URL(GOOGLE_TOKEN_URL).hostname],
|
|
87493
|
+
gbp: [new URL(GBP_ACCOUNT_MANAGEMENT_BASE).hostname, new URL(GBP_BUSINESS_INFO_BASE).hostname, new URL(GBP_PLACE_ACTIONS_BASE).hostname, new URL(GBP_PERFORMANCE_BASE).hostname, new URL(GBP_LEGACY_V4_BASE).hostname, new URL(GBP_LODGING_BASE).hostname, new URL(GOOGLE_TOKEN_URL).hostname],
|
|
87488
87494
|
"google-ads": ["googleads.googleapis.com", "oauth2.googleapis.com"],
|
|
87489
87495
|
gtm: ["tagmanager.googleapis.com", "oauth2.googleapis.com"],
|
|
87490
87496
|
bing: [new URL(BING_WMT_API_BASE).hostname],
|
|
@@ -95329,7 +95335,7 @@ var IntelligenceService = class {
|
|
|
95329
95335
|
/**
|
|
95330
95336
|
* Re-classify each regression insight's severity using GSC traffic +
|
|
95331
95337
|
* recurrence signals via the pure `classifyRegressionSeverity` primitive
|
|
95332
|
-
* in @
|
|
95338
|
+
* in @canonry/canonry-intelligence. Non-regression insights are returned
|
|
95333
95339
|
* untouched.
|
|
95334
95340
|
*/
|
|
95335
95341
|
applySeverityTiering(rawInsights, excludeRunId, projectId) {
|
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
buildCliCatalog,
|
|
4
4
|
printCliCatalog,
|
|
5
5
|
renderTopLevelHelp
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-KMMOYVAO.js";
|
|
7
|
+
import "./chunk-KZS5N3JH.js";
|
|
8
8
|
import "./chunk-HGMYEDAQ.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-6333IHPS.js";
|
|
10
10
|
export {
|
|
11
11
|
CLI_ROOT_SUMMARIES,
|
|
12
12
|
buildCliCatalog,
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import {
|
|
2
|
+
REGISTERED_CLI_COMMANDS
|
|
3
|
+
} from "./chunk-MBOOXUPV.js";
|
|
4
|
+
import "./chunk-KVUBP25C.js";
|
|
5
|
+
import "./chunk-5A57TIOK.js";
|
|
6
|
+
import "./chunk-KZS5N3JH.js";
|
|
7
|
+
import "./chunk-RB2F4D3Z.js";
|
|
8
|
+
import "./chunk-T2MBKWUP.js";
|
|
9
|
+
import "./chunk-E7BG7QGP.js";
|
|
10
|
+
import "./chunk-HGMYEDAQ.js";
|
|
11
|
+
import "./chunk-ZJUP7CHK.js";
|
|
12
|
+
import "./chunk-6333IHPS.js";
|
|
13
|
+
export {
|
|
14
|
+
REGISTERED_CLI_COMMANDS
|
|
15
|
+
};
|
package/dist/cli.js
CHANGED
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
import {
|
|
3
3
|
autoSyncSkills,
|
|
4
4
|
formatAutoSyncNotice
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-55QNMM7V.js";
|
|
6
6
|
import {
|
|
7
7
|
accessFilterFromArgs,
|
|
8
8
|
dispatchRegisteredCommand,
|
|
9
9
|
printCliCatalog
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-KMMOYVAO.js";
|
|
11
11
|
import {
|
|
12
12
|
REGISTERED_CLI_COMMANDS,
|
|
13
13
|
buildSetupState,
|
|
14
14
|
consumePendingServeHandoff,
|
|
15
15
|
serveCommand
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-MBOOXUPV.js";
|
|
17
17
|
import {
|
|
18
18
|
checkLatestVersionForCli,
|
|
19
19
|
cliRuntimeContext,
|
|
@@ -27,14 +27,14 @@ import {
|
|
|
27
27
|
showFirstRunNotice,
|
|
28
28
|
trackCliCommandFinished,
|
|
29
29
|
trackEvent
|
|
30
|
-
} from "./chunk-
|
|
31
|
-
import "./chunk-
|
|
30
|
+
} from "./chunk-KVUBP25C.js";
|
|
31
|
+
import "./chunk-5A57TIOK.js";
|
|
32
32
|
import {
|
|
33
33
|
resolveCliAccess
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-KZS5N3JH.js";
|
|
35
35
|
import "./chunk-RB2F4D3Z.js";
|
|
36
|
-
import "./chunk-
|
|
37
|
-
import "./chunk-
|
|
36
|
+
import "./chunk-T2MBKWUP.js";
|
|
37
|
+
import "./chunk-E7BG7QGP.js";
|
|
38
38
|
import {
|
|
39
39
|
CliError,
|
|
40
40
|
EXIT_SYSTEM_ERROR,
|
|
@@ -42,10 +42,10 @@ import {
|
|
|
42
42
|
printCliError,
|
|
43
43
|
usageError
|
|
44
44
|
} from "./chunk-HGMYEDAQ.js";
|
|
45
|
-
import "./chunk-
|
|
45
|
+
import "./chunk-ZJUP7CHK.js";
|
|
46
46
|
import {
|
|
47
47
|
OperationAccesses
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-6333IHPS.js";
|
|
49
49
|
|
|
50
50
|
// src/cli.ts
|
|
51
51
|
import { pathToFileURL } from "url";
|
|
@@ -5,11 +5,11 @@ import {
|
|
|
5
5
|
computeFactorAverages,
|
|
6
6
|
layoutSiteCrawlGraphInput,
|
|
7
7
|
persistSiteCrawlGraphLayout
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-T2MBKWUP.js";
|
|
9
9
|
import {
|
|
10
10
|
PACKAGE_VERSION,
|
|
11
11
|
canonryMcpTools
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-E7BG7QGP.js";
|
|
13
13
|
import "./chunk-HGMYEDAQ.js";
|
|
14
14
|
import {
|
|
15
15
|
HISTORY_WINDOW_RUNS,
|
|
@@ -86,7 +86,7 @@ import {
|
|
|
86
86
|
siteCrawlPages,
|
|
87
87
|
siteCrawlSnapshots,
|
|
88
88
|
trafficSources
|
|
89
|
-
} from "./chunk-
|
|
89
|
+
} from "./chunk-ZJUP7CHK.js";
|
|
90
90
|
import {
|
|
91
91
|
RunKinds,
|
|
92
92
|
SiteCrawlFetchStates,
|
|
@@ -116,7 +116,7 @@ import {
|
|
|
116
116
|
roundPreservingTotal,
|
|
117
117
|
siteAuditPageFactorSchema,
|
|
118
118
|
wilsonInterval
|
|
119
|
-
} from "./chunk-
|
|
119
|
+
} from "./chunk-6333IHPS.js";
|
|
120
120
|
|
|
121
121
|
// src/demo-server.ts
|
|
122
122
|
import { dirname, join as join2 } from "path";
|
|
@@ -1882,7 +1882,7 @@ function harborDraft(plan) {
|
|
|
1882
1882
|
label: target.label,
|
|
1883
1883
|
status: "included",
|
|
1884
1884
|
aliases: target.aliases,
|
|
1885
|
-
urlMatchers: target.urlMatchers.map((matcher) => matcher.kind === "prefix" ? `https://${matcher.host}${matcher.pathPrefix}/*` : matcher.kind === "host" ? matcher.host : matcher.url),
|
|
1885
|
+
urlMatchers: target.urlMatchers.map((matcher) => matcher.kind === "prefix" ? `https://${matcher.host}${matcher.pathPrefix === "/" ? "" : matcher.pathPrefix}/*` : matcher.kind === "host" ? matcher.host : matcher.url),
|
|
1886
1886
|
source: "sitemap",
|
|
1887
1887
|
discoveredUrl: `https://${target.urlMatchers[0].kind === "prefix" ? target.urlMatchers[0].host + target.urlMatchers[0].pathPrefix : "harbor-resorts.example"}`,
|
|
1888
1888
|
discoveryIdentity: target.discoveryIdentity ?? void 0
|