@canonry/canonry 7.59.0 → 7.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/agent-workspace/skills/aero/SKILL.md +2 -1
- package/assets/agent-workspace/skills/canonry/references/canonry-cli.md +20 -5
- package/assets/agent-workspace/skills/canonry/references/server-side-traffic.md +6 -3
- package/assets/assets/{AgentSetupPage-DH2Mi2Q7.js → AgentSetupPage-CCMNQwRE.js} +1 -1
- package/assets/assets/{AuditHistoryPanel-DVIQR5y5.js → AuditHistoryPanel-B8mIRI3I.js} +1 -1
- package/assets/assets/{BacklinksPage-DFFeaSbH.js → BacklinksPage-BNLyIR97.js} +1 -1
- package/assets/assets/{HistoryPage-BxDhO9rm.js → HistoryPage-DSr9KE16.js} +1 -1
- package/assets/assets/InfoTooltip-BbdxCAup.js +1 -0
- package/assets/assets/{MeasurementPropertyPage-B0AkDYxY.js → MeasurementPropertyPage-BTg-SFW7.js} +1 -1
- package/assets/assets/{ProjectPage-6_HOcytx.js → ProjectPage-SqE0fkEq.js} +7 -7
- package/assets/assets/{RunsPage-BUK5EqC6.js → RunsPage-gJR17ho1.js} +1 -1
- package/assets/assets/{SettingsPage-CuBUZ4TN.js → SettingsPage-DY5f_oN4.js} +1 -1
- package/assets/assets/{SiteHealthSection-CoyiSleA.js → SiteHealthSection-BYx91hP-.js} +2 -2
- package/assets/assets/ToneBadge-C3S7aVf3.js +60 -0
- package/assets/assets/{TrafficPage-BE9Ay-x-.js → TrafficPage-CCXH5nhh.js} +1 -1
- package/assets/assets/{TrafficSourceDetailPage-kW0DFcwB.js → TrafficSourceDetailPage-DTjCsu4-.js} +1 -1
- package/assets/assets/{account-context-IN6VE8PV.js → account-context-DozTQM44.js} +1 -1
- package/assets/assets/{card-DiBSxANp.js → card-D8MU7RYV.js} +1 -1
- package/assets/assets/{extract-error-message-_H20efSf.js → extract-error-message-CsVYPTyt.js} +1 -1
- package/assets/assets/{format-helpers-DKjsmbxo.js → format-helpers-CWBooMJJ.js} +1 -1
- package/assets/assets/{index-B1kVq-wC.js → index-D5o-caTl.js} +4 -4
- package/assets/assets/index-DqhMdZUM.css +1 -0
- package/assets/assets/{query-client-BXS2w17E.js → query-client-DbxlHfUm.js} +1 -1
- package/assets/assets/{react-query-B8oOFCyW.js → react-query-D4ZSMg7h.js} +1 -1
- package/assets/assets/{react-sigma_core.esm.min-Bf_kjp11.js → react-sigma_core.esm.min-CSRp4hew.js} +1 -1
- package/assets/assets/{service-D9noo7pB.js → service-CYzJmCXU.js} +1 -1
- package/assets/index.html +9 -9
- package/dist/{ads-6NAIIZGO.js → ads-BGCHIYH7.js} +3 -3
- package/dist/{agent-LISFS4WR.js → agent-JPTVPRNF.js} +7 -7
- package/dist/{agent-ask-JJM34LMD.js → agent-ask-BUA2AOYT.js} +3 -3
- package/dist/{agent-conversations-4JNBIBVR.js → agent-conversations-GLTN6QIK.js} +3 -3
- package/dist/{agent-memory-I2M7TIWO.js → agent-memory-XON2PCI3.js} +3 -3
- package/dist/{agent-providers-3ZX3RETW.js → agent-providers-QVF3QILF.js} +3 -3
- package/dist/{agent-transcript-OYK4O5XV.js → agent-transcript-LZI4PBF4.js} +3 -3
- package/dist/{analytics-7HW2FSST.js → analytics-Y7ZAOJIG.js} +30 -8
- package/dist/{apply-S2OC6S65.js → apply-VPBTAFUO.js} +3 -3
- package/dist/{backfill-EUHHN4VT.js → backfill-OI5UPJOS.js} +9 -9
- package/dist/{backlinks-AY5EMVN4.js → backlinks-O6MOB6BM.js} +3 -3
- package/dist/{bing-KJW2LYAT.js → bing-T4FGT4QG.js} +3 -3
- package/dist/{bootstrap-3R4AMSY4.js → bootstrap-NAAROTPL.js} +10 -10
- package/dist/{cdp-URC66DX5.js → cdp-ZYDKLCJM.js} +7 -7
- package/dist/{chunk-O7BPIPJB.js → chunk-2E4GJQJ4.js} +2 -2
- package/dist/{chunk-LJRXJHWJ.js → chunk-2H3E7BDF.js} +1 -1
- package/dist/{chunk-KLPRF4PA.js → chunk-5JFEK7IL.js} +1 -1
- package/dist/{chunk-PZUMERGZ.js → chunk-5ZINPM6W.js} +1 -1
- package/dist/{chunk-JLDTGMVQ.js → chunk-7FTOEVLL.js} +2 -2
- package/dist/{chunk-PSRJYRAD.js → chunk-AAKVFLL3.js} +8 -8
- package/dist/{chunk-B4N5L6NF.js → chunk-BOIZ6IET.js} +5 -5
- package/dist/{chunk-X3UXPAT7.js → chunk-D7DOTPNP.js} +2 -2
- package/dist/{chunk-LWKHCQ46.js → chunk-GDVMHIY4.js} +7 -6
- package/dist/{chunk-FA7RDZ43.js → chunk-HF4ARGGH.js} +1 -1
- package/dist/{chunk-GS6IH7CI.js → chunk-HQKTZH7L.js} +351 -337
- package/dist/{chunk-TJ4UAO7R.js → chunk-JHYLKXUV.js} +31 -4
- package/dist/{chunk-KCO3PGDZ.js → chunk-K2TRV65V.js} +1 -1
- package/dist/{chunk-ON7D53WE.js → chunk-L3W6UCTQ.js} +3 -3
- package/dist/{chunk-EED2QEE7.js → chunk-M6KKI7FB.js} +1 -1
- package/dist/{chunk-3WRDJJOY.js → chunk-MIV52IYY.js} +1 -1
- package/dist/{chunk-PP7HR4II.js → chunk-MSEOZUBH.js} +4 -4
- package/dist/{chunk-WSFCQQ7F.js → chunk-O5WQN3GW.js} +96 -21
- package/dist/{chunk-Y54KA37X.js → chunk-OFV6CZ2K.js} +1 -1
- package/dist/{chunk-VWO4WRQM.js → chunk-OQDVG7K7.js} +3 -3
- package/dist/{chunk-VRI3UDRA.js → chunk-OTOVHA7D.js} +1 -1
- package/dist/{chunk-QF5C3JXL.js → chunk-ST7JA3UW.js} +1 -1
- package/dist/{chunk-SXDAIG5W.js → chunk-TD623G6F.js} +1 -1
- package/dist/{chunk-EJZ4TQQR.js → chunk-TQLXCGRD.js} +2 -2
- package/dist/{chunk-TKX4G4NV.js → chunk-UQVOB3OH.js} +4 -4
- package/dist/{chunk-RFXO5GPB.js → chunk-UX6KFIIE.js} +3 -3
- package/dist/{chunk-HUO3YPKB.js → chunk-V3XAJCO3.js} +24 -3
- package/dist/{chunk-SEBIXQEN.js → chunk-VMXMJWTB.js} +3 -3
- package/dist/{chunk-HKLI6ZFP.js → chunk-WWPADIGG.js} +20 -20
- package/dist/{chunk-MTKXD4WY.js → chunk-XKAH5XYT.js} +2 -2
- package/dist/{chunk-PTKFLEVN.js → chunk-XRQCRDTF.js} +5 -4
- package/dist/{chunk-PDS77GLS.js → chunk-YEH26F57.js} +4 -4
- package/dist/{chunk-WUVX5HBI.js → chunk-YGHUT4F7.js} +1 -1
- package/dist/{chunk-OTQFHUIH.js → chunk-YWQCJQPV.js} +5 -5
- package/dist/{citations-DAXUWNKQ.js → citations-6SR5QG7C.js} +3 -3
- package/dist/{cli-catalog-ORQPYKHI.js → cli-catalog-VILBDFBX.js} +3 -3
- package/dist/{cli-commands-SDTHXYWU.js → cli-commands-BCYMNTYY.js} +7 -7
- package/dist/cli.js +13 -13
- package/dist/{competitor-QPL47DA6.js → competitor-XQESNR2X.js} +3 -3
- package/dist/{content-V5NLV3AH.js → content-B6H2Y6NI.js} +3 -3
- package/dist/{dashboard-CZEO2UTG.js → dashboard-NW3HWXVM.js} +6 -6
- package/dist/{demo-JZS5DBSR.js → demo-3CB6CWSG.js} +1 -1
- package/dist/{demo-server-OAYVJVGC.js → demo-server-EGSJGYN5.js} +11 -11
- package/dist/{discover-TEEHJPLW.js → discover-W5R7QVT4.js} +3 -3
- package/dist/{discover-eval-4I25W4VL.js → discover-eval-KXTQYYAT.js} +3 -3
- package/dist/{doctor-VR6YKJSW.js → doctor-BVQ5G5FY.js} +3 -3
- package/dist/{evidence-SISRJ4YZ.js → evidence-R2OHKHMB.js} +3 -3
- package/dist/{export-cmd-L5LKHKBY.js → export-cmd-2D42QGE6.js} +3 -3
- package/dist/{ga-WQQVWU5Q.js → ga-FE7E7FK5.js} +3 -3
- package/dist/{gbp-XKRX7ZJY.js → gbp-ML4MJFMR.js} +3 -3
- package/dist/{google-TUEMVVGE.js → google-3D52XYTJ.js} +4 -4
- package/dist/{google-marketing-JWAJXNWR.js → google-marketing-GDMMQVC5.js} +1 -1
- package/dist/{health-cmd-2OQEIQMG.js → health-cmd-QEW6GNJP.js} +3 -3
- package/dist/{history-33VEX442.js → history-O7CL762R.js} +3 -3
- package/dist/index.js +24 -24
- package/dist/{init-QMLVST26.js → init-N3WI6WIQ.js} +11 -11
- package/dist/{insights-6VIXDNVK.js → insights-RBORMIBR.js} +3 -3
- package/dist/intelligence-service-GIQUBLBU.js +15 -0
- package/dist/{journeys-7YJLJ34F.js → journeys-62MQCBGH.js} +3 -3
- package/dist/{keys-I7Z5CGEQ.js → keys-A7PCG4S7.js} +3 -3
- package/dist/{keyword-OPTT3EXO.js → keyword-IU6OBCF6.js} +3 -3
- package/dist/{logs-35L2ZWRO.js → logs-FJJDRRGT.js} +3 -3
- package/dist/{mcp-JWB42VTJ.js → mcp-RJFSEI5Q.js} +2 -2
- package/dist/mcp.js +9 -9
- package/dist/{measurement-plan-UWA2N6FO.js → measurement-plan-M65GWWVK.js} +5 -5
- package/dist/{notify-FE7FSXDB.js → notify-E555NEWB.js} +3 -3
- package/dist/{organic-evidence-34EKPGKI.js → organic-evidence-L3HSIHKB.js} +3 -3
- package/dist/{overview-HPY5I6ZT.js → overview-DIUMXQHP.js} +4 -4
- package/dist/{project-5CCX7VNR.js → project-BTRIU4ZZ.js} +3 -3
- package/dist/{query-VV4TRRDX.js → query-ODGT6LCA.js} +3 -3
- package/dist/{research-62VXIO2O.js → research-CFOCCZYJ.js} +3 -3
- package/dist/{results-export-QZQTNXMB.js → results-export-ZCVCABTY.js} +3 -3
- package/dist/{run-MYWJ2MPB.js → run-ALQMFZPA.js} +4 -4
- package/dist/{schedule-YC76OSAK.js → schedule-RJHQG6BO.js} +3 -3
- package/dist/{search-J2J7BXBL.js → search-EQGSYWF7.js} +3 -3
- package/dist/{serve-LESJD7GM.js → serve-EHPDSJSX.js} +25 -25
- package/dist/{session-2MU6LLLC.js → session-3H6V5DGU.js} +12 -12
- package/dist/{settings-QIMV3UYB.js → settings-SMD7F2W3.js} +3 -3
- package/dist/{skills-3HOQ77ON.js → skills-KQYUUDBA.js} +2 -2
- package/dist/{snapshot-XL3KO4OW.js → snapshot-S4UZAST6.js} +3 -3
- package/dist/{src-CLICUC3F.js → src-QZCOCSQQ.js} +2 -2
- package/dist/{status-CKAJEBHG.js → status-PA5W33LR.js} +4 -4
- package/dist/{technical-aeo-CW7WNDUU.js → technical-aeo-LLK37ELV.js} +3 -3
- package/dist/{telemetry-GPP5XD7R.js → telemetry-OLKQFAOR.js} +4 -4
- package/dist/{tools-UNFFO5HO.js → tools-56M7FYOA.js} +11 -11
- package/dist/{traffic-LALKHOSD.js → traffic-WKFMJIBP.js} +13 -8
- package/dist/{users-NQG7Y3GC.js → users-GZ4SIIZ7.js} +3 -3
- package/dist/{visibility-stats-RJHXNYBM.js → visibility-stats-4VK55MH2.js} +3 -3
- package/dist/{wordpress-VLHQ6P47.js → wordpress-H6SNWN7D.js} +3 -3
- package/package.json +1 -1
- package/assets/assets/InfoTooltip-DV3_9Qp1.js +0 -1
- package/assets/assets/ToneBadge-Du4fOtJa.js +0 -60
- package/assets/assets/index-DElT2Fss.css +0 -1
- package/dist/intelligence-service-NFBPBKI7.js +0 -15
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
classifyJourneyEntry,
|
|
9
9
|
hostMatchesDomain,
|
|
10
10
|
hostOf
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-V3XAJCO3.js";
|
|
12
12
|
|
|
13
13
|
// ../integration-traffic/src/ip-ranges/amazonbot.json
|
|
14
14
|
var amazonbot_default = {
|
|
@@ -15186,6 +15186,29 @@ var DEFAULT_BOT_LIST = {
|
|
|
15186
15186
|
};
|
|
15187
15187
|
var DEFAULT_BOT_SCORE_MAX_FORWARD = 30;
|
|
15188
15188
|
var WORKER_COMPATIBILITY_DATE = "2026-05-01";
|
|
15189
|
+
var CLOUDFLARE_PAGE_VIEWS_VERSION_SUFFIX = "+page-views";
|
|
15190
|
+
var PAGE_VIEW_ASSET_EXTENSIONS = ["avif", "bmp", "css", "gif", "ico", "jpeg", "jpg", "js", "map", "mjs", "mp3", "mp4", "otf", "pdf", "png", "svg", "ttf", "txt", "webm", "webmanifest", "webp", "woff", "woff2", "xml", "zip"];
|
|
15191
|
+
var PAGE_VIEW_FILTER = `
|
|
15192
|
+
const PAGE_VIEW_ASSET_PATTERN = new RegExp(${JSON.stringify(`\\.(?:${PAGE_VIEW_ASSET_EXTENSIONS.join("|")})$`)}, 'i')
|
|
15193
|
+
|
|
15194
|
+
function isPageView(request) {
|
|
15195
|
+
const method = request.method || 'GET'
|
|
15196
|
+
if (method !== 'GET' && method !== 'POST') return false
|
|
15197
|
+
const purpose = lower(request.headers.get('sec-purpose') || request.headers.get('purpose') || '')
|
|
15198
|
+
if (purpose.indexOf('prefetch') !== -1 || purpose.indexOf('prerender') !== -1) return false
|
|
15199
|
+
const ua = request.headers.get('user-agent') || ''
|
|
15200
|
+
if (ua.indexOf('Mozilla/') !== 0) return false
|
|
15201
|
+
const dest = lower(request.headers.get('sec-fetch-dest') || '')
|
|
15202
|
+
if (dest) return dest === 'document'
|
|
15203
|
+
if (method !== 'GET') return false
|
|
15204
|
+
if (lower(request.headers.get('accept') || '').indexOf('text/html') === -1) return false
|
|
15205
|
+
try {
|
|
15206
|
+
return !PAGE_VIEW_ASSET_PATTERN.test(new URL(request.url).pathname)
|
|
15207
|
+
} catch (_) {
|
|
15208
|
+
return false
|
|
15209
|
+
}
|
|
15210
|
+
}
|
|
15211
|
+
`;
|
|
15189
15212
|
function jsString(value) {
|
|
15190
15213
|
return JSON.stringify(value);
|
|
15191
15214
|
}
|
|
@@ -15194,6 +15217,9 @@ function jsArray(values) {
|
|
|
15194
15217
|
}
|
|
15195
15218
|
function generateWorkerScript(opts) {
|
|
15196
15219
|
const botScoreMax = opts.botScoreMaxForward ?? DEFAULT_BOT_SCORE_MAX_FORWARD;
|
|
15220
|
+
const pageViewHeader = opts.forwardPageViews ? "\n// page views: forwarded" : "";
|
|
15221
|
+
const pageViewFilter = opts.forwardPageViews ? PAGE_VIEW_FILTER : "";
|
|
15222
|
+
const pageViewCheck = opts.forwardPageViews ? "\n if (isPageView(request)) return true" : "";
|
|
15197
15223
|
const canonicalJsonFunction = canonicalizeCloudflareJson.toString();
|
|
15198
15224
|
const directPushDelivery = opts.deliveryMode === "direct-push" ? `
|
|
15199
15225
|
function toHex(buffer) {
|
|
@@ -15303,7 +15329,7 @@ async function deliverViaQueue(env, batch) {
|
|
|
15303
15329
|
return `${CLOUDFLARE_WORKER_GENERATED_MARKER}
|
|
15304
15330
|
// worker version: ${opts.workerVersion}
|
|
15305
15331
|
// bot-list version: ${opts.botList.version}
|
|
15306
|
-
// delivery mode: ${opts.deliveryMode}
|
|
15332
|
+
// delivery mode: ${opts.deliveryMode}${pageViewHeader}
|
|
15307
15333
|
|
|
15308
15334
|
const UA_KEYWORDS = ${jsArray(opts.botList.uaKeywords)}
|
|
15309
15335
|
const REFERER_DOMAINS = ${jsArray(opts.botList.refererDomains)}
|
|
@@ -15378,14 +15404,14 @@ function botSignals(cf) {
|
|
|
15378
15404
|
if (typeof cf.botScore === 'number' && cf.botScore < BOT_SCORE_MAX_FORWARD) return true
|
|
15379
15405
|
return false
|
|
15380
15406
|
}
|
|
15381
|
-
|
|
15407
|
+
${pageViewFilter}
|
|
15382
15408
|
function shouldForward(request) {
|
|
15383
15409
|
const ua = request.headers.get('user-agent') || ''
|
|
15384
15410
|
if (uaMatches(ua)) return true
|
|
15385
15411
|
if (urlUtmMatches(request.url)) return true
|
|
15386
15412
|
const referer = request.headers.get('referer') || ''
|
|
15387
15413
|
if (refererMatches(referer)) return true
|
|
15388
|
-
if (urlUtmMatches(referer)) return true
|
|
15414
|
+
if (urlUtmMatches(referer)) return true${pageViewCheck}
|
|
15389
15415
|
return botSignals(request.cf)
|
|
15390
15416
|
}
|
|
15391
15417
|
|
|
@@ -15680,6 +15706,7 @@ export {
|
|
|
15680
15706
|
CLOUDFLARE_WORKER_GENERATED_MARKER,
|
|
15681
15707
|
CLOUDFLARE_WRANGLER_GENERATED_MARKER,
|
|
15682
15708
|
DEFAULT_BOT_LIST,
|
|
15709
|
+
CLOUDFLARE_PAGE_VIEWS_VERSION_SUFFIX,
|
|
15683
15710
|
generateWorkerScript,
|
|
15684
15711
|
generateWranglerToml,
|
|
15685
15712
|
verifyRequestSignature
|
|
@@ -2,18 +2,18 @@ import {
|
|
|
2
2
|
configExists,
|
|
3
3
|
loadConfigRaw,
|
|
4
4
|
saveConfigPatch
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-HF4ARGGH.js";
|
|
6
6
|
import {
|
|
7
7
|
BUNDLED_SKILL_NAMES,
|
|
8
8
|
installSkills
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-TD623G6F.js";
|
|
10
10
|
import {
|
|
11
11
|
PACKAGE_VERSION
|
|
12
12
|
} from "./chunk-AOJU5LKX.js";
|
|
13
13
|
import {
|
|
14
14
|
SKILL_MANIFEST_FILENAME,
|
|
15
15
|
SkillsClients
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-V3XAJCO3.js";
|
|
17
17
|
|
|
18
18
|
// src/skills-autosync.ts
|
|
19
19
|
import fs from "fs";
|
|
@@ -23,7 +23,7 @@ import {
|
|
|
23
23
|
measurementDraftUpsertGroupRequestSchema,
|
|
24
24
|
measurementDraftUpsertMarketRequestSchema,
|
|
25
25
|
measurementDraftUpsertTargetRequestSchema
|
|
26
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-V3XAJCO3.js";
|
|
27
27
|
|
|
28
28
|
// src/measurement-draft-actions.ts
|
|
29
29
|
import { z } from "zod";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
registeredProviderNames
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-K2TRV65V.js";
|
|
4
4
|
import {
|
|
5
5
|
configExists,
|
|
6
6
|
loadConfigRaw
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-HF4ARGGH.js";
|
|
8
8
|
|
|
9
9
|
// src/setup-state.ts
|
|
10
10
|
import fs from "fs";
|
|
@@ -28,7 +28,7 @@ async function buildSetupState() {
|
|
|
28
28
|
}
|
|
29
29
|
if (dbPath && fs.existsSync(dbPath)) {
|
|
30
30
|
try {
|
|
31
|
-
const { createClient, projects, queries: queriesTable } = await import("./src-
|
|
31
|
+
const { createClient, projects, queries: queriesTable } = await import("./src-QZCOCSQQ.js");
|
|
32
32
|
const db = createClient(dbPath);
|
|
33
33
|
project_count = db.select({ id: projects.id }).from(projects).all().length;
|
|
34
34
|
const firstQuery = db.select({ id: queriesTable.id }).from(queriesTable).limit(1).all();
|
|
@@ -47,7 +47,7 @@ function queueServeHandoff() {
|
|
|
47
47
|
async function runPendingServeHandoff(format) {
|
|
48
48
|
if (!pendingServeHandoff) return;
|
|
49
49
|
pendingServeHandoff = false;
|
|
50
|
-
const { serveCommand } = await import("./serve-
|
|
50
|
+
const { serveCommand } = await import("./serve-EHPDSJSX.js");
|
|
51
51
|
await serveCommand(format);
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
CLOUDFLARE_PAGE_VIEWS_VERSION_SUFFIX,
|
|
2
3
|
DEFAULT_BOT_LIST,
|
|
3
4
|
buildTrafficProbeReport,
|
|
4
5
|
extractJourneyRequests,
|
|
@@ -8,14 +9,14 @@ import {
|
|
|
8
9
|
normalizeCloudflareWorkerEvent,
|
|
9
10
|
sessionizeJourneyRequests,
|
|
10
11
|
verifyRequestSignature
|
|
11
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-JHYLKXUV.js";
|
|
12
13
|
import {
|
|
13
14
|
currentOutcomeAttribution,
|
|
14
15
|
getRequestContext,
|
|
15
16
|
registerRequestContext,
|
|
16
17
|
requestAuditIdentity,
|
|
17
18
|
sanitizeRequestContext
|
|
18
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-5JFEK7IL.js";
|
|
19
20
|
import {
|
|
20
21
|
SentimentIdempotencyConflict,
|
|
21
22
|
SentimentRepository,
|
|
@@ -153,7 +154,7 @@ import {
|
|
|
153
154
|
userSessions,
|
|
154
155
|
users,
|
|
155
156
|
writeNegativeReviewMaxStars
|
|
156
|
-
} from "./chunk-
|
|
157
|
+
} from "./chunk-ST7JA3UW.js";
|
|
157
158
|
import {
|
|
158
159
|
ADS_ACTIVATE_SCOPE,
|
|
159
160
|
ADS_ACTIVATION_ABSOLUTE_MAX_ENTITIES,
|
|
@@ -260,6 +261,7 @@ import {
|
|
|
260
261
|
JOURNEY_LIST_VISITS_PER_VISITOR,
|
|
261
262
|
JOURNEY_LOOKBACK_DAYS,
|
|
262
263
|
JOURNEY_MAX_REQUESTS_PER_VISITOR_DAY,
|
|
264
|
+
JOURNEY_PAGE_VIEWS_PENDING_REASON,
|
|
263
265
|
JOURNEY_PARTIAL_SOURCE_TYPES,
|
|
264
266
|
JOURNEY_RETENTION_DAYS,
|
|
265
267
|
JOURNEY_VISIT_IDLE_MINUTES,
|
|
@@ -937,6 +939,7 @@ import {
|
|
|
937
939
|
providerSummaryEntryDtoSchema,
|
|
938
940
|
providersFailing,
|
|
939
941
|
qualifiedNameIncludesName,
|
|
942
|
+
queryClassFilterSchema,
|
|
940
943
|
queryDtoSchema,
|
|
941
944
|
queryGenerateRequestSchema,
|
|
942
945
|
queryGenerateResponseSchema,
|
|
@@ -1154,7 +1157,7 @@ import {
|
|
|
1154
1157
|
wordpressSchemaDeployResultDtoSchema,
|
|
1155
1158
|
wordpressSchemaStatusResultDtoSchema,
|
|
1156
1159
|
wordpressStatusDtoSchema
|
|
1157
|
-
} from "./chunk-
|
|
1160
|
+
} from "./chunk-V3XAJCO3.js";
|
|
1158
1161
|
|
|
1159
1162
|
// ../api-routes/src/user-session.ts
|
|
1160
1163
|
import crypto2 from "crypto";
|
|
@@ -27366,6 +27369,22 @@ async function analyticsRoutes(app) {
|
|
|
27366
27369
|
const project = resolveProject(app.db, request.params.name);
|
|
27367
27370
|
const classifyQuery = projectQueryClassifier(project);
|
|
27368
27371
|
const mentionShareScope = classifyQuery ? "non-brand" : "pooled";
|
|
27372
|
+
const parsedQueryClass = queryClassFilterSchema.safeParse(request.query.queryClass ?? "all");
|
|
27373
|
+
if (!parsedQueryClass.success) {
|
|
27374
|
+
throw validationError('"queryClass" must be one of: all, branded, non-brand', { issues: parsedQueryClass.error.issues });
|
|
27375
|
+
}
|
|
27376
|
+
const queryClass = parsedQueryClass.data;
|
|
27377
|
+
if (queryClass !== "all" && activeMeasurementPlan(app.db, project.id)?.plan.schemaVersion === 2) {
|
|
27378
|
+
throw validationError(
|
|
27379
|
+
`Query class "${queryClass}" on a published measurement plan follows its assignments. Read the split from GET /projects/${project.name}/visibility-report, or omit queryClass for pooled trends.`
|
|
27380
|
+
);
|
|
27381
|
+
}
|
|
27382
|
+
if (queryClass !== "all" && !classifyQuery) {
|
|
27383
|
+
throw validationError(
|
|
27384
|
+
`Query class "${queryClass}" needs a brand name or alias on this project. Add one, or omit queryClass for pooled trends.`
|
|
27385
|
+
);
|
|
27386
|
+
}
|
|
27387
|
+
const inQueryClass = (text) => queryClass === "all" || classifyQuery(text) === queryClass;
|
|
27369
27388
|
const window2 = parseWindow(request.query.window);
|
|
27370
27389
|
const cutoff = windowCutoff(window2);
|
|
27371
27390
|
const projectRuns = app.db.select().from(runs).where(and37(
|
|
@@ -27379,6 +27398,7 @@ async function analyticsRoutes(app) {
|
|
|
27379
27398
|
return reply.send({
|
|
27380
27399
|
window: window2,
|
|
27381
27400
|
mentionShareScope,
|
|
27401
|
+
queryClass,
|
|
27382
27402
|
buckets: [],
|
|
27383
27403
|
overall: { citationRate: 0, cited: 0, total: 0, mentionRate: 0, mentionedCount: 0 },
|
|
27384
27404
|
byProvider: {},
|
|
@@ -27435,7 +27455,7 @@ async function analyticsRoutes(app) {
|
|
|
27435
27455
|
// this far when its text matched the basket, so its key is never empty.)
|
|
27436
27456
|
basketKey: normalizeQueryText(s.queryText ?? (s.queryId ? queryTextById.get(s.queryId) ?? "" : "")) || s.queryId || "",
|
|
27437
27457
|
runBasketRevision: runBasketRevision.get(s.runId) ?? null
|
|
27438
|
-
}));
|
|
27458
|
+
})).filter((s) => queryClass === "all" || s.queryClass === queryClass);
|
|
27439
27459
|
const mentionShareCompetitors2 = mentionShareCompetitors(
|
|
27440
27460
|
app.db.select(competitorIdentityColumns).from(competitors).where(eq46(competitors.projectId, project.id)).orderBy(competitors.domain).all()
|
|
27441
27461
|
);
|
|
@@ -27601,17 +27621,17 @@ async function analyticsRoutes(app) {
|
|
|
27601
27621
|
const trend = computeTrend(buckets, "citationRate");
|
|
27602
27622
|
const mentionTrend = computeTrend(buckets, "mentionRate");
|
|
27603
27623
|
const windowChange = computeWindowChange(buckets);
|
|
27604
|
-
const queryChanges = computeQueryChanges(projectQueries, cutoff);
|
|
27624
|
+
const queryChanges = computeQueryChanges(projectQueries.filter((q) => inQueryClass(q.query)), cutoff);
|
|
27605
27625
|
const basketChanges = basketRevisions.slice(1).map((rev, i) => {
|
|
27606
27626
|
const previous = new Set(basketRevisions[i].members);
|
|
27607
27627
|
const current = new Set(rev.members);
|
|
27608
27628
|
return {
|
|
27609
27629
|
revision: rev.revision,
|
|
27610
27630
|
at: rev.createdAt,
|
|
27611
|
-
added: rev.members.filter((m) => !previous.has(m)),
|
|
27612
|
-
removed: basketRevisions[i].members.filter((m) => !current.has(m))
|
|
27631
|
+
added: rev.members.filter((m) => !previous.has(m) && inQueryClass(m)),
|
|
27632
|
+
removed: basketRevisions[i].members.filter((m) => !current.has(m) && inQueryClass(m))
|
|
27613
27633
|
};
|
|
27614
|
-
}).filter((change) => !cutoff || change.at >= cutoff);
|
|
27634
|
+
}).filter((change) => queryClass === "all" || change.added.length + change.removed.length > 0).filter((change) => !cutoff || change.at >= cutoff);
|
|
27615
27635
|
const executionIdentityChanges = [];
|
|
27616
27636
|
let previousExecutionChecksum = null;
|
|
27617
27637
|
for (const run of projectRuns) {
|
|
@@ -27622,7 +27642,7 @@ async function analyticsRoutes(app) {
|
|
|
27622
27642
|
}
|
|
27623
27643
|
previousExecutionChecksum = identity.checksum;
|
|
27624
27644
|
}
|
|
27625
|
-
return reply.send({ window: window2, mentionShareScope, buckets, overall, byProvider, trend, mentionTrend, windowChange, queryChanges, basketChanges, executionIdentityChanges, referenceBasketRevision: latestBasket?.revision ?? null, modelAttribution, servedModelAttribution, modelServiceMismatch, modelPointerChanges, competitorIdentityChangedAt: readCompetitorIdentityChangedAt(app.db, project.id), competitorSetChangedAt: readCompetitorSetChangedAt(app.db, project.id) });
|
|
27645
|
+
return reply.send({ window: window2, mentionShareScope, queryClass, buckets, overall, byProvider, trend, mentionTrend, windowChange, queryChanges, basketChanges, executionIdentityChanges, referenceBasketRevision: latestBasket?.revision ?? null, modelAttribution, servedModelAttribution, modelServiceMismatch, modelPointerChanges, competitorIdentityChangedAt: readCompetitorIdentityChangedAt(app.db, project.id), competitorSetChangedAt: readCompetitorSetChangedAt(app.db, project.id) });
|
|
27626
27646
|
});
|
|
27627
27647
|
app.get("/projects/:name/analytics/gaps", async (request, reply) => {
|
|
27628
27648
|
const project = resolveProject(app.db, request.params.name);
|
|
@@ -28845,6 +28865,14 @@ async function trafficSamplesRoutes(app) {
|
|
|
28845
28865
|
import crypto28 from "crypto";
|
|
28846
28866
|
import { and as and42, asc as asc10, count as count4, desc as desc23, eq as eq50, gt as gt4, gte as gte10, inArray as inArray27, lt as lt8, lte as lte9, sql as sql15 } from "drizzle-orm";
|
|
28847
28867
|
import "zod";
|
|
28868
|
+
|
|
28869
|
+
// ../api-routes/src/cloudflare-worker-version.ts
|
|
28870
|
+
var CURRENT_CLOUDFLARE_WORKER_VERSION = "1.0.1";
|
|
28871
|
+
function cloudflareWorkerVersionFor(options) {
|
|
28872
|
+
return `${CURRENT_CLOUDFLARE_WORKER_VERSION}${options.forwardPageViews ? CLOUDFLARE_PAGE_VIEWS_VERSION_SUFFIX : ""}`;
|
|
28873
|
+
}
|
|
28874
|
+
|
|
28875
|
+
// ../api-routes/src/journeys.ts
|
|
28848
28876
|
var DAY_MS = 24 * 60 * 6e4;
|
|
28849
28877
|
var IDLE_MS = JOURNEY_VISIT_IDLE_MINUTES * 6e4;
|
|
28850
28878
|
var LOOKBACK_MS = JOURNEY_LOOKBACK_DAYS * DAY_MS;
|
|
@@ -29135,7 +29163,27 @@ function visitsByVisitor(db, projectId, keys) {
|
|
|
29135
29163
|
}
|
|
29136
29164
|
function partialSources(db, projectId) {
|
|
29137
29165
|
const types = Object.keys(JOURNEY_PARTIAL_SOURCE_TYPES);
|
|
29138
|
-
|
|
29166
|
+
const rows = db.select({
|
|
29167
|
+
id: trafficSources.id,
|
|
29168
|
+
sourceType: trafficSources.sourceType,
|
|
29169
|
+
status: trafficSources.status,
|
|
29170
|
+
configJson: trafficSources.configJson,
|
|
29171
|
+
lastWorkerVersion: trafficSources.lastWorkerVersion
|
|
29172
|
+
}).from(trafficSources).where(and42(eq50(trafficSources.projectId, projectId), inArray27(trafficSources.sourceType, types))).orderBy(asc10(trafficSources.id)).all();
|
|
29173
|
+
const out = [];
|
|
29174
|
+
for (const row of rows) {
|
|
29175
|
+
if (row.status === TrafficSourceStatuses.archived) continue;
|
|
29176
|
+
let reason = JOURNEY_PARTIAL_SOURCE_TYPES[row.sourceType];
|
|
29177
|
+
if (row.sourceType === TrafficSourceTypes.cloudflare) {
|
|
29178
|
+
const config = cloudflareTrafficSourceConfigSchema.safeParse(row.configJson);
|
|
29179
|
+
if (config.success && config.data.forwardPageViews) {
|
|
29180
|
+
if (row.lastWorkerVersion === cloudflareWorkerVersionFor({ forwardPageViews: true })) continue;
|
|
29181
|
+
reason = JOURNEY_PAGE_VIEWS_PENDING_REASON;
|
|
29182
|
+
}
|
|
29183
|
+
}
|
|
29184
|
+
out.push({ sourceId: row.id, sourceType: row.sourceType, reason });
|
|
29185
|
+
}
|
|
29186
|
+
return out;
|
|
29139
29187
|
}
|
|
29140
29188
|
function median(values) {
|
|
29141
29189
|
if (values.length === 0) return null;
|
|
@@ -34260,6 +34308,12 @@ var sourcesQueryClassParameter = {
|
|
|
34260
34308
|
description: "Restrict to branded or non-brand answers. With an active v2 measurement plan the class comes from each run's frozen plan assignments (the same answers as the competitor landscape at scope=all-markets); otherwise from the project's brand-name classifier over the query text. Answers neither basis can place are excluded and counted in unclassifiedAnswers. Defaults to all, which pools both classes.",
|
|
34261
34309
|
schema: { type: "string", enum: ["all", "branded", "non-brand"] }
|
|
34262
34310
|
};
|
|
34311
|
+
var metricsQueryClassParameter = {
|
|
34312
|
+
name: "queryClass",
|
|
34313
|
+
in: "query",
|
|
34314
|
+
description: "Restrict every rate, bucket, change and query-set event to branded or non-brand answers, classified from the query text by the project's brand names (the same split mention share uses). Mention share stays non-brand, so it is empty under branded. Bucket boundaries do not move with the class, so the two classes plot on the same dates. 400 when the project has no brand name or alias to classify with, or has a published v2 measurement plan (its classes live on the plan assignments; read the split from the visibility report). Defaults to all, which pools both classes.",
|
|
34315
|
+
schema: { type: "string", enum: ["all", "branded", "non-brand"] }
|
|
34316
|
+
};
|
|
34263
34317
|
var sourcesIncludeByQueryParameter = {
|
|
34264
34318
|
name: "includeByQuery",
|
|
34265
34319
|
in: "query",
|
|
@@ -36774,9 +36828,10 @@ var routeCatalog = [
|
|
|
36774
36828
|
path: "/api/v1/projects/{name}/analytics/metrics",
|
|
36775
36829
|
summary: "Get citation trend analytics",
|
|
36776
36830
|
tags: ["analytics"],
|
|
36777
|
-
parameters: [nameParameter, analyticsWindowParameter],
|
|
36831
|
+
parameters: [nameParameter, analyticsWindowParameter, metricsQueryClassParameter],
|
|
36778
36832
|
responses: {
|
|
36779
36833
|
200: jsonResponse("Citation metrics returned.", "BrandMetricsDto"),
|
|
36834
|
+
400: errorResponse("Invalid query parameters."),
|
|
36780
36835
|
404: errorResponse("Project not found.")
|
|
36781
36836
|
}
|
|
36782
36837
|
},
|
|
@@ -60194,9 +60249,6 @@ import { isIP } from "net";
|
|
|
60194
60249
|
import { isDeepStrictEqual } from "util";
|
|
60195
60250
|
import { and as and69, desc as desc39, eq as eq80, gt as gt7, gte as gte19, inArray as inArray34, lt as lt13, lte as lte20, sql as sql30 } from "drizzle-orm";
|
|
60196
60251
|
|
|
60197
|
-
// ../api-routes/src/cloudflare-worker-version.ts
|
|
60198
|
-
var CURRENT_CLOUDFLARE_WORKER_VERSION = "1.0.1";
|
|
60199
|
-
|
|
60200
60252
|
// ../api-routes/src/traffic-limits.ts
|
|
60201
60253
|
var VERCEL_MAX_SYNC_WINDOW_MS = 24 * 60 * 6e4;
|
|
60202
60254
|
var DEFAULT_VERCEL_SYNC_DEADLINE_MS = 4 * 6e4;
|
|
@@ -61985,6 +62037,19 @@ async function loadQueueReceiptPolicy(db, sourceId, readRetentionSeconds, warn2)
|
|
|
61985
62037
|
const floorMs = floorExpiry ? Date.parse(floorExpiry) : 0;
|
|
61986
62038
|
return { ttlMsAt: (receivedAt) => Math.max(ttlMs, floorMs - Date.parse(receivedAt)) };
|
|
61987
62039
|
}
|
|
62040
|
+
function cloudflarePageViewInstructions(forwardPageViews, deliveryMode) {
|
|
62041
|
+
if (!forwardPageViews) return [];
|
|
62042
|
+
const lines = [
|
|
62043
|
+
"This Worker also forwards page views (document loads and form posts), so AI visitor journeys record later visits.",
|
|
62044
|
+
"Each page view becomes one Worker delivery: expect more Worker CPU and Canonry ingest volume on busy sites."
|
|
62045
|
+
];
|
|
62046
|
+
if (deliveryMode === CloudflareTrafficDeliveryModes["queue-pull"]) {
|
|
62047
|
+
lines.push(
|
|
62048
|
+
"Each page view is one Queue message (3 Queue operations). Each sync drains for up to 4 minutes by default; if doctor reports more than 1,000 messages left after syncs, shorten the traffic-sync interval or raise CANONRY_CLOUDFLARE_QUEUE_SYNC_DEADLINE_MS."
|
|
62049
|
+
);
|
|
62050
|
+
}
|
|
62051
|
+
return lines;
|
|
62052
|
+
}
|
|
61988
62053
|
function parseDirectPushCloudflareSourceConfig(config) {
|
|
61989
62054
|
const parsed = cloudflareTrafficSourceConfigSchema.safeParse(config);
|
|
61990
62055
|
return parsed.success && parsed.data.deliveryMode === CloudflareTrafficDeliveryModes["direct-push"] ? parsed.data : null;
|
|
@@ -63103,11 +63168,13 @@ async function trafficRoutes(app, opts) {
|
|
|
63103
63168
|
if (sameModeSource) attempt.update({ action: "reauth" });
|
|
63104
63169
|
const sourceId2 = sameModeSource?.id ?? crypto52.randomUUID();
|
|
63105
63170
|
const previousCredential2 = credentialStore.getConnectionBySourceId(sourceId2);
|
|
63106
|
-
const
|
|
63171
|
+
const forwardPageViews2 = parsed.data.forwardPageViews ?? (sameModeSource ? parseQueuePullCloudflareSourceConfig(sameModeSource.configJson)?.forwardPageViews : void 0) ?? false;
|
|
63172
|
+
const workerVersion2 = cloudflareWorkerVersionFor({ forwardPageViews: forwardPageViews2 });
|
|
63107
63173
|
const workerScript2 = generateWorkerScript({
|
|
63108
63174
|
deliveryMode: "queue-pull",
|
|
63109
63175
|
workerVersion: workerVersion2,
|
|
63110
|
-
botList: DEFAULT_BOT_LIST
|
|
63176
|
+
botList: DEFAULT_BOT_LIST,
|
|
63177
|
+
forwardPageViews: forwardPageViews2
|
|
63111
63178
|
});
|
|
63112
63179
|
const wranglerToml2 = generateWranglerToml({
|
|
63113
63180
|
deliveryMode: "queue-pull",
|
|
@@ -63124,6 +63191,7 @@ async function trafficRoutes(app, opts) {
|
|
|
63124
63191
|
workerVersion: workerVersion2,
|
|
63125
63192
|
expectedBotListVersion: DEFAULT_BOT_LIST.version,
|
|
63126
63193
|
zoneId: zoneId2 ?? null,
|
|
63194
|
+
forwardPageViews: forwardPageViews2,
|
|
63127
63195
|
accountId: accountId2,
|
|
63128
63196
|
queueId,
|
|
63129
63197
|
queueName,
|
|
@@ -63219,12 +63287,14 @@ async function trafficRoutes(app, opts) {
|
|
|
63219
63287
|
workerScript: workerScript2,
|
|
63220
63288
|
wranglerToml: wranglerToml2,
|
|
63221
63289
|
workerVersion: workerVersion2,
|
|
63290
|
+
forwardPageViews: forwardPageViews2,
|
|
63222
63291
|
instructions: [
|
|
63223
63292
|
"Deploy this Worker to your Cloudflare zone:",
|
|
63224
63293
|
" 1. Save worker.js and wrangler.toml; neither file contains Queue credentials",
|
|
63225
63294
|
` 2. Enable the Queue HTTP pull consumer: wrangler queues consumer http add ${queueName}`,
|
|
63226
63295
|
` 3. Attach ${workerRouteHost2}/* in the Cloudflare Dashboard with Fail open`,
|
|
63227
63296
|
` 4. Canonry pulls Queue ${queueName}; activate this source after the route is live.`,
|
|
63297
|
+
...cloudflarePageViewInstructions(forwardPageViews2, CloudflareTrafficDeliveryModes["queue-pull"]),
|
|
63228
63298
|
`Source id: ${sourceRow3.id}`
|
|
63229
63299
|
].join("\n")
|
|
63230
63300
|
};
|
|
@@ -63253,17 +63323,19 @@ async function trafficRoutes(app, opts) {
|
|
|
63253
63323
|
const previousAccountId = reusableCredential?.accountId ?? parsedActiveConfig?.accountId ?? null;
|
|
63254
63324
|
const effectiveZoneId = zoneId ?? previousZoneId;
|
|
63255
63325
|
const effectiveAccountId = accountId ?? previousAccountId;
|
|
63326
|
+
const forwardPageViews = parsed.data.forwardPageViews ?? parsedActiveConfig?.forwardPageViews ?? false;
|
|
63256
63327
|
const bearerToken = reusableCredential?.bearerToken ?? `cnry_cfw_${crypto52.randomBytes(32).toString("hex")}`;
|
|
63257
63328
|
const hmacSecret = reusableCredential?.hmacSecret ?? crypto52.randomBytes(32).toString("hex");
|
|
63258
63329
|
const ingestTokenHash = sha256Hex3(bearerToken);
|
|
63259
63330
|
const ingestUrl = opts.cloudflareTrafficIngestUrl.replace("{name}", encodeURIComponent(project.name));
|
|
63260
63331
|
assertCloudflareIngestUrlIsPublicHttps(ingestUrl);
|
|
63261
63332
|
assertCloudflareIngestUrlOutsideWorkerRoute(ingestUrl, workerRouteHost);
|
|
63262
|
-
const workerVersion =
|
|
63333
|
+
const workerVersion = cloudflareWorkerVersionFor({ forwardPageViews });
|
|
63263
63334
|
const workerScript = generateWorkerScript({
|
|
63264
63335
|
deliveryMode,
|
|
63265
63336
|
workerVersion,
|
|
63266
|
-
botList: DEFAULT_BOT_LIST
|
|
63337
|
+
botList: DEFAULT_BOT_LIST,
|
|
63338
|
+
forwardPageViews
|
|
63267
63339
|
});
|
|
63268
63340
|
const wranglerToml = generateWranglerToml({
|
|
63269
63341
|
deliveryMode,
|
|
@@ -63280,7 +63352,8 @@ async function trafficRoutes(app, opts) {
|
|
|
63280
63352
|
workerVersion,
|
|
63281
63353
|
expectedBotListVersion: DEFAULT_BOT_LIST.version,
|
|
63282
63354
|
zoneId: effectiveZoneId,
|
|
63283
|
-
accountId: effectiveAccountId
|
|
63355
|
+
accountId: effectiveAccountId,
|
|
63356
|
+
forwardPageViews
|
|
63284
63357
|
};
|
|
63285
63358
|
const fallbackName = displayName ?? activeSource?.displayName ?? `Cloudflare \xB7 ${effectiveZoneId ?? sourceId.slice(0, 8)}`;
|
|
63286
63359
|
credentialStore.upsertConnection({
|
|
@@ -63383,6 +63456,7 @@ async function trafficRoutes(app, opts) {
|
|
|
63383
63456
|
` 5. In the Cloudflare Dashboard route form, select \`${workerRouteHost}/*\` and this Worker`,
|
|
63384
63457
|
" 6. Set Request limit failure mode to Fail open, then save the route; Wrangler cannot set this toggle",
|
|
63385
63458
|
" 7. Keep the Canonry ingest hostname outside this Worker route to avoid recursion",
|
|
63459
|
+
...cloudflarePageViewInstructions(forwardPageViews, CloudflareTrafficDeliveryModes["direct-push"]),
|
|
63386
63460
|
"",
|
|
63387
63461
|
`Source id: ${sourceRow2.id}`,
|
|
63388
63462
|
"After deploy, check `canonry doctor --project " + project.name + "` to confirm events are arriving."
|
|
@@ -63394,6 +63468,7 @@ async function trafficRoutes(app, opts) {
|
|
|
63394
63468
|
workerScript,
|
|
63395
63469
|
wranglerToml,
|
|
63396
63470
|
workerVersion,
|
|
63471
|
+
forwardPageViews,
|
|
63397
63472
|
instructions
|
|
63398
63473
|
};
|
|
63399
63474
|
}));
|
|
@@ -68996,7 +69071,7 @@ var workerVersionCheck = {
|
|
|
68996
69071
|
};
|
|
68997
69072
|
}
|
|
68998
69073
|
const measured = sources.map((source) => {
|
|
68999
|
-
const expectedVersion =
|
|
69074
|
+
const expectedVersion = cloudflareWorkerVersionFor({ forwardPageViews: source.configJson.forwardPageViews === true });
|
|
69000
69075
|
const observedVersion = source.lastWorkerVersion;
|
|
69001
69076
|
const state = observedVersion === null ? "waiting-for-first-event" : observedVersion === expectedVersion ? "current" : "stale";
|
|
69002
69077
|
return {
|
|
@@ -6,12 +6,12 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
createApiClient,
|
|
8
8
|
runWithUsageTags
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-XRQCRDTF.js";
|
|
10
10
|
import {
|
|
11
11
|
canonryMcpTools,
|
|
12
12
|
mcpOutputSchema,
|
|
13
13
|
toolOperationAccess
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-GDVMHIY4.js";
|
|
15
15
|
import {
|
|
16
16
|
PACKAGE_VERSION
|
|
17
17
|
} from "./chunk-AOJU5LKX.js";
|
|
@@ -24,7 +24,7 @@ import {
|
|
|
24
24
|
isReadOnlyKey,
|
|
25
25
|
restrictedWriteScopes,
|
|
26
26
|
upgradeCaveatFor
|
|
27
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-V3XAJCO3.js";
|
|
28
28
|
|
|
29
29
|
// src/mcp/server.ts
|
|
30
30
|
import { randomUUID } from "crypto";
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
loadConfig,
|
|
6
6
|
loadConfigRaw,
|
|
7
7
|
saveConfigPatch
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-HF4ARGGH.js";
|
|
9
9
|
import {
|
|
10
10
|
CANONRY_NPM_PACKAGE_URL,
|
|
11
11
|
compareSemver,
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
updateCheckEnvOptOut,
|
|
19
19
|
upgradeCaveatFor,
|
|
20
20
|
upgradeCommandFor
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-V3XAJCO3.js";
|
|
22
22
|
|
|
23
23
|
// src/runtime-context.ts
|
|
24
24
|
function cliRuntimeContext(env = process.env, stdio = process) {
|
|
@@ -2,13 +2,13 @@ import {
|
|
|
2
2
|
bucketCliCommandDuration,
|
|
3
3
|
isTelemetryEnabled,
|
|
4
4
|
trackEvent
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-TQLXCGRD.js";
|
|
6
6
|
import {
|
|
7
7
|
getConfigDir
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-HF4ARGGH.js";
|
|
9
9
|
import {
|
|
10
10
|
currentOutcomeAttribution
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-5JFEK7IL.js";
|
|
12
12
|
import {
|
|
13
13
|
AGENT_NONE,
|
|
14
14
|
OutcomeSurfaces,
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
integrationConnectionPropertiesSchema,
|
|
20
20
|
normalizeAgentSlug,
|
|
21
21
|
usageSurfaceSchema
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-V3XAJCO3.js";
|
|
23
23
|
|
|
24
24
|
// src/outcome-telemetry.ts
|
|
25
25
|
import fs from "fs";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createApiClient
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XRQCRDTF.js";
|
|
4
4
|
import {
|
|
5
5
|
emitJsonl
|
|
6
6
|
} from "./chunk-Z7IUAJOF.js";
|
|
7
7
|
import {
|
|
8
8
|
measurementDraftOperationSchema,
|
|
9
9
|
runMeasurementDraftAction
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-M6KKI7FB.js";
|
|
11
11
|
import {
|
|
12
12
|
isMachineFormat,
|
|
13
13
|
systemError
|
|
@@ -37,7 +37,7 @@ import {
|
|
|
37
37
|
unattributedAnswersLabel,
|
|
38
38
|
uncheckedSourcesLabel,
|
|
39
39
|
visibilityReportRequestSchema
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-V3XAJCO3.js";
|
|
41
41
|
|
|
42
42
|
// src/commands/measurement-plan.ts
|
|
43
43
|
import crypto from "crypto";
|