@canonry/canonry 7.72.2 → 7.74.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.
Files changed (131) hide show
  1. package/assets/assets/{AgentSetupPage-D39M9CRK.js → AgentSetupPage-D7YVdPWO.js} +1 -1
  2. package/assets/assets/{AuditHistoryPanel-BS-iFyHX.js → AuditHistoryPanel-yrgfS5B_.js} +1 -1
  3. package/assets/assets/{BacklinksPage-BW2bEGF4.js → BacklinksPage-DJM6z03g.js} +1 -1
  4. package/assets/assets/{HistoryPage-Dh6o2iVd.js → HistoryPage-CNvAVJ1S.js} +1 -1
  5. package/assets/assets/{MeasurementPropertyPage-DL9cbtVz.js → MeasurementPropertyPage-BVVYhOxR.js} +1 -1
  6. package/assets/assets/{ProjectPage-DXh97uDN.js → ProjectPage-CPRD8kR9.js} +1 -1
  7. package/assets/assets/{RunsPage-BM4ETLsm.js → RunsPage-Ck33dcjz.js} +1 -1
  8. package/assets/assets/{SettingsPage-DpJTB2-Q.js → SettingsPage-CS_t4Dai.js} +1 -1
  9. package/assets/assets/{SiteHealthSection-CmlMQ17V.js → SiteHealthSection-BurKnHpn.js} +2 -2
  10. package/assets/assets/ToneBadge-Df8oiKsQ.js +60 -0
  11. package/assets/assets/{TrafficPage-ClH3Dxnm.js → TrafficPage-DAiY698E.js} +1 -1
  12. package/assets/assets/{TrafficSourceDetailPage-DE-NyNGz.js → TrafficSourceDetailPage-clJSX2rr.js} +1 -1
  13. package/assets/assets/{account-context-BwV6ox8O.js → account-context-DDEhuoP2.js} +1 -1
  14. package/assets/assets/{card-DhkoBNyY.js → card-DbR-lBY3.js} +1 -1
  15. package/assets/assets/{extract-error-message-dNDtiSBo.js → extract-error-message-7_Vm2DQF.js} +1 -1
  16. package/assets/assets/{format-helpers-Bt4tx-f3.js → format-helpers-vtahpXTQ.js} +1 -1
  17. package/assets/assets/{index-MbApCekj.js → index-BIhCeXvc.js} +4 -4
  18. package/assets/assets/{query-client-D-zMw63p.js → query-client-TlFXYJ9o.js} +1 -1
  19. package/assets/assets/{react-query-EdiRRB2q.js → react-query-C5Mv8xfD.js} +1 -1
  20. package/assets/assets/{react-sigma_core.esm.min-Bidr1Gxk.js → react-sigma_core.esm.min-DmggJ7YC.js} +1 -1
  21. package/assets/assets/{service-BUi8JgGI.js → service-CLFURPuM.js} +1 -1
  22. package/assets/index.html +7 -7
  23. package/dist/{ads-FFUUMS4J.js → ads-L64W5J35.js} +3 -3
  24. package/dist/{agent-LCD2VG7C.js → agent-CMQ34CFD.js} +7 -7
  25. package/dist/{agent-ask-OBHTCYFR.js → agent-ask-3KEYJSZV.js} +3 -3
  26. package/dist/{agent-conversations-VMZ4NFIX.js → agent-conversations-4KKPOTCP.js} +3 -3
  27. package/dist/{agent-memory-UPFJFNWC.js → agent-memory-VOSRZ57W.js} +3 -3
  28. package/dist/{agent-providers-4GOWLBZK.js → agent-providers-SLXTYMDS.js} +3 -3
  29. package/dist/{agent-transcript-RGXIVZUP.js → agent-transcript-Q6OEZROG.js} +3 -3
  30. package/dist/{analytics-FBK4XV5P.js → analytics-LSF6NYII.js} +3 -3
  31. package/dist/{apply-Y2DVE3YB.js → apply-7O3RES7N.js} +3 -3
  32. package/dist/{backfill-NE55YL6X.js → backfill-7ARSKYDG.js} +9 -9
  33. package/dist/{backlinks-YWHFC7DZ.js → backlinks-4YAC374B.js} +3 -3
  34. package/dist/{bing-7BP3DWPK.js → bing-SHAYDXAA.js} +3 -3
  35. package/dist/{bootstrap-Z7QSKVPL.js → bootstrap-BHLBGQKJ.js} +10 -10
  36. package/dist/{cdp-OL6RENO3.js → cdp-QWJE6SFY.js} +7 -7
  37. package/dist/{chunk-J523Y7X2.js → chunk-2Y6MSB4J.js} +1 -1
  38. package/dist/{chunk-GA2EHZTI.js → chunk-3WPTMLQI.js} +22 -6
  39. package/dist/{chunk-QDN3FL2A.js → chunk-3YIKSZHN.js} +2 -1
  40. package/dist/{chunk-IY4AJ6DN.js → chunk-5PA7SJ2M.js} +5 -5
  41. package/dist/{chunk-JO73L677.js → chunk-6ATKY252.js} +2 -2
  42. package/dist/{chunk-XR6ZVMYK.js → chunk-6W5AR4IW.js} +1 -1
  43. package/dist/{chunk-IZMT4WLZ.js → chunk-6YW24AUN.js} +2 -2
  44. package/dist/{chunk-QKDKVPMR.js → chunk-AJMDETJA.js} +4 -4
  45. package/dist/{chunk-HZSE3WSG.js → chunk-AZQNJX3T.js} +2 -2
  46. package/dist/{chunk-ATT3ZCSS.js → chunk-BICUWFV4.js} +38 -16
  47. package/dist/{chunk-MJYO6UK2.js → chunk-DL3LTSBV.js} +2 -2
  48. package/dist/{chunk-6MYHGP46.js → chunk-DLVGMRM5.js} +1 -1
  49. package/dist/{chunk-TOX6HAQJ.js → chunk-EXGETCJR.js} +3 -3
  50. package/dist/{chunk-BADJCT6U.js → chunk-GWDMWKM6.js} +1 -1
  51. package/dist/{chunk-PPM6Z7CM.js → chunk-HEL6DKDN.js} +1 -1
  52. package/dist/{chunk-NZZWJCKS.js → chunk-HJHFW455.js} +3 -3
  53. package/dist/{chunk-DRGCVTYH.js → chunk-JPM3VC6A.js} +1 -1
  54. package/dist/{chunk-H4HNXCDF.js → chunk-KOWOQ3JZ.js} +2 -2
  55. package/dist/{chunk-UWBJWKDQ.js → chunk-L5GIL45X.js} +2 -2
  56. package/dist/{chunk-P3UGNR2Y.js → chunk-LS47ZAX2.js} +5 -5
  57. package/dist/{chunk-IV6VZ63E.js → chunk-MB3IUJ6Z.js} +18 -14
  58. package/dist/{chunk-3AG3LPZX.js → chunk-MRSNLKSM.js} +1 -1
  59. package/dist/{chunk-JE5QURTR.js → chunk-NXFNXXYM.js} +184 -92
  60. package/dist/{chunk-Q25JQANW.js → chunk-O4D66XPL.js} +17 -2
  61. package/dist/{chunk-O7WOCTBD.js → chunk-PAIYFNNY.js} +71 -3
  62. package/dist/{chunk-JEBY6MS6.js → chunk-QS6RIP37.js} +1 -1
  63. package/dist/{chunk-4LTL5RNY.js → chunk-SCRPC2PQ.js} +4 -4
  64. package/dist/{chunk-YXAKL5HM.js → chunk-SF5JLMLG.js} +6791 -6777
  65. package/dist/{chunk-UZKNS5PL.js → chunk-TXUNPPWD.js} +254 -92
  66. package/dist/{chunk-NZLK3KHQ.js → chunk-WLNYLQTX.js} +6 -6
  67. package/dist/{chunk-7KOAP47B.js → chunk-WLWOGBLJ.js} +363 -248
  68. package/dist/{chunk-CF6BUJRK.js → chunk-WY2C6FFA.js} +8 -8
  69. package/dist/{chunk-BZZDFIY2.js → chunk-XDQJOZKJ.js} +1 -1
  70. package/dist/{chunk-TEDY3MHN.js → chunk-YTSE2EZP.js} +3 -3
  71. package/dist/{chunk-G7SGQUW4.js → chunk-ZMDIARSG.js} +345 -337
  72. package/dist/{citations-RVSC67GE.js → citations-EENLZULG.js} +3 -3
  73. package/dist/{cli-catalog-NEZE5QU5.js → cli-catalog-BXHG544D.js} +3 -3
  74. package/dist/{cli-commands-ARJWPTFW.js → cli-commands-7BG5M2KF.js} +7 -7
  75. package/dist/cli.js +13 -13
  76. package/dist/{competitor-BX3M3OYS.js → competitor-CW5LMXJ6.js} +3 -3
  77. package/dist/{content-PKJMVMHJ.js → content-BX6UGRRU.js} +3 -3
  78. package/dist/{dashboard-SVHZBVM6.js → dashboard-M2TKT2LW.js} +6 -6
  79. package/dist/{demo-GLV22DPY.js → demo-GKSMSKOY.js} +1 -1
  80. package/dist/{demo-server-GPM4C4Q2.js → demo-server-UQO4XKHN.js} +12 -12
  81. package/dist/{discover-JDP44ZHX.js → discover-2EZUZFNR.js} +3 -3
  82. package/dist/{discover-eval-6ORCVYYR.js → discover-eval-IS2GRYVV.js} +3 -3
  83. package/dist/{doctor-TVZRMBSS.js → doctor-DPEIBV3E.js} +3 -3
  84. package/dist/{evidence-FNIAFBBG.js → evidence-UGC4ZWNA.js} +3 -3
  85. package/dist/{export-cmd-HQNF2SSD.js → export-cmd-7OVM23C4.js} +3 -3
  86. package/dist/{ga-PIO5OXMK.js → ga-FUADE4K4.js} +3 -3
  87. package/dist/{gbp-3R5FME43.js → gbp-R4M663R5.js} +3 -3
  88. package/dist/{google-BYZREX2O.js → google-WTOTC5SL.js} +4 -4
  89. package/dist/{google-marketing-SPQ2GW6X.js → google-marketing-IXPMUBXZ.js} +1 -1
  90. package/dist/{health-cmd-HH5RYMSV.js → health-cmd-QKDO6VIT.js} +3 -3
  91. package/dist/{history-Q35NLLMJ.js → history-LEBTYXVW.js} +3 -3
  92. package/dist/index.d.ts +249 -72
  93. package/dist/index.js +25 -25
  94. package/dist/{init-Q33HEJJN.js → init-BKOT4UY2.js} +12 -11
  95. package/dist/{insights-SH73B4PD.js → insights-OBHQ5GHV.js} +3 -3
  96. package/dist/intelligence-service-EJQQNO65.js +16 -0
  97. package/dist/{journeys-SIV7HPW7.js → journeys-PTMCJHOL.js} +3 -3
  98. package/dist/{keys-O656YWSW.js → keys-W2FZNFOR.js} +3 -3
  99. package/dist/{keyword-FZ2N4EW7.js → keyword-Y6WABJPU.js} +3 -3
  100. package/dist/{logs-2NPN7HBI.js → logs-KRSH53GN.js} +3 -3
  101. package/dist/mcp-6LJW6LEJ.js +19 -0
  102. package/dist/mcp.js +20 -14
  103. package/dist/{measurement-plan-JQKVSJRL.js → measurement-plan-RHLKXNYG.js} +5 -5
  104. package/dist/{notify-VTAYBHC6.js → notify-HRK2HQTU.js} +3 -3
  105. package/dist/{organic-evidence-HPXXEPOW.js → organic-evidence-EX2VL5CE.js} +3 -3
  106. package/dist/{overview-FSBNDYZJ.js → overview-254QNXAC.js} +4 -4
  107. package/dist/{project-MAPPXURS.js → project-UOYX7T4J.js} +3 -3
  108. package/dist/{query-R6DLPIPJ.js → query-JMVOMNRS.js} +3 -3
  109. package/dist/{research-FXKOEUQB.js → research-PAPX7KO5.js} +3 -3
  110. package/dist/{results-export-X2PUM63S.js → results-export-3BXIIDP2.js} +3 -3
  111. package/dist/{run-6ENTG4IO.js → run-WQXLV4MS.js} +4 -4
  112. package/dist/{schedule-DMMVRT7P.js → schedule-3WJ5F3BF.js} +3 -3
  113. package/dist/{search-FHI6APT7.js → search-RVGFOZAT.js} +3 -3
  114. package/dist/{serve-SJTQQQQE.js → serve-BPM2P3GY.js} +26 -26
  115. package/dist/{session-VHCKM3AI.js → session-76DT5W6D.js} +13 -13
  116. package/dist/{settings-FMB4QED4.js → settings-MRJ566D6.js} +3 -3
  117. package/dist/{skills-HBIMHSOI.js → skills-F6AXQHTO.js} +2 -2
  118. package/dist/{snapshot-RBA2EL7R.js → snapshot-7GBDFFVB.js} +3 -3
  119. package/dist/{src-BXXGJOQB.js → src-52USCS7O.js} +4 -2
  120. package/dist/{status-ATFDFAVG.js → status-S6CZV2LU.js} +4 -4
  121. package/dist/{technical-aeo-JWQTGCTB.js → technical-aeo-Q73ZF2FD.js} +3 -3
  122. package/dist/{telemetry-6QFGJL2I.js → telemetry-BT4OOPN6.js} +4 -4
  123. package/dist/{tools-4VRHKUBE.js → tools-HYOV77FY.js} +11 -11
  124. package/dist/{traffic-5R7M4CK5.js → traffic-EFLF62IZ.js} +5 -5
  125. package/dist/{users-24TIUYJY.js → users-MYXGNUIZ.js} +3 -3
  126. package/dist/{visibility-stats-YLQPPBJJ.js → visibility-stats-QENASZW6.js} +3 -3
  127. package/dist/{wordpress-7VDPHMUZ.js → wordpress-CYLQHE5L.js} +3 -3
  128. package/package.json +10 -6
  129. package/assets/assets/ToneBadge-CmvL5mFG.js +0 -60
  130. package/dist/intelligence-service-LVRH4RJG.js +0 -16
  131. package/dist/mcp-RHQY3DV6.js +0 -14
@@ -20,10 +20,10 @@ import {
20
20
  resolveProviderModel,
21
21
  schedulableRunKindSchema,
22
22
  sentimentEvaluatorProviderSchema
23
- } from "./chunk-YXAKL5HM.js";
23
+ } from "./chunk-SF5JLMLG.js";
24
24
 
25
25
  // ../config/src/index.ts
26
- import { z as z4 } from "zod";
26
+ import { z as z5 } from "zod";
27
27
 
28
28
  // ../config/src/sentiment.ts
29
29
  import { z } from "zod";
@@ -84,78 +84,170 @@ var seoInstallConfigSchema = z3.object({
84
84
  }).strict()]))
85
85
  }).strict();
86
86
 
87
+ // ../config/src/mcp-gateway.ts
88
+ import { z as z4 } from "zod";
89
+ var nonempty = z4.string().trim().min(1);
90
+ var identifier = z4.string().regex(/^[a-z0-9][\w-]{0,127}$/i);
91
+ var url = z4.url().refine((value) => {
92
+ const parsed = new URL(value);
93
+ return !parsed.username && !parsed.password && !parsed.hash && !parsed.search;
94
+ }, "URLs must not contain credentials, fragments, or query strings");
95
+ var gatewayTenantSchema = z4.object({
96
+ id: identifier,
97
+ displayName: nonempty.max(200),
98
+ origin: url,
99
+ issuer: url,
100
+ resource: url,
101
+ mcpUrl: url,
102
+ enabled: z4.boolean(),
103
+ allowPrivateNetwork: z4.boolean().default(false),
104
+ protocolVersions: z4.array(nonempty).min(1),
105
+ catalogVersion: z4.literal("canonry-readonly-v1"),
106
+ upstreamClientId: nonempty.optional()
107
+ }).strict();
108
+ var clientSchema = z4.object({
109
+ client_id: identifier,
110
+ client_name: nonempty.max(200),
111
+ redirect_uris: z4.array(z4.url()).min(1),
112
+ token_endpoint_auth_method: z4.literal("none").default("none"),
113
+ grant_types: z4.array(z4.enum(["authorization_code", "refresh_token"])).default(["authorization_code", "refresh_token"]),
114
+ response_types: z4.tuple([z4.literal("code")]).default(["code"])
115
+ }).strict();
116
+ var gatewayConfigSchema = z4.object({
117
+ issuer: url,
118
+ development: z4.boolean().default(false),
119
+ host: nonempty.default("127.0.0.1"),
120
+ port: z4.number().int().min(1).max(65535).default(4101),
121
+ databasePath: nonempty,
122
+ clients: z4.array(clientSchema).min(1),
123
+ tenants: z4.array(gatewayTenantSchema).min(1),
124
+ requestTimeoutMs: z4.number().int().min(100).max(12e4).default(3e4),
125
+ trustedProxyAddresses: z4.array(z4.union([z4.ipv4(), z4.ipv6()])).default([]),
126
+ rateLimitPerMinute: z4.number().int().min(1).max(1e5).default(120),
127
+ maxBodyBytes: z4.number().int().min(1024).max(10 * 1024 * 1024).default(1024 * 1024),
128
+ domainVerificationToken: z4.string().regex(/^[\w-]{1,1024}$/).optional()
129
+ }).strict().superRefine((config, ctx) => {
130
+ const checkTransport = (value, path2) => {
131
+ const parsed = new URL(value);
132
+ const loopback = ["localhost", "127.0.0.1", "[::1]"].includes(parsed.hostname);
133
+ if (parsed.protocol !== "https:" && !(config.development && loopback && parsed.protocol === "http:")) {
134
+ ctx.addIssue({ code: "custom", path: path2, message: "HTTPS is required except explicit development on loopback" });
135
+ }
136
+ };
137
+ checkTransport(config.issuer, ["issuer"]);
138
+ const issuer = new URL(config.issuer);
139
+ if (issuer.pathname !== "/" || config.issuer.endsWith("/")) {
140
+ ctx.addIssue({ code: "custom", path: ["issuer"], message: "Gateway issuer must be an origin without a trailing slash" });
141
+ }
142
+ if (!config.development && config.databasePath === ":memory:") {
143
+ ctx.addIssue({ code: "custom", path: ["databasePath"], message: "Production requires a durable database path" });
144
+ }
145
+ const tenantIds = /* @__PURE__ */ new Set();
146
+ config.tenants.forEach((tenant, index) => {
147
+ if (tenantIds.has(tenant.id)) ctx.addIssue({ code: "custom", path: ["tenants", index, "id"], message: "Tenant IDs must be unique" });
148
+ tenantIds.add(tenant.id);
149
+ if (new URL(tenant.origin).origin !== tenant.origin) {
150
+ ctx.addIssue({ code: "custom", path: ["tenants", index, "origin"], message: "Tenant origin must be an origin without a path or trailing slash" });
151
+ }
152
+ for (const field of ["origin", "issuer", "resource", "mcpUrl"]) {
153
+ checkTransport(tenant[field], ["tenants", index, field]);
154
+ if (new URL(tenant[field]).origin !== tenant.origin) {
155
+ ctx.addIssue({ code: "custom", path: ["tenants", index, field], message: "Tenant endpoints must belong to the provisioned origin" });
156
+ }
157
+ }
158
+ if (!new URL(tenant.mcpUrl).pathname.endsWith("/api/v1/mcp/readonly")) {
159
+ ctx.addIssue({ code: "custom", path: ["tenants", index, "mcpUrl"], message: "Only the Canonry read-only MCP endpoint is permitted" });
160
+ }
161
+ if (!new URL(tenant.resource).pathname.endsWith("/api/v1/mcp")) {
162
+ ctx.addIssue({ code: "custom", path: ["tenants", index, "resource"], message: "Canonical MCP resource must end in /api/v1/mcp" });
163
+ }
164
+ });
165
+ const clientIds = /* @__PURE__ */ new Set();
166
+ config.clients.forEach((client, index) => {
167
+ if (clientIds.has(client.client_id)) ctx.addIssue({ code: "custom", path: ["clients", index, "client_id"], message: "Client IDs must be unique" });
168
+ clientIds.add(client.client_id);
169
+ client.redirect_uris.forEach((redirect, redirectIndex) => {
170
+ checkTransport(redirect, ["clients", index, "redirect_uris", redirectIndex]);
171
+ const parsed = new URL(redirect);
172
+ if (parsed.username || parsed.password || parsed.hash) {
173
+ ctx.addIssue({ code: "custom", path: ["clients", index, "redirect_uris", redirectIndex], message: "Redirects cannot contain credentials or fragments" });
174
+ }
175
+ });
176
+ });
177
+ });
178
+
87
179
  // ../config/src/index.ts
88
- var dashboardManagedSweepsSchema = z4.boolean().nullish();
89
- var researchAllowViewersSchema = z4.boolean().nullish();
90
- var agentAllowViewersSchema = z4.boolean().nullish();
180
+ var dashboardManagedSweepsSchema = z5.boolean().nullish();
181
+ var researchAllowViewersSchema = z5.boolean().nullish();
182
+ var agentAllowViewersSchema = z5.boolean().nullish();
91
183
  var AGENT_REASONING_LEVELS = ["off", "minimal", "low", "medium", "high", "xhigh", "max"];
92
- var agentReasoningSchema = z4.enum(AGENT_REASONING_LEVELS).nullish();
93
- var researchViewerDailyRunLimitSchema = z4.number().int().positive().nullish();
94
- var dashboardManagedRunKindsSchema = z4.array(schedulableRunKindSchema).nullish();
184
+ var agentReasoningSchema = z5.enum(AGENT_REASONING_LEVELS).nullish();
185
+ var researchViewerDailyRunLimitSchema = z5.number().int().positive().nullish();
186
+ var dashboardManagedRunKindsSchema = z5.array(schedulableRunKindSchema).nullish();
95
187
  var agentProviderSchema = agentProviderIdSchema.nullish();
96
- var agentModelSchema = z4.string().trim().min(1).nullish();
188
+ var agentModelSchema = z5.string().trim().min(1).nullish();
97
189
  function resolveOperatorApiKeyIds(source) {
98
190
  const raw = source.CANONRY_OPERATOR_KEY_IDS?.trim();
99
191
  if (!raw) return [];
100
- const parsed = z4.array(z4.string().regex(/^[\w-]{1,256}$/)).max(100).safeParse(raw.split(",").map((id) => id.trim()));
192
+ const parsed = z5.array(z5.string().regex(/^[\w-]{1,256}$/)).max(100).safeParse(raw.split(",").map((id) => id.trim()));
101
193
  if (!parsed.success) throw new Error("CANONRY_OPERATOR_KEY_IDS must contain at most 100 comma-separated API key IDs (letters, digits, underscores, hyphens; no wildcards).");
102
194
  return [...new Set(parsed.data)];
103
195
  }
104
- var envSchema = z4.object({
105
- DATABASE_URL: z4.string().default("postgresql://aeo:aeo@postgres:5432/aeo_platform"),
106
- API_PORT: z4.coerce.number().int().positive().default(3e3),
107
- WORKER_PORT: z4.coerce.number().int().positive().default(3001),
108
- WEB_PORT: z4.coerce.number().int().positive().default(4173),
109
- BOOTSTRAP_SECRET: z4.string().default("change-me"),
110
- CANONRY_BASE_PATH: z4.string().default("/"),
196
+ var envSchema = z5.object({
197
+ DATABASE_URL: z5.string().default("postgresql://aeo:aeo@postgres:5432/aeo_platform"),
198
+ API_PORT: z5.coerce.number().int().positive().default(3e3),
199
+ WORKER_PORT: z5.coerce.number().int().positive().default(3001),
200
+ WEB_PORT: z5.coerce.number().int().positive().default(4173),
201
+ BOOTSTRAP_SECRET: z5.string().default("change-me"),
202
+ CANONRY_BASE_PATH: z5.string().default("/"),
111
203
  // Gemini
112
- GEMINI_API_KEY: z4.string().optional(),
113
- GEMINI_MODEL: z4.string().optional(),
114
- GEMINI_BASE_URL: z4.string().optional(),
115
- GEMINI_MAX_CONCURRENCY: z4.coerce.number().int().positive().default(2),
116
- GEMINI_MAX_REQUESTS_PER_MINUTE: z4.coerce.number().int().positive().default(10),
117
- GEMINI_MAX_REQUESTS_PER_DAY: z4.coerce.number().int().positive().default(1e3),
204
+ GEMINI_API_KEY: z5.string().optional(),
205
+ GEMINI_MODEL: z5.string().optional(),
206
+ GEMINI_BASE_URL: z5.string().optional(),
207
+ GEMINI_MAX_CONCURRENCY: z5.coerce.number().int().positive().default(2),
208
+ GEMINI_MAX_REQUESTS_PER_MINUTE: z5.coerce.number().int().positive().default(10),
209
+ GEMINI_MAX_REQUESTS_PER_DAY: z5.coerce.number().int().positive().default(1e3),
118
210
  // Gemini Vertex AI (alternative to API key auth)
119
- GEMINI_VERTEX_PROJECT: z4.string().optional(),
120
- GEMINI_VERTEX_REGION: z4.string().optional(),
121
- GEMINI_VERTEX_CREDENTIALS: z4.string().optional(),
211
+ GEMINI_VERTEX_PROJECT: z5.string().optional(),
212
+ GEMINI_VERTEX_REGION: z5.string().optional(),
213
+ GEMINI_VERTEX_CREDENTIALS: z5.string().optional(),
122
214
  // OpenAI
123
- OPENAI_API_KEY: z4.string().optional(),
124
- OPENAI_MODEL: z4.string().optional(),
125
- OPENAI_BASE_URL: z4.string().optional(),
126
- OPENAI_MAX_CONCURRENCY: z4.coerce.number().int().positive().default(2),
127
- OPENAI_MAX_REQUESTS_PER_MINUTE: z4.coerce.number().int().positive().default(10),
128
- OPENAI_MAX_REQUESTS_PER_DAY: z4.coerce.number().int().positive().default(1e3),
129
- OPENROUTER_API_KEY: z4.string().optional(),
130
- OPENROUTER_MODEL: z4.string().optional(),
131
- OPENROUTER_MAX_CONCURRENCY: z4.coerce.number().int().positive().default(2),
132
- OPENROUTER_MAX_REQUESTS_PER_MINUTE: z4.coerce.number().int().positive().default(10),
133
- OPENROUTER_MAX_REQUESTS_PER_DAY: z4.coerce.number().int().positive().default(1e3),
215
+ OPENAI_API_KEY: z5.string().optional(),
216
+ OPENAI_MODEL: z5.string().optional(),
217
+ OPENAI_BASE_URL: z5.string().optional(),
218
+ OPENAI_MAX_CONCURRENCY: z5.coerce.number().int().positive().default(2),
219
+ OPENAI_MAX_REQUESTS_PER_MINUTE: z5.coerce.number().int().positive().default(10),
220
+ OPENAI_MAX_REQUESTS_PER_DAY: z5.coerce.number().int().positive().default(1e3),
221
+ OPENROUTER_API_KEY: z5.string().optional(),
222
+ OPENROUTER_MODEL: z5.string().optional(),
223
+ OPENROUTER_MAX_CONCURRENCY: z5.coerce.number().int().positive().default(2),
224
+ OPENROUTER_MAX_REQUESTS_PER_MINUTE: z5.coerce.number().int().positive().default(10),
225
+ OPENROUTER_MAX_REQUESTS_PER_DAY: z5.coerce.number().int().positive().default(1e3),
134
226
  // Anthropic / Claude
135
- ANTHROPIC_API_KEY: z4.string().optional(),
136
- ANTHROPIC_MODEL: z4.string().optional(),
137
- ANTHROPIC_MAX_CONCURRENCY: z4.coerce.number().int().positive().default(2),
138
- ANTHROPIC_MAX_REQUESTS_PER_MINUTE: z4.coerce.number().int().positive().default(10),
139
- ANTHROPIC_MAX_REQUESTS_PER_DAY: z4.coerce.number().int().positive().default(1e3),
227
+ ANTHROPIC_API_KEY: z5.string().optional(),
228
+ ANTHROPIC_MODEL: z5.string().optional(),
229
+ ANTHROPIC_MAX_CONCURRENCY: z5.coerce.number().int().positive().default(2),
230
+ ANTHROPIC_MAX_REQUESTS_PER_MINUTE: z5.coerce.number().int().positive().default(10),
231
+ ANTHROPIC_MAX_REQUESTS_PER_DAY: z5.coerce.number().int().positive().default(1e3),
140
232
  // Perplexity
141
- PERPLEXITY_API_KEY: z4.string().optional(),
142
- PERPLEXITY_MODEL: z4.string().optional(),
143
- PERPLEXITY_MAX_CONCURRENCY: z4.coerce.number().int().positive().default(2),
144
- PERPLEXITY_MAX_REQUESTS_PER_MINUTE: z4.coerce.number().int().positive().default(10),
145
- PERPLEXITY_MAX_REQUESTS_PER_DAY: z4.coerce.number().int().positive().default(1e3),
233
+ PERPLEXITY_API_KEY: z5.string().optional(),
234
+ PERPLEXITY_MODEL: z5.string().optional(),
235
+ PERPLEXITY_MAX_CONCURRENCY: z5.coerce.number().int().positive().default(2),
236
+ PERPLEXITY_MAX_REQUESTS_PER_MINUTE: z5.coerce.number().int().positive().default(10),
237
+ PERPLEXITY_MAX_REQUESTS_PER_DAY: z5.coerce.number().int().positive().default(1e3),
146
238
  // Meta Muse
147
- MUSE_API_KEY: z4.string().optional(),
148
- MUSE_MODEL: z4.string().optional(),
149
- MUSE_BASE_URL: z4.string().optional(),
150
- MUSE_MAX_CONCURRENCY: z4.coerce.number().int().positive().default(2),
151
- MUSE_MAX_REQUESTS_PER_MINUTE: z4.coerce.number().int().positive().default(10),
152
- MUSE_MAX_REQUESTS_PER_DAY: z4.coerce.number().int().positive().default(1e3),
239
+ MUSE_API_KEY: z5.string().optional(),
240
+ MUSE_MODEL: z5.string().optional(),
241
+ MUSE_BASE_URL: z5.string().optional(),
242
+ MUSE_MAX_CONCURRENCY: z5.coerce.number().int().positive().default(2),
243
+ MUSE_MAX_REQUESTS_PER_MINUTE: z5.coerce.number().int().positive().default(10),
244
+ MUSE_MAX_REQUESTS_PER_DAY: z5.coerce.number().int().positive().default(1e3),
153
245
  // Secret for HMAC-signing Google OAuth state parameters. Required for
154
246
  // cloud deployments that mount googleRoutes; the plugin refuses to register
155
247
  // without it (see packages/api-routes/src/google.ts).
156
- GOOGLE_STATE_SECRET: z4.string().optional(),
157
- CANONRY_RESEARCH_ALLOW_VIEWERS: z4.string().optional(),
158
- CANONRY_RESEARCH_VIEWER_DAILY_RUN_LIMIT: z4.coerce.number().int().positive().default(DEFAULT_VIEWER_RESEARCH_DAILY_RUN_LIMIT)
248
+ GOOGLE_STATE_SECRET: z5.string().optional(),
249
+ CANONRY_RESEARCH_ALLOW_VIEWERS: z5.string().optional(),
250
+ CANONRY_RESEARCH_VIEWER_DAILY_RUN_LIMIT: z5.coerce.number().int().positive().default(DEFAULT_VIEWER_RESEARCH_DAILY_RUN_LIMIT)
159
251
  });
160
252
  var BOOTSTRAP_PROVIDER_DEFAULT_MODELS = {
161
253
  gemini: "gemini-flash-latest",
@@ -178,33 +270,33 @@ function withBootstrapProviderDefaults(name, entry) {
178
270
  quota: entry.quota ?? { ...BOOTSTRAP_PROVIDER_DEFAULT_QUOTA }
179
271
  };
180
272
  }
181
- var bootstrapEnvSchema = z4.object({
182
- CANONRY_API_KEY: z4.string().optional(),
183
- CANONRY_API_URL: z4.string().optional(),
184
- CANONRY_DATABASE_PATH: z4.string().optional(),
185
- GEMINI_API_KEY: z4.string().optional(),
186
- GEMINI_MODEL: z4.string().optional(),
187
- GEMINI_BASE_URL: z4.string().optional(),
188
- GEMINI_VERTEX_PROJECT: z4.string().optional(),
189
- GEMINI_VERTEX_REGION: z4.string().optional(),
190
- GEMINI_VERTEX_CREDENTIALS: z4.string().optional(),
191
- OPENAI_API_KEY: z4.string().optional(),
192
- OPENAI_MODEL: z4.string().optional(),
193
- OPENAI_BASE_URL: z4.string().optional(),
194
- OPENROUTER_API_KEY: z4.string().optional(),
195
- OPENROUTER_MODEL: z4.string().optional(),
196
- ANTHROPIC_API_KEY: z4.string().optional(),
197
- ANTHROPIC_MODEL: z4.string().optional(),
198
- PERPLEXITY_API_KEY: z4.string().optional(),
199
- PERPLEXITY_MODEL: z4.string().optional(),
200
- MUSE_API_KEY: z4.string().optional(),
201
- MUSE_MODEL: z4.string().optional(),
202
- MUSE_BASE_URL: z4.string().optional(),
203
- LOCAL_BASE_URL: z4.string().optional(),
204
- LOCAL_API_KEY: z4.string().optional(),
205
- LOCAL_MODEL: z4.string().optional(),
206
- GOOGLE_CLIENT_ID: z4.string().optional(),
207
- GOOGLE_CLIENT_SECRET: z4.string().optional()
273
+ var bootstrapEnvSchema = z5.object({
274
+ CANONRY_API_KEY: z5.string().optional(),
275
+ CANONRY_API_URL: z5.string().optional(),
276
+ CANONRY_DATABASE_PATH: z5.string().optional(),
277
+ GEMINI_API_KEY: z5.string().optional(),
278
+ GEMINI_MODEL: z5.string().optional(),
279
+ GEMINI_BASE_URL: z5.string().optional(),
280
+ GEMINI_VERTEX_PROJECT: z5.string().optional(),
281
+ GEMINI_VERTEX_REGION: z5.string().optional(),
282
+ GEMINI_VERTEX_CREDENTIALS: z5.string().optional(),
283
+ OPENAI_API_KEY: z5.string().optional(),
284
+ OPENAI_MODEL: z5.string().optional(),
285
+ OPENAI_BASE_URL: z5.string().optional(),
286
+ OPENROUTER_API_KEY: z5.string().optional(),
287
+ OPENROUTER_MODEL: z5.string().optional(),
288
+ ANTHROPIC_API_KEY: z5.string().optional(),
289
+ ANTHROPIC_MODEL: z5.string().optional(),
290
+ PERPLEXITY_API_KEY: z5.string().optional(),
291
+ PERPLEXITY_MODEL: z5.string().optional(),
292
+ MUSE_API_KEY: z5.string().optional(),
293
+ MUSE_MODEL: z5.string().optional(),
294
+ MUSE_BASE_URL: z5.string().optional(),
295
+ LOCAL_BASE_URL: z5.string().optional(),
296
+ LOCAL_API_KEY: z5.string().optional(),
297
+ LOCAL_MODEL: z5.string().optional(),
298
+ GOOGLE_CLIENT_ID: z5.string().optional(),
299
+ GOOGLE_CLIENT_SECRET: z5.string().optional()
208
300
  });
209
301
  function getBootstrapEnv(source, overrides) {
210
302
  const filtered = overrides ? Object.fromEntries(Object.entries(overrides).filter(([, v]) => v != null)) : {};
@@ -1013,9 +1105,9 @@ Do not use "canonry init --force" for recovery. It replaces credentials without
1013
1105
  const portOverride = process.env.CANONRY_PORT?.trim();
1014
1106
  if (portOverride) {
1015
1107
  try {
1016
- const url = new URL(parsed.apiUrl);
1017
- url.port = portOverride;
1018
- parsed.apiUrl = url.origin;
1108
+ const url2 = new URL(parsed.apiUrl);
1109
+ url2.port = portOverride;
1110
+ parsed.apiUrl = url2.origin;
1019
1111
  } catch {
1020
1112
  }
1021
1113
  }
@@ -1026,9 +1118,9 @@ Do not use "canonry init --force" for recovery. It replaces credentials without
1026
1118
  if (parsed.basePath) {
1027
1119
  const normalizedBase = "/" + parsed.basePath.replace(/^\/|\/$/g, "");
1028
1120
  try {
1029
- const url = new URL(parsed.apiUrl);
1030
- if (normalizedBase !== "/" && !url.pathname.startsWith(normalizedBase)) {
1031
- parsed.apiUrl = url.origin + normalizedBase;
1121
+ const url2 = new URL(parsed.apiUrl);
1122
+ if (normalizedBase !== "/" && !url2.pathname.startsWith(normalizedBase)) {
1123
+ parsed.apiUrl = url2.origin + normalizedBase;
1032
1124
  }
1033
1125
  } catch {
1034
1126
  }
@@ -1053,11 +1145,11 @@ function parseExternalMcpEnv(raw) {
1053
1145
  for (const entry of value) {
1054
1146
  if (!entry || typeof entry !== "object") continue;
1055
1147
  const candidate = entry;
1056
- const url = typeof candidate.url === "string" ? candidate.url.trim() : "";
1148
+ const url2 = typeof candidate.url === "string" ? candidate.url.trim() : "";
1057
1149
  const token = typeof candidate.token === "string" ? candidate.token : "";
1058
- if (!url || !token) continue;
1150
+ if (!url2 || !token) continue;
1059
1151
  const label = typeof candidate.label === "string" ? candidate.label : void 0;
1060
- servers.push({ url, token, ...label ? { label } : {} });
1152
+ servers.push({ url: url2, token, ...label ? { label } : {} });
1061
1153
  }
1062
1154
  return servers.length > 0 ? servers : void 0;
1063
1155
  }
@@ -2,13 +2,16 @@ import {
2
2
  findMcpClient,
3
3
  listMcpClientIds
4
4
  } from "./chunk-VJWDBFSL.js";
5
+ import {
6
+ createApiClient
7
+ } from "./chunk-BICUWFV4.js";
5
8
  import {
6
9
  CliError,
7
10
  isMachineFormat
8
11
  } from "./chunk-HGMYEDAQ.js";
9
12
  import {
10
13
  describeError
11
- } from "./chunk-YXAKL5HM.js";
14
+ } from "./chunk-SF5JLMLG.js";
12
15
 
13
16
  // src/commands/mcp.ts
14
17
  import fs from "fs";
@@ -196,9 +199,21 @@ function emitInstallResult(result, format) {
196
199
  console.log(result.snippet);
197
200
  }
198
201
  }
202
+ async function showMcpProfile(format) {
203
+ const profile = await createApiClient().getMcpProfile();
204
+ if (isMachineFormat(format)) {
205
+ console.log(JSON.stringify(profile, null, 2));
206
+ return;
207
+ }
208
+ console.log(`${profile.displayName} (${profile.userId})`);
209
+ console.log(`Instance: ${profile.instance.issuer}`);
210
+ console.log(`Resource: ${profile.instance.resource}`);
211
+ console.log(`Scopes: ${profile.scopes.join(", ")}`);
212
+ }
199
213
 
200
214
  export {
201
215
  renderClientSnippet,
202
216
  installMcp,
203
- printMcpConfig
217
+ printMcpConfig,
218
+ showMcpProfile
204
219
  };
@@ -20,7 +20,7 @@ import {
20
20
  templateLinkRatio,
21
21
  templateLinkUbiquityAvailable,
22
22
  validationError
23
- } from "./chunk-YXAKL5HM.js";
23
+ } from "./chunk-SF5JLMLG.js";
24
24
  import {
25
25
  __export
26
26
  } from "./chunk-MLKGABMK.js";
@@ -125,6 +125,7 @@ __export(schema_exports, {
125
125
  notifications: () => notifications,
126
126
  oauthAuthorizationCodes: () => oauthAuthorizationCodes,
127
127
  oauthClients: () => oauthClients,
128
+ oauthGrants: () => oauthGrants,
128
129
  oauthTokens: () => oauthTokens,
129
130
  projects: () => projects,
130
131
  providerBatchRequests: () => providerBatchRequests,
@@ -858,12 +859,15 @@ var apiKeys = sqliteTable2("api_keys", {
858
859
  projectId: text2("project_id").references(() => projects.id, { onDelete: "cascade" }),
859
860
  /** Internal delegated session identity, never accepted by the key-create API. */
860
861
  delegatedUserId: text2("delegated_user_id").references(() => users.id, { onDelete: "cascade" }),
862
+ /** Authorization that minted this internal MCP credential. */
863
+ delegatedOAuthGrantId: text2("delegated_oauth_grant_id").references(() => oauthGrants.id, { onDelete: "cascade" }),
861
864
  createdAt: text2("created_at").notNull(),
862
865
  lastUsedAt: text2("last_used_at"),
863
866
  revokedAt: text2("revoked_at")
864
867
  }, (table) => [
865
868
  index2("idx_api_keys_prefix").on(table.keyPrefix),
866
- index2("idx_api_keys_project").on(table.projectId)
869
+ index2("idx_api_keys_project").on(table.projectId),
870
+ index2("idx_api_keys_oauth_grant").on(table.delegatedOAuthGrantId)
867
871
  ]);
868
872
  var users = sqliteTable2("users", {
869
873
  id: text2("id").primaryKey(),
@@ -901,7 +905,7 @@ var oauthClients = sqliteTable2("oauth_clients", {
901
905
  id: text2("id").primaryKey(),
902
906
  name: text2("name").notNull(),
903
907
  /**
904
- * scrypt digest, or NULL for a public client that authenticates by PKCE
908
+ * SHA-256 digest, or NULL for a public client that authenticates by PKCE
905
909
  * alone. Never the secret: a client secret is a bearer credential, and a
906
910
  * copied database file must not be a working client.
907
911
  */
@@ -920,6 +924,18 @@ var oauthClients = sqliteTable2("oauth_clients", {
920
924
  createdAt: text2("created_at").notNull(),
921
925
  revokedAt: text2("revoked_at")
922
926
  });
927
+ var oauthGrants = sqliteTable2("oauth_grants", {
928
+ id: text2("id").primaryKey(),
929
+ clientId: text2("client_id").notNull().references(() => oauthClients.id, { onDelete: "cascade" }),
930
+ userId: text2("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
931
+ resource: text2("resource"),
932
+ scope: text2("scope"),
933
+ createdAt: text2("created_at").notNull(),
934
+ revokedAt: text2("revoked_at")
935
+ }, (table) => [
936
+ index2("idx_oauth_grants_client").on(table.clientId),
937
+ index2("idx_oauth_grants_user").on(table.userId)
938
+ ]);
923
939
  var oauthAuthorizationCodes = sqliteTable2("oauth_authorization_codes", {
924
940
  /** SHA-256 of the code. The code itself is 256 bits of randomness. */
925
941
  codeHash: text2("code_hash").primaryKey(),
@@ -943,6 +959,8 @@ var oauthAuthorizationCodes = sqliteTable2("oauth_authorization_codes", {
943
959
  var oauthTokens = sqliteTable2("oauth_tokens", {
944
960
  tokenHash: text2("token_hash").primaryKey(),
945
961
  kind: text2("kind").$type().notNull(),
962
+ /** Nullable only for an older binary writing after this migration. */
963
+ grantId: text2("grant_id").references(() => oauthGrants.id, { onDelete: "cascade" }),
946
964
  clientId: text2("client_id").notNull().references(() => oauthClients.id, { onDelete: "cascade" }),
947
965
  userId: text2("user_id").notNull().references(() => users.id, { onDelete: "cascade" }),
948
966
  /** Audience. Enforced on every resource request. */
@@ -952,6 +970,7 @@ var oauthTokens = sqliteTable2("oauth_tokens", {
952
970
  revokedAt: text2("revoked_at"),
953
971
  createdAt: text2("created_at").notNull()
954
972
  }, (table) => [
973
+ index2("idx_oauth_tokens_grant").on(table.grantId),
955
974
  index2("idx_oauth_tokens_user").on(table.userId),
956
975
  index2("idx_oauth_tokens_expires").on(table.expiresAt)
957
976
  ]);
@@ -8284,6 +8303,54 @@ var MIGRATION_VERSIONS = [
8284
8303
  statements: [
8285
8304
  `ALTER TABLE site_crawl_attempts ADD COLUMN url_versions_skipped INTEGER NOT NULL DEFAULT 0`
8286
8305
  ]
8306
+ },
8307
+ {
8308
+ version: 199,
8309
+ name: "oauth-authorization-grants",
8310
+ statements: [
8311
+ `CREATE TABLE IF NOT EXISTS oauth_grants (
8312
+ id TEXT PRIMARY KEY,
8313
+ client_id TEXT NOT NULL REFERENCES oauth_clients(id) ON DELETE CASCADE,
8314
+ user_id TEXT NOT NULL REFERENCES users(id) ON DELETE CASCADE,
8315
+ resource TEXT,
8316
+ scope TEXT,
8317
+ created_at TEXT NOT NULL,
8318
+ revoked_at TEXT
8319
+ )`,
8320
+ `CREATE INDEX IF NOT EXISTS idx_oauth_grants_client ON oauth_grants(client_id)`,
8321
+ `CREATE INDEX IF NOT EXISTS idx_oauth_grants_user ON oauth_grants(user_id)`,
8322
+ `ALTER TABLE oauth_tokens ADD COLUMN grant_id TEXT REFERENCES oauth_grants(id) ON DELETE CASCADE`,
8323
+ `ALTER TABLE api_keys ADD COLUMN delegated_oauth_grant_id TEXT REFERENCES oauth_grants(id) ON DELETE CASCADE`,
8324
+ `CREATE INDEX IF NOT EXISTS idx_oauth_tokens_grant ON oauth_tokens(grant_id)`,
8325
+ `CREATE INDEX IF NOT EXISTS idx_api_keys_oauth_grant ON api_keys(delegated_oauth_grant_id)`,
8326
+ // Credentials whose account or client was removed with foreign keys off
8327
+ // are already unusable. Drop them before enforcing the new grant FKs.
8328
+ `DELETE FROM oauth_tokens WHERE NOT EXISTS (SELECT 1 FROM oauth_clients WHERE id = oauth_tokens.client_id)
8329
+ OR NOT EXISTS (SELECT 1 FROM users WHERE id = oauth_tokens.user_id)`,
8330
+ // Historical rotations carry no lineage. Preserve access while grouping
8331
+ // only the same client, person, audience and consented scope for revocation.
8332
+ `INSERT OR IGNORE INTO oauth_grants (id, client_id, user_id, resource, scope, created_at)
8333
+ SELECT 'legacy:' || MIN(token_hash), client_id, user_id, resource, scope, MIN(created_at)
8334
+ FROM oauth_tokens WHERE grant_id IS NULL
8335
+ AND EXISTS (SELECT 1 FROM oauth_clients WHERE id = oauth_tokens.client_id)
8336
+ AND EXISTS (SELECT 1 FROM users WHERE id = oauth_tokens.user_id)
8337
+ GROUP BY client_id, user_id, resource, scope`,
8338
+ `UPDATE oauth_tokens SET grant_id = (
8339
+ SELECT id FROM oauth_grants g
8340
+ WHERE g.id LIKE 'legacy:%' AND g.client_id = oauth_tokens.client_id
8341
+ AND g.user_id = oauth_tokens.user_id AND g.resource IS oauth_tokens.resource AND g.scope IS oauth_tokens.scope
8342
+ ) WHERE grant_id IS NULL`,
8343
+ // Old MCP keys lack a grant link and cannot be assigned safely. Match
8344
+ // the bound constructor and the older reserved namespace without user
8345
+ // linkage. A manually named key in that namespace also requires reissue.
8346
+ `DELETE FROM dashboard_sessions WHERE api_key_id IN (
8347
+ SELECT id FROM api_keys WHERE (delegated_user_id IS NOT NULL AND name = 'mcp-session:' || delegated_user_id)
8348
+ OR (delegated_user_id IS NULL AND name GLOB 'mcp-session:*')
8349
+ )`,
8350
+ `UPDATE api_keys SET revoked_at = COALESCE(revoked_at, strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
8351
+ WHERE (delegated_user_id IS NOT NULL AND name = 'mcp-session:' || delegated_user_id)
8352
+ OR (delegated_user_id IS NULL AND name GLOB 'mcp-session:*')`
8353
+ ]
8287
8354
  }
8288
8355
  ];
8289
8356
  var AERO_LEDGER_REBUILDS = [
@@ -9727,6 +9794,7 @@ export {
9727
9794
  userSessions,
9728
9795
  dashboardSessions,
9729
9796
  oauthClients,
9797
+ oauthGrants,
9730
9798
  oauthAuthorizationCodes,
9731
9799
  oauthTokens,
9732
9800
  schedules,
@@ -8,7 +8,7 @@ import {
8
8
  classifyJourneyEntry,
9
9
  hostMatchesDomain,
10
10
  hostOf
11
- } from "./chunk-YXAKL5HM.js";
11
+ } from "./chunk-SF5JLMLG.js";
12
12
 
13
13
  // ../integration-traffic/src/ip-ranges/amazonbot.json
14
14
  var amazonbot_default = {
@@ -2,13 +2,13 @@ import {
2
2
  bucketCliCommandDuration,
3
3
  isTelemetryEnabled,
4
4
  trackEvent
5
- } from "./chunk-MJYO6UK2.js";
5
+ } from "./chunk-DL3LTSBV.js";
6
6
  import {
7
7
  getConfigDir
8
- } from "./chunk-JE5QURTR.js";
8
+ } from "./chunk-NXFNXXYM.js";
9
9
  import {
10
10
  currentOutcomeAttribution
11
- } from "./chunk-BADJCT6U.js";
11
+ } from "./chunk-GWDMWKM6.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-YXAKL5HM.js";
22
+ } from "./chunk-SF5JLMLG.js";
23
23
 
24
24
  // src/outcome-telemetry.ts
25
25
  import fs from "fs";