@squadbase/vite-server 0.1.19-dev.2880e8d → 0.1.19-dev.40d2ebd

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -436,15 +436,15 @@ function parseOracleJdbcUrl(jdbcUrl, options = {}) {
436
436
  }
437
437
  if (URL_PREFIX_RE.test(trimmed)) {
438
438
  const url = new URL(trimmed);
439
- const path4 = url.pathname.replace(/^\//, "");
440
- if (!url.hostname || !path4) {
439
+ const path5 = url.pathname.replace(/^\//, "");
440
+ if (!url.hostname || !path5) {
441
441
  throw new Error(
442
442
  `Invalid Oracle URL "${redactOracleUrl(trimmed)}". Expected oracle://[user:password@]host:port/service`
443
443
  );
444
444
  }
445
445
  const port = url.port || "1521";
446
446
  return {
447
- connectString: `${url.hostname}:${port}/${path4}`,
447
+ connectString: `${url.hostname}:${port}/${path5}`,
448
448
  user: url.username ? decodeURIComponent(url.username) : options.username,
449
449
  password: url.password ? decodeURIComponent(url.password) : options.password
450
450
  };
@@ -689,8 +689,8 @@ var init_interactive = __esm({
689
689
 
690
690
  // src/cli/index.ts
691
691
  import { parseArgs } from "util";
692
- import path3 from "path";
693
- import { readFile as readFile3 } from "fs/promises";
692
+ import path4 from "path";
693
+ import { readFile as readFile4 } from "fs/promises";
694
694
 
695
695
  // src/connector-client/registry.ts
696
696
  import { readFileSync, watch as fsWatch } from "fs";
@@ -8141,12 +8141,12 @@ var parameters13 = {
8141
8141
 
8142
8142
  // ../connectors/src/connectors/airtable/utils.ts
8143
8143
  var BASE_URL = "https://api.airtable.com/v0";
8144
- async function apiFetch(params, path4, init) {
8144
+ async function apiFetch(params, path5, init) {
8145
8145
  const apiKey = params[parameters13.apiKey.slug];
8146
8146
  if (!apiKey) {
8147
8147
  throw new Error("airtable: missing required parameter: api-key");
8148
8148
  }
8149
- const url = `${BASE_URL}${path4.startsWith("/") ? "" : "/"}${path4}`;
8149
+ const url = `${BASE_URL}${path5.startsWith("/") ? "" : "/"}${path5}`;
8150
8150
  const headers = new Headers(init?.headers);
8151
8151
  headers.set("Authorization", `Bearer ${apiKey}`);
8152
8152
  return fetch(url, { ...init, headers });
@@ -8348,16 +8348,16 @@ Authentication is handled automatically using the API Key.
8348
8348
  {baseId} in the path is automatically replaced with the connection's base-id.`,
8349
8349
  inputSchema: inputSchema19,
8350
8350
  outputSchema: outputSchema19,
8351
- async execute({ connectionId, method, path: path4, body }, connections) {
8351
+ async execute({ connectionId, method, path: path5, body }, connections) {
8352
8352
  const connection = connections.find((c) => c.id === connectionId);
8353
8353
  if (!connection) {
8354
8354
  return { success: false, error: `Connection ${connectionId} not found` };
8355
8355
  }
8356
- console.log(`[connector-request] airtable/${connection.name}: ${method} ${path4}`);
8356
+ console.log(`[connector-request] airtable/${connection.name}: ${method} ${path5}`);
8357
8357
  try {
8358
8358
  const apiKey = parameters13.apiKey.getValue(connection);
8359
8359
  const baseId = parameters13.baseId.getValue(connection);
8360
- const resolvedPath = path4.replace(/\{baseId\}/g, baseId);
8360
+ const resolvedPath = path5.replace(/\{baseId\}/g, baseId);
8361
8361
  const url = `${BASE_URL2}${resolvedPath}`;
8362
8362
  const controller = new AbortController();
8363
8363
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS7);
@@ -9052,7 +9052,7 @@ Authentication is handled automatically via OAuth proxy.
9052
9052
  {customerId} in the path is automatically replaced with the connection's customer ID (hyphens removed).`,
9053
9053
  inputSchema: inputSchema21,
9054
9054
  outputSchema: outputSchema21,
9055
- async execute({ connectionId, method, path: path4, body }, connections, config) {
9055
+ async execute({ connectionId, method, path: path5, body }, connections, config) {
9056
9056
  const connection = connections.find((c) => c.id === connectionId);
9057
9057
  if (!connection) {
9058
9058
  return {
@@ -9061,12 +9061,12 @@ Authentication is handled automatically via OAuth proxy.
9061
9061
  };
9062
9062
  }
9063
9063
  console.log(
9064
- `[connector-request] google-ads/${connection.name}: ${method} ${path4}`
9064
+ `[connector-request] google-ads/${connection.name}: ${method} ${path5}`
9065
9065
  );
9066
9066
  try {
9067
9067
  const rawCustomerId = parameters14.customerId.tryGetValue(connection);
9068
9068
  const customerId = rawCustomerId?.replace(/-/g, "") ?? "";
9069
- const resolvedPath = customerId ? path4.replace(/\{customerId\}/g, customerId) : path4;
9069
+ const resolvedPath = customerId ? path5.replace(/\{customerId\}/g, customerId) : path5;
9070
9070
  const token = await getProxyToken5(config.oauthProxy);
9071
9071
  const proxyUrl = `https://${config.oauthProxy.sandboxId}.${config.oauthProxy.previewBaseDomain}/_sqcore/connections/${connectionId}/request`;
9072
9072
  const controller = new AbortController();
@@ -9413,7 +9413,7 @@ async function getAccessToken(serviceAccountKey) {
9413
9413
  const data = await response.json();
9414
9414
  return data.access_token;
9415
9415
  }
9416
- async function adminFetch(params, path4, init) {
9416
+ async function adminFetch(params, path5, init) {
9417
9417
  const keyJsonBase64 = params[parameters15.serviceAccountKeyJsonBase64.slug];
9418
9418
  if (!keyJsonBase64) {
9419
9419
  throw new Error(
@@ -9422,12 +9422,12 @@ async function adminFetch(params, path4, init) {
9422
9422
  }
9423
9423
  const serviceAccountKey = decodeServiceAccount(keyJsonBase64);
9424
9424
  const accessToken = await getAccessToken(serviceAccountKey);
9425
- const url = `${ADMIN_BASE_URL}${path4.startsWith("/") ? "" : "/"}${path4}`;
9425
+ const url = `${ADMIN_BASE_URL}${path5.startsWith("/") ? "" : "/"}${path5}`;
9426
9426
  const headers = new Headers(init?.headers);
9427
9427
  headers.set("Authorization", `Bearer ${accessToken}`);
9428
9428
  return fetch(url, { ...init, headers });
9429
9429
  }
9430
- async function dataFetch(params, path4, init) {
9430
+ async function dataFetch(params, path5, init) {
9431
9431
  const keyJsonBase64 = params[parameters15.serviceAccountKeyJsonBase64.slug];
9432
9432
  if (!keyJsonBase64) {
9433
9433
  throw new Error(
@@ -9436,7 +9436,7 @@ async function dataFetch(params, path4, init) {
9436
9436
  }
9437
9437
  const serviceAccountKey = decodeServiceAccount(keyJsonBase64);
9438
9438
  const accessToken = await getAccessToken(serviceAccountKey);
9439
- const url = `${DATA_BASE_URL}${path4.startsWith("/") ? "" : "/"}${path4}`;
9439
+ const url = `${DATA_BASE_URL}${path5.startsWith("/") ? "" : "/"}${path5}`;
9440
9440
  const headers = new Headers(init?.headers);
9441
9441
  headers.set("Authorization", `Bearer ${accessToken}`);
9442
9442
  return fetch(url, { ...init, headers });
@@ -9460,8 +9460,8 @@ async function listAccountSummaries(params) {
9460
9460
  const summaries = [];
9461
9461
  let pageToken;
9462
9462
  do {
9463
- const path4 = pageToken ? `/accountSummaries?pageToken=${encodeURIComponent(pageToken)}` : `/accountSummaries`;
9464
- const res = await adminFetch(params, path4);
9463
+ const path5 = pageToken ? `/accountSummaries?pageToken=${encodeURIComponent(pageToken)}` : `/accountSummaries`;
9464
+ const res = await adminFetch(params, path5);
9465
9465
  if (!res.ok) {
9466
9466
  const body = await res.text().catch(() => res.statusText);
9467
9467
  throw new Error(
@@ -9700,9 +9700,9 @@ function renderTopPages(sections, report) {
9700
9700
  sections.push("| Path | Page views | Active users | Avg session duration |");
9701
9701
  sections.push("|------|------------|--------------|----------------------|");
9702
9702
  for (const row of rows.slice(0, TOP_N_PAGES)) {
9703
- const path4 = truncate(row.dimensionValues?.[0]?.value, PAGE_PATH_MAX) || "-";
9703
+ const path5 = truncate(row.dimensionValues?.[0]?.value, PAGE_PATH_MAX) || "-";
9704
9704
  sections.push(
9705
- `| ${escapePipe(path4)} | ${formatNumber(row.metricValues?.[0]?.value)} | ${formatNumber(
9705
+ `| ${escapePipe(path5)} | ${formatNumber(row.metricValues?.[0]?.value)} | ${formatNumber(
9706
9706
  row.metricValues?.[1]?.value
9707
9707
  )} | ${formatDuration(row.metricValues?.[2]?.value)} |`
9708
9708
  );
@@ -10076,12 +10076,12 @@ var requestTool3 = new ConnectorTool({
10076
10076
  Authentication is handled automatically using a service account.`,
10077
10077
  inputSchema: inputSchema22,
10078
10078
  outputSchema: outputSchema22,
10079
- async execute({ connectionId, method, path: path4, body }, connections) {
10079
+ async execute({ connectionId, method, path: path5, body }, connections) {
10080
10080
  const connection = connections.find((c) => c.id === connectionId);
10081
10081
  if (!connection) {
10082
10082
  return { success: false, error: `Connection ${connectionId} not found` };
10083
10083
  }
10084
- console.log(`[connector-request] google-analytics/${connection.name}: ${method} ${path4}`);
10084
+ console.log(`[connector-request] google-analytics/${connection.name}: ${method} ${path5}`);
10085
10085
  try {
10086
10086
  const { GoogleAuth } = await import("google-auth-library");
10087
10087
  const keyJsonBase64 = parameters15.serviceAccountKeyJsonBase64.getValue(connection);
@@ -10096,7 +10096,7 @@ Authentication is handled automatically using a service account.`,
10096
10096
  if (!token) {
10097
10097
  return { success: false, error: "Failed to obtain access token" };
10098
10098
  }
10099
- const url = `${BASE_URL3}${path4}`;
10099
+ const url = `${BASE_URL3}${path5}`;
10100
10100
  const controller = new AbortController();
10101
10101
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS10);
10102
10102
  try {
@@ -10570,11 +10570,11 @@ var googleAnalyticsOauthOnboarding = new ConnectorOnboarding({
10570
10570
  - \u30A2\u30AB\u30A6\u30F3\u30C8\u304C **1\u4EF6\u306E\u307F**: \`askUserQuestion\` \u306F\u30B9\u30AD\u30C3\u30D7\u3057\u3001\u305D\u306E\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u9078\u629E\u6E08\u307F\u3068\u3057\u3066\u6B21\u3078\u9032\u3080
10571
10571
  - \u30A2\u30AB\u30A6\u30F3\u30C8\u304C **0\u4EF6**: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u4E2D\u65AD\u3057\u3001\u30E6\u30FC\u30B6\u30FC\u306B\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306A\u30A2\u30AB\u30A6\u30F3\u30C8\u304C\u306A\u3044\u65E8\u3092\u4F1D\u3048\u308B
10572
10572
  3. \`${listPropertiesToolName}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u9078\u629E\u3055\u308C\u305F\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B
10573
- 4. \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u9078\u629E:
10574
- - \u30D7\u30ED\u30D1\u30C6\u30A3\u304C **2\u4EF6\u4EE5\u4E0A**: \u300C\u4F7F\u7528\u3059\u308B\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u300D\u3068\u30E6\u30FC\u30B6\u30FC\u306B\u4F1D\u3048\u305F\u4E0A\u3067\u3001\`askUserQuestion\` \u3092\u547C\u3073\u51FA\u3059\uFF08\`options\`: \u5404 option \u306E \`label\` \u306F \`\u8868\u793A\u540D (id: \u30D7\u30ED\u30D1\u30C6\u30A3ID)\` \u306E\u5F62\u5F0F\u3001\`value\` \u306F\u30D7\u30ED\u30D1\u30C6\u30A3ID\uFF09
10575
- - \u30D7\u30ED\u30D1\u30C6\u30A3\u304C **1\u4EF6\u306E\u307F**: \`askUserQuestion\` \u306F\u30B9\u30AD\u30C3\u30D7\u3057\u3001\u305D\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u9078\u629E\u6E08\u307F\u3068\u3057\u3066\u6B21\u3078\u9032\u3080
10576
- - \u30D7\u30ED\u30D1\u30C6\u30A3\u304C **0\u4EF6**: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u4E2D\u65AD\u3057\u3001\u30E6\u30FC\u30B6\u30FC\u306B\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306A\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u306A\u3044\u65E8\u3092\u4F1D\u3048\u308B
10577
- 5. \u9078\u629E\u3055\u308C\u305F\u30D7\u30ED\u30D1\u30C6\u30A3ID\uFF08\u6570\u5024\uFF09\u306F\u4EE5\u964D\u306E\u30EA\u30AF\u30A8\u30B9\u30C8\u3067\u30D1\u30B9\u306B\u76F4\u63A5\u6307\u5B9A\u3059\u308B\uFF08\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306B\u306F\u4FDD\u5B58\u3055\u308C\u306A\u3044\uFF09\u3002\u6B21\u306E\u30B9\u30C6\u30C3\u30D7\u306B\u9032\u3080
10573
+ 4. \`updateConnectionParameters\` \u3092\u547C\u3073\u51FA\u3059:
10574
+ - \`parameterSlug\`: \`"property-id"\`
10575
+ - \`options\`: \u30D7\u30ED\u30D1\u30C6\u30A3\u4E00\u89A7\u3002\u5404 option \u306E \`label\` \u306F \`\u8868\u793A\u540D (id: \u30D7\u30ED\u30D1\u30C6\u30A3ID)\` \u306E\u5F62\u5F0F\u3001\`value\` \u306F\u30D7\u30ED\u30D1\u30C6\u30A3ID
10576
+ - \u30D7\u30ED\u30D1\u30C6\u30A3\u304C **0\u4EF6** \u306E\u5834\u5408\u306F\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u4E2D\u65AD\u3057\u3001\u30E6\u30FC\u30B6\u30FC\u306B\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306A\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u306A\u3044\u65E8\u3092\u4F1D\u3048\u308B
10577
+ 5. \u30E6\u30FC\u30B6\u30FC\u304C\u9078\u629E\u3057\u305F\u30D7\u30ED\u30D1\u30C6\u30A3\u306E \`label\` \u304C\u30E1\u30C3\u30BB\u30FC\u30B8\u3068\u3057\u3066\u5C4A\u304F\u306E\u3067\u3001\u6B21\u306E\u30B9\u30C6\u30C3\u30D7\u306B\u9032\u3080
10578
10578
 
10579
10579
  #### \u5236\u7D04
10580
10580
  - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30EC\u30DD\u30FC\u30C8\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3057\u306A\u3044\u3053\u3068**\u3002\u5B9F\u884C\u3057\u3066\u3088\u3044\u306E\u306F\u4E0A\u8A18\u624B\u9806\u3067\u6307\u5B9A\u3055\u308C\u305F\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u306E\u307F
@@ -10588,11 +10588,11 @@ var googleAnalyticsOauthOnboarding = new ConnectorOnboarding({
10588
10588
  - **Only 1 account**: Skip \`askUserQuestion\` and proceed using that account as the selection
10589
10589
  - **0 accounts**: Abort setup and inform the user that no accessible accounts are available
10590
10590
  3. Call \`${listPropertiesToolName}\` to get the list of properties for the selected account
10591
- 4. Select a property:
10592
- - **2 or more properties**: Tell the user "Please select a property.", then call \`askUserQuestion\` (\`options\`: each option's \`label\` should be \`Display Name (id: propertyId)\`, \`value\` should be the property ID)
10593
- - **Only 1 property**: Skip \`askUserQuestion\` and proceed using that property as the selection
10594
- - **0 properties**: Abort setup and inform the user that no accessible properties are available
10595
- 5. Write the selected numeric property id directly into the request path (it is not stored on the connection). Proceed to the next step
10591
+ 4. Call \`updateConnectionParameters\`:
10592
+ - \`parameterSlug\`: \`"property-id"\`
10593
+ - \`options\`: The property list. Each option's \`label\` should be \`Display Name (id: propertyId)\`, \`value\` should be the property ID
10594
+ - If **0 properties** are returned, abort setup and inform the user that no accessible properties are available
10595
+ 5. The \`label\` of the user's selected property will arrive as a message. Proceed to the next step
10596
10596
 
10597
10597
  #### Constraints
10598
10598
  - **Do NOT fetch report data during setup**. Only the metadata requests specified in the steps above are allowed
@@ -10600,17 +10600,26 @@ var googleAnalyticsOauthOnboarding = new ConnectorOnboarding({
10600
10600
  - Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`
10601
10601
  },
10602
10602
  dataOverviewInstructions: {
10603
- en: `Use the selected numeric property id in the path (write it directly, e.g. properties/123456789).
10604
- 1. Call connector_google-analytics-oauth_request with GET properties/<propertyId>/metadata to list available dimensions and metrics
10605
- 2. Call connector_google-analytics-oauth_request with POST properties/<propertyId>:runReport using a small date range and basic metrics to verify data availability`,
10606
- ja: `\u9078\u629E\u3057\u305F\u6570\u5024\u306E\u30D7\u30ED\u30D1\u30C6\u30A3ID\u3092\u30D1\u30B9\u306B\u76F4\u63A5\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u4F8B: properties/123456789\uFF09\u3002
10607
- 1. connector_google-analytics-oauth_request \u3067 GET properties/<propertyId>/metadata \u3092\u547C\u3073\u51FA\u3057\u3001\u5229\u7528\u53EF\u80FD\u306A\u30C7\u30A3\u30E1\u30F3\u30B7\u30E7\u30F3\u3068\u30E1\u30C8\u30EA\u30AF\u30B9\u306E\u4E00\u89A7\u3092\u53D6\u5F97
10608
- 2. connector_google-analytics-oauth_request \u3067 POST properties/<propertyId>:runReport \u3092\u77ED\u3044\u671F\u9593\u3068\u57FA\u672C\u30E1\u30C8\u30EA\u30AF\u30B9\u3067\u547C\u3073\u51FA\u3057\u3001\u30C7\u30FC\u30BF\u306E\u53EF\u7528\u6027\u3092\u78BA\u8A8D`
10603
+ en: `1. Call connector_google-analytics-oauth_request with GET properties/{propertyId}/metadata to list available dimensions and metrics
10604
+ 2. Call connector_google-analytics-oauth_request with POST properties/{propertyId}:runReport using a small date range and basic metrics to verify data availability`,
10605
+ ja: `1. connector_google-analytics-oauth_request \u3067 GET properties/{propertyId}/metadata \u3092\u547C\u3073\u51FA\u3057\u3001\u5229\u7528\u53EF\u80FD\u306A\u30C7\u30A3\u30E1\u30F3\u30B7\u30E7\u30F3\u3068\u30E1\u30C8\u30EA\u30AF\u30B9\u306E\u4E00\u89A7\u3092\u53D6\u5F97
10606
+ 2. connector_google-analytics-oauth_request \u3067 POST properties/{propertyId}:runReport \u3092\u77ED\u3044\u671F\u9593\u3068\u57FA\u672C\u30E1\u30C8\u30EA\u30AF\u30B9\u3067\u547C\u3073\u51FA\u3057\u3001\u30C7\u30FC\u30BF\u306E\u53EF\u7528\u6027\u3092\u78BA\u8A8D`
10609
10607
  }
10610
10608
  });
10611
10609
 
10612
10610
  // ../connectors/src/connectors/google-analytics-oauth/parameters.ts
10613
- var parameters16 = {};
10611
+ init_parameter_definition();
10612
+ var parameters16 = {
10613
+ propertyId: new ParameterDefinition({
10614
+ slug: "property-id",
10615
+ name: "Default Property ID",
10616
+ description: "Optional default Google Analytics 4 property ID (e.g., 123456789) used when a request does not specify one. Can be found in GA4 Admin > Property Settings. Leave empty to always pass the property ID per request.",
10617
+ envVarBaseKey: "GA_OAUTH_PROPERTY_ID",
10618
+ type: "text",
10619
+ secret: false,
10620
+ required: false
10621
+ })
10622
+ };
10614
10623
 
10615
10624
  // ../connectors/src/connectors/google-analytics-oauth/setup-flow.ts
10616
10625
  var ADMIN_BASE_URL4 = "https://analyticsadmin.googleapis.com/v1beta";
@@ -10917,7 +10926,7 @@ var inputSchema25 = z25.object({
10917
10926
  connectionId: z25.string().describe("ID of the Google Analytics OAuth connection to use"),
10918
10927
  method: z25.enum(["GET", "POST"]).describe("HTTP method"),
10919
10928
  path: z25.string().describe(
10920
- "API path appended to https://analyticsdata.googleapis.com/v1beta/ (e.g., 'properties/123456789:runReport'). Write the numeric property id directly into the path."
10929
+ "API path appended to https://analyticsdata.googleapis.com/v1beta/ (e.g., 'properties/123456789:runReport'). Write the numeric property id directly; the {propertyId} placeholder is only substituted when a default property is configured on the connection."
10921
10930
  ),
10922
10931
  body: z25.record(z25.string(), z25.unknown()).optional().describe("POST request body (JSON)")
10923
10932
  });
@@ -10936,10 +10945,10 @@ var requestTool4 = new ConnectorTool({
10936
10945
  name: "request",
10937
10946
  description: `Send authenticated requests to the Google Analytics Data API v1beta.
10938
10947
  Authentication is handled automatically via OAuth proxy.
10939
- Write the numeric property id directly into the path (e.g. properties/123456789:runReport).`,
10948
+ Write the numeric property id directly into the path (e.g. properties/123456789:runReport). The {propertyId} placeholder is only substituted when a default property is configured on the connection.`,
10940
10949
  inputSchema: inputSchema25,
10941
10950
  outputSchema: outputSchema25,
10942
- async execute({ connectionId, method, path: path4, body }, connections, config) {
10951
+ async execute({ connectionId, method, path: path5, body }, connections, config) {
10943
10952
  const connection = connections.find((c) => c.id === connectionId);
10944
10953
  if (!connection) {
10945
10954
  return {
@@ -10948,10 +10957,12 @@ Write the numeric property id directly into the path (e.g. properties/123456789:
10948
10957
  };
10949
10958
  }
10950
10959
  console.log(
10951
- `[connector-request] google-analytics-oauth/${connection.name}: ${method} ${path4}`
10960
+ `[connector-request] google-analytics-oauth/${connection.name}: ${method} ${path5}`
10952
10961
  );
10953
10962
  try {
10954
- const url = `${BASE_URL4}${path4}`;
10963
+ const propertyId = parameters16.propertyId.tryGetValue(connection);
10964
+ const resolvedPath = propertyId ? path5.replace(/\{propertyId\}/g, propertyId) : path5;
10965
+ const url = `${BASE_URL4}${resolvedPath}`;
10955
10966
  const token = await getProxyToken8(config.oauthProxy);
10956
10967
  const proxyUrl = `https://${config.oauthProxy.sandboxId}.${config.oauthProxy.previewBaseDomain}/_sqcore/connections/${connectionId}/request`;
10957
10968
  const controller = new AbortController();
@@ -11021,20 +11032,24 @@ var googleAnalyticsOauthConnector = new ConnectorPlugin({
11021
11032
  systemPrompt: {
11022
11033
  en: `### Tools
11023
11034
 
11024
- - \`connector_google-analytics-oauth_request\`: Send authenticated requests to the GA4 Data API. Use it for running reports, getting metadata, and realtime reports. Write the target property into the path as \`properties/{numericPropertyId}\`. Authentication is configured automatically via OAuth.
11035
+ - \`connector_google-analytics-oauth_request\`: Send authenticated requests to the GA4 Data API. Use it for running reports, getting metadata, and realtime reports. Write the target property into the path as \`properties/{numericPropertyId}\` (the \`{propertyId}\` placeholder is only substituted when a default property is configured on the connection). Authentication is configured automatically via OAuth.
11025
11036
  - \`connector_google-analytics-oauth_listAccounts\`: List accessible Google Analytics accounts. Use during setup to discover available accounts.
11026
11037
  - \`connector_google-analytics-oauth_listProperties\`: List GA4 properties for a given account. Use during setup to select the target property.
11027
11038
 
11028
- ### GA4 Data API Reference \u2014 for the \`connector_google-analytics-oauth_request\` **tool** only (setup/discovery)
11029
-
11030
- These raw HTTP shapes describe the discovery **tool** above. **In server-logic (Business Logic below) do NOT hand-build these HTTP requests \u2014 call the SDK method on the same line, which takes the same body fields and returns already-parsed JSON:**
11039
+ ### GA4 Data API Reference
11031
11040
 
11032
- | Raw HTTP (tool, discovery) | Server-logic (SDK method) |
11033
- |---|---|
11034
- | \`GET properties/{propertyId}/metadata\` | \`await client.getMetadata(propertyId)\` |
11035
- | \`POST properties/{propertyId}:runReport\` with body \`{ dateRanges, dimensions, metrics, limit }\` | \`await client.runReport({ propertyId, dateRanges, dimensions, metrics, limit })\` \u2192 \`{ rows, rowCount }\` |
11041
+ #### Get Metadata (Check available dimensions and metrics)
11042
+ - GET properties/{propertyId}/metadata
11036
11043
 
11037
- Report body fields: \`dateRanges: [{ startDate, endDate }]\`, \`dimensions: [{ name }]\`, \`metrics: [{ name }]\`, optional \`limit\`.
11044
+ ### Get Report
11045
+ - POST properties/{propertyId}:runReport
11046
+ - Body example:
11047
+ {
11048
+ "dateRanges": [{"startDate": "7daysAgo", "endDate": "today"}],
11049
+ "dimensions": [{"name": "date"}],
11050
+ "metrics": [{"name": "activeUsers"}],
11051
+ "limit": 100
11052
+ }
11038
11053
 
11039
11054
  ### Common Dimensions
11040
11055
  date, country, city, deviceCategory, browser, pagePath, pageTitle,
@@ -11052,14 +11067,13 @@ averageSessionDuration, conversions, totalRevenue
11052
11067
 
11053
11068
  The business logic type for this connector is "typescript". Write handler code using the connector SDK shown below. Do NOT access credentials directly from environment variables and do NOT read \`INTERNAL_SQUADBASE_*\` env vars \u2014 the SDK takes care of OAuth.
11054
11069
 
11055
- SDK surface (client created via \`connection(connectionId)\`). **Every method returns already-parsed JSON \u2014 you never build an HTTP request or parse a response yourself:**
11056
- - \`client.runReport({ propertyId, dateRanges, dimensions, metrics, limit? })\` \u2014 run a GA4 report. Returns \`{ rows, rowCount }\`. **Use this for all reporting.**
11057
- - \`client.runRealtimeReport({ propertyId, dimensions, metrics })\` \u2014 realtime report. Returns \`{ rows, rowCount }\`.
11058
- - \`client.getMetadata(propertyId)\` \u2014 available dimensions and metrics for a property.
11059
-
11060
- **Anti-pattern \u2014 do NOT do this.** \`client.request(...)\` is a low-level escape hatch that returns a raw \`Response\`; it is NOT how you run a report. In particular, **never call \`client.request({ method, path, body })\`** \u2014 that object shape belongs to the discovery *tool*, not the SDK. It will not run the report, and \`(await client.request({...})).rows\` is always \`undefined\`. Use \`client.runReport({ propertyId, ... })\` instead.
11070
+ SDK surface (client created via \`connection(connectionId)\`):
11071
+ - \`client.request(path, init?)\` \u2014 low-level authenticated fetch (\`path\` is appended to \`https://analyticsdata.googleapis.com/v1beta/\`; \`{propertyId}\` placeholders are auto-replaced only when a default property is configured on the connection).
11072
+ - \`client.runReport(request)\` \u2014 run a GA4 report. Set \`propertyId\` (bare numeric id) on the request object to target a property; required when no default is configured.
11073
+ - \`client.runRealtimeReport(request)\` \u2014 run a realtime report. \`propertyId\` works the same as \`runReport\`.
11074
+ - \`client.getMetadata(propertyId?)\` \u2014 fetch available dimensions and metrics for a property.
11061
11075
 
11062
- **\`propertyId\` is required on every call** \u2014 pass the numeric id from the data overview. A GA connection can span multiple properties, so there is no stored default.
11076
+ **Always pass \`propertyId\` explicitly** (the numeric id from the data overview) \u2014 the connection does not necessarily store a default property.
11063
11077
 
11064
11078
  If a handler test fails with \`Connection proxy is not configured\`, retry \u2014 the sandbox is still initializing. Do NOT abandon the SDK and construct OAuth proxy URLs manually.
11065
11079
 
@@ -11068,42 +11082,51 @@ If a handler test fails with \`Connection proxy is not configured\`, retry \u201
11068
11082
  \`\`\`ts
11069
11083
  import { connection } from "@squadbase/vite-server/connectors/google-analytics-oauth";
11070
11084
 
11071
- export default async function handler(c) {
11072
- const client = connection("<connectionId>");
11073
- const propertyId = "123456789"; // numeric GA4 property id from the data overview
11074
-
11075
- const { rows } = await client.runReport({
11076
- propertyId,
11077
- dateRanges: [{ startDate: "28daysAgo", endDate: "today" }],
11078
- dimensions: [{ name: "date" }, { name: "sessionDefaultChannelGroup" }],
11079
- metrics: [{ name: "sessions" }],
11080
- });
11085
+ const ga = connection("<connectionId>");
11086
+ const propertyId = "123456789"; // numeric GA4 property id from the data overview
11081
11087
 
11082
- const data = rows.map((row) => ({
11083
- date: row.dimensionValues[0].value,
11084
- channel: row.dimensionValues[1].value,
11085
- sessions: Number(row.metricValues[0].value) || 0,
11086
- }));
11088
+ // Convenience methods (pass propertyId explicitly)
11089
+ const { rows, rowCount } = await ga.runReport({
11090
+ propertyId,
11091
+ dateRanges: [{ startDate: "7daysAgo", endDate: "today" }],
11092
+ dimensions: [{ name: "date" }],
11093
+ metrics: [{ name: "activeUsers" }, { name: "sessions" }],
11094
+ limit: 100,
11095
+ });
11096
+ const metadata = await ga.getMetadata(propertyId);
11097
+ const realtime = await ga.runRealtimeReport({
11098
+ propertyId,
11099
+ metrics: [{ name: "activeUsers" }],
11100
+ dimensions: [{ name: "country" }],
11101
+ });
11087
11102
 
11088
- return c.json(data);
11089
- }
11103
+ // Low-level authenticated fetch (write the numeric property id into the path)
11104
+ const res = await ga.request(\`properties/\${propertyId}:runReport\`, {
11105
+ method: "POST",
11106
+ body: JSON.stringify({ dateRanges: [{ startDate: "7daysAgo", endDate: "today" }], metrics: [{ name: "activeUsers" }] }),
11107
+ });
11108
+ const data = await res.json();
11090
11109
  \`\`\``,
11091
11110
  ja: `### \u30C4\u30FC\u30EB
11092
11111
 
11093
- - \`connector_google-analytics-oauth_request\`: GA4 Data API\u3078\u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002\u30EC\u30DD\u30FC\u30C8\u306E\u5B9F\u884C\u3001\u30E1\u30BF\u30C7\u30FC\u30BF\u306E\u53D6\u5F97\u3001\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u30EC\u30DD\u30FC\u30C8\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u5BFE\u8C61\u30D7\u30ED\u30D1\u30C6\u30A3\u306F\u30D1\u30B9\u306B \`properties/{\u6570\u5024\u306E\u30D7\u30ED\u30D1\u30C6\u30A3ID}\` \u306E\u5F62\u3067\u76F4\u63A5\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002OAuth\u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
11112
+ - \`connector_google-analytics-oauth_request\`: GA4 Data API\u3078\u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002\u30EC\u30DD\u30FC\u30C8\u306E\u5B9F\u884C\u3001\u30E1\u30BF\u30C7\u30FC\u30BF\u306E\u53D6\u5F97\u3001\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u30EC\u30DD\u30FC\u30C8\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u5BFE\u8C61\u30D7\u30ED\u30D1\u30C6\u30A3\u306F\u30D1\u30B9\u306B \`properties/{\u6570\u5024\u306E\u30D7\u30ED\u30D1\u30C6\u30A3ID}\` \u306E\u5F62\u3067\u76F4\u63A5\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\`{propertyId}\` \u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u306F\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306B\u30C7\u30D5\u30A9\u30EB\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306E\u307F\u7F6E\u63DB\u3055\u308C\u307E\u3059\uFF09\u3002OAuth\u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
11094
11113
  - \`connector_google-analytics-oauth_listAccounts\`: \u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306AGoogle Analytics\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306B\u5229\u7528\u53EF\u80FD\u306A\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u78BA\u8A8D\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002
11095
11114
  - \`connector_google-analytics-oauth_listProperties\`: \u6307\u5B9A\u30A2\u30AB\u30A6\u30F3\u30C8\u306EGA4\u30D7\u30ED\u30D1\u30C6\u30A3\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306B\u30BF\u30FC\u30B2\u30C3\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u9078\u629E\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002
11096
11115
 
11097
- ### GA4 Data API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9 \u2014 \`connector_google-analytics-oauth_request\` **\u30C4\u30FC\u30EB**\u5C02\u7528\uFF08\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7/\u63A2\u7D22\u6642\uFF09
11098
-
11099
- \u4EE5\u4E0B\u306E\u751F\u306E HTTP \u5F62\u5F0F\u306F\u63A2\u7D22\u7528**\u30C4\u30FC\u30EB**\u306E\u3082\u306E\u3067\u3059\u3002**server-logic\uFF08\u4E0B\u8A18 Business Logic\uFF09\u3067\u306F\u3001\u3053\u308C\u3089\u306E HTTP \u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u624B\u7D44\u307F\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044 \u2014 \u540C\u3058 body \u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u53D6\u308A\u3001\u30D1\u30FC\u30B9\u6E08\u307F JSON \u3092\u8FD4\u3059 SDK \u30E1\u30BD\u30C3\u30C9\u3092\u547C\u3093\u3067\u304F\u3060\u3055\u3044:**
11116
+ ### GA4 Data API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
11100
11117
 
11101
- | \u751F\u306E HTTP\uFF08\u30C4\u30FC\u30EB\u30FB\u63A2\u7D22\u7528\uFF09 | server-logic\uFF08SDK \u30E1\u30BD\u30C3\u30C9\uFF09 |
11102
- |---|---|
11103
- | \`GET properties/{propertyId}/metadata\` | \`await client.getMetadata(propertyId)\` |
11104
- | \`POST properties/{propertyId}:runReport\`\uFF08body: \`{ dateRanges, dimensions, metrics, limit }\`\uFF09 | \`await client.runReport({ propertyId, dateRanges, dimensions, metrics, limit })\` \u2192 \`{ rows, rowCount }\` |
11118
+ #### \u30E1\u30BF\u30C7\u30FC\u30BF\u306E\u53D6\u5F97\uFF08\u5229\u7528\u53EF\u80FD\u306A\u30C7\u30A3\u30E1\u30F3\u30B7\u30E7\u30F3\u3068\u30E1\u30C8\u30EA\u30AF\u30B9\u306E\u78BA\u8A8D\uFF09
11119
+ - GET properties/{propertyId}/metadata
11105
11120
 
11106
- \u30EC\u30DD\u30FC\u30C8\u306E body \u30D5\u30A3\u30FC\u30EB\u30C9: \`dateRanges: [{ startDate, endDate }]\`, \`dimensions: [{ name }]\`, \`metrics: [{ name }]\`, \u4EFB\u610F\u3067 \`limit\`\u3002
11121
+ ### \u30EC\u30DD\u30FC\u30C8\u306E\u53D6\u5F97
11122
+ - POST properties/{propertyId}:runReport
11123
+ - Body\u4F8B:
11124
+ {
11125
+ "dateRanges": [{"startDate": "7daysAgo", "endDate": "today"}],
11126
+ "dimensions": [{"name": "date"}],
11127
+ "metrics": [{"name": "activeUsers"}],
11128
+ "limit": 100
11129
+ }
11107
11130
 
11108
11131
  ### \u4E3B\u8981\u306A\u30C7\u30A3\u30E1\u30F3\u30B7\u30E7\u30F3
11109
11132
  date, country, city, deviceCategory, browser, pagePath, pageTitle,
@@ -11121,14 +11144,13 @@ averageSessionDuration, conversions, totalRevenue
11121
11144
 
11122
11145
  \u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u4EE5\u4E0B\u306B\u793A\u3059\u30B3\u30CD\u30AF\u30BF SDK \u3092\u4F7F\u7528\u3057\u3066\u30CF\u30F3\u30C9\u30E9\u30B3\u30FC\u30C9\u3092\u8A18\u8FF0\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u76F4\u63A5\u8A8D\u8A3C\u60C5\u5831\u306B\u30A2\u30AF\u30BB\u30B9\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002\`INTERNAL_SQUADBASE_*\` \u306E\u74B0\u5883\u5909\u6570\u3092\u4F7F\u3063\u3066\u624B\u52D5\u3067 OAuth \u30D7\u30ED\u30AD\u30B7\u3092\u53E9\u304F\u3053\u3068\u3082\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044 \u2014 SDK \u304C OAuth \u3092\u51E6\u7406\u3057\u307E\u3059\u3002
11123
11146
 
11124
- SDK\uFF08\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\uFF09\u3002**\u5404\u30E1\u30BD\u30C3\u30C9\u306F\u30D1\u30FC\u30B9\u6E08\u307F JSON \u3092\u8FD4\u3057\u307E\u3059 \u2014 HTTP \u30EA\u30AF\u30A8\u30B9\u30C8\u306E\u7D44\u307F\u7ACB\u3066\u3084\u30EC\u30B9\u30DD\u30F3\u30B9\u306E\u30D1\u30FC\u30B9\u3092\u81EA\u5206\u3067\u884C\u3046\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093:**
11125
- - \`client.runReport({ propertyId, dateRanges, dimensions, metrics, limit? })\` \u2014 GA4 \u30EC\u30DD\u30FC\u30C8\u3092\u5B9F\u884C\u3002\`{ rows, rowCount }\` \u3092\u8FD4\u3057\u307E\u3059\u3002**\u30EC\u30DD\u30FC\u30C8\u53D6\u5F97\u306F\u5FC5\u305A\u3053\u308C\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002**
11126
- - \`client.runRealtimeReport({ propertyId, dimensions, metrics })\` \u2014 \u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u30EC\u30DD\u30FC\u30C8\u3002\`{ rows, rowCount }\` \u3092\u8FD4\u3057\u307E\u3059\u3002
11127
- - \`client.getMetadata(propertyId)\` \u2014 \u6307\u5B9A\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u5229\u7528\u53EF\u80FD\u306A\u30C7\u30A3\u30E1\u30F3\u30B7\u30E7\u30F3\u3068\u30E1\u30C8\u30EA\u30AF\u30B9\u3092\u53D6\u5F97\u3002
11128
-
11129
- **\u30A2\u30F3\u30C1\u30D1\u30BF\u30FC\u30F3 \u2014 \u3053\u308C\u306F\u7D76\u5BFE\u306B\u3084\u3089\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002** \`client.request(...)\` \u306F\u751F\u306E \`Response\` \u3092\u8FD4\u3059\u4F4E\u30EC\u30D9\u30EB\u306E\u9003\u3052\u9053\u3067\u3042\u308A\u3001\u30EC\u30DD\u30FC\u30C8\u5B9F\u884C\u306E\u624B\u6BB5\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u7279\u306B **\`client.request({ method, path, body })\` \u306F\u7D76\u5BFE\u306B\u547C\u3070\u306A\u3044\u3067\u304F\u3060\u3055\u3044** \u2014 \u305D\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u5F62\u306F\u63A2\u7D22\u7528*\u30C4\u30FC\u30EB*\u306E\u5F62\u3067\u3042\u3063\u3066 SDK \u306E\u3082\u306E\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u30EC\u30DD\u30FC\u30C8\u306F\u5B9F\u884C\u3055\u308C\u305A\u3001\`(await client.request({...})).rows\` \u306F\u5E38\u306B \`undefined\` \u306B\u306A\u308A\u307E\u3059\u3002\u4EE3\u308F\u308A\u306B \`client.runReport({ propertyId, ... })\` \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002
11147
+ SDK\uFF08\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\uFF09:
11148
+ - \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304D fetch\uFF08\`path\` \u306F \`https://analyticsdata.googleapis.com/v1beta/\` \u306B\u8FFD\u52A0\u3055\u308C\u307E\u3059\u3002\`{propertyId}\` \u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u306F\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306B\u30C7\u30D5\u30A9\u30EB\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u308B\u5834\u5408\u306E\u307F\u81EA\u52D5\u7F6E\u63DB\u3055\u308C\u307E\u3059\uFF09\u3002
11149
+ - \`client.runReport(request)\` \u2014 GA4 \u30EC\u30DD\u30FC\u30C8\u3092\u5B9F\u884C\u3002\u30EA\u30AF\u30A8\u30B9\u30C8\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306B \`propertyId\`\uFF08\u6570\u5024\u306E\u30D7\u30ED\u30D1\u30C6\u30A3ID\uFF09\u3092\u6307\u5B9A\u3057\u3066\u5BFE\u8C61\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u6C7A\u3081\u307E\u3059\u3002\u30C7\u30D5\u30A9\u30EB\u30C8\u672A\u8A2D\u5B9A\u306E\u5834\u5408\u306F\u5FC5\u9808\u3067\u3059\u3002
11150
+ - \`client.runRealtimeReport(request)\` \u2014 \u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u30EC\u30DD\u30FC\u30C8\u3092\u5B9F\u884C\u3002\`propertyId\` \u306E\u6271\u3044\u306F \`runReport\` \u3068\u540C\u3058\u3067\u3059\u3002
11151
+ - \`client.getMetadata(propertyId?)\` \u2014 \u6307\u5B9A\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u5229\u7528\u53EF\u80FD\u306A\u30C7\u30A3\u30E1\u30F3\u30B7\u30E7\u30F3\u3068\u30E1\u30C8\u30EA\u30AF\u30B9\u3092\u53D6\u5F97\u3002
11130
11152
 
11131
- **\`propertyId\` \u306F\u3059\u3079\u3066\u306E\u547C\u3073\u51FA\u3057\u3067\u5FC5\u9808\u3067\u3059**\uFF08\u30C7\u30FC\u30BF\u6982\u8981\u306B\u8F09\u3063\u3066\u3044\u308B\u6570\u5024ID\uFF09\u3002GA \u306E\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306F\u8907\u6570\u30D7\u30ED\u30D1\u30C6\u30A3\u306B\u307E\u305F\u304C\u308B\u3053\u3068\u304C\u3042\u308B\u305F\u3081\u3001\u30C7\u30D5\u30A9\u30EB\u30C8\u306F\u4FDD\u5B58\u3055\u308C\u307E\u305B\u3093\u3002
11153
+ **\`propertyId\` \u306F\u5FC5\u305A\u660E\u793A\u7684\u306B\u6E21\u3057\u3066\u304F\u3060\u3055\u3044**\uFF08\u30C7\u30FC\u30BF\u6982\u8981\u306B\u8F09\u3063\u3066\u3044\u308B\u6570\u5024ID\uFF09\u3002\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306B\u30C7\u30D5\u30A9\u30EB\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u4FDD\u5B58\u3055\u308C\u3066\u3044\u308B\u3068\u306F\u9650\u308A\u307E\u305B\u3093\u3002
11132
11154
 
11133
11155
  \u30CF\u30F3\u30C9\u30E9\u306E\u30C6\u30B9\u30C8\u304C \`Connection proxy is not configured\` \u3067\u5931\u6557\u3059\u308B\u5834\u5408\u306F\u518D\u8A66\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u901A\u5E38\u306F\u30B5\u30F3\u30C9\u30DC\u30C3\u30AF\u30B9\u306E\u521D\u671F\u5316\u4E2D\u306B\u8D77\u304D\u307E\u3059\u3002SDK \u3092\u8AE6\u3081\u3066 OAuth \u30D7\u30ED\u30AD\u30B7\u306E URL \u3092\u81EA\u5206\u3067\u7D44\u307F\u7ACB\u3066\u308B\u3053\u3068\u306F **\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044**\u3002
11134
11156
 
@@ -11137,32 +11159,41 @@ SDK\uFF08\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9
11137
11159
  \`\`\`ts
11138
11160
  import { connection } from "@squadbase/vite-server/connectors/google-analytics-oauth";
11139
11161
 
11140
- export default async function handler(c) {
11141
- const client = connection("<connectionId>");
11142
- const propertyId = "123456789"; // \u30C7\u30FC\u30BF\u6982\u8981\u306B\u8F09\u3063\u3066\u3044\u308B\u6570\u5024\u306E GA4 \u30D7\u30ED\u30D1\u30C6\u30A3ID
11143
-
11144
- const { rows } = await client.runReport({
11145
- propertyId,
11146
- dateRanges: [{ startDate: "28daysAgo", endDate: "today" }],
11147
- dimensions: [{ name: "date" }, { name: "sessionDefaultChannelGroup" }],
11148
- metrics: [{ name: "sessions" }],
11149
- });
11162
+ const ga = connection("<connectionId>");
11163
+ const propertyId = "123456789"; // \u30C7\u30FC\u30BF\u6982\u8981\u306B\u8F09\u3063\u3066\u3044\u308B\u6570\u5024\u306E GA4 \u30D7\u30ED\u30D1\u30C6\u30A3ID
11150
11164
 
11151
- const data = rows.map((row) => ({
11152
- date: row.dimensionValues[0].value,
11153
- channel: row.dimensionValues[1].value,
11154
- sessions: Number(row.metricValues[0].value) || 0,
11155
- }));
11165
+ // \u4FBF\u5229\u30E1\u30BD\u30C3\u30C9\uFF08propertyId \u3092\u660E\u793A\u7684\u306B\u6E21\u3059\uFF09
11166
+ const { rows, rowCount } = await ga.runReport({
11167
+ propertyId,
11168
+ dateRanges: [{ startDate: "7daysAgo", endDate: "today" }],
11169
+ dimensions: [{ name: "date" }],
11170
+ metrics: [{ name: "activeUsers" }, { name: "sessions" }],
11171
+ limit: 100,
11172
+ });
11173
+ const metadata = await ga.getMetadata(propertyId);
11174
+ const realtime = await ga.runRealtimeReport({
11175
+ propertyId,
11176
+ metrics: [{ name: "activeUsers" }],
11177
+ dimensions: [{ name: "country" }],
11178
+ });
11156
11179
 
11157
- return c.json(data);
11158
- }
11180
+ // \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304D fetch\uFF08\u6570\u5024\u306E\u30D7\u30ED\u30D1\u30C6\u30A3ID\u3092\u30D1\u30B9\u306B\u76F4\u63A5\u66F8\u304F\uFF09
11181
+ const res = await ga.request(\`properties/\${propertyId}:runReport\`, {
11182
+ method: "POST",
11183
+ body: JSON.stringify({ dateRanges: [{ startDate: "7daysAgo", endDate: "today" }], metrics: [{ name: "activeUsers" }] }),
11184
+ });
11185
+ const data = await res.json();
11159
11186
  \`\`\``
11160
11187
  },
11161
11188
  tools: tools16,
11162
11189
  setup: (params, ctx, config) => runSetupFlow(googleAnalyticsOauthSetupFlow, params, ctx, config),
11163
- async checkConnection(_params, config) {
11190
+ async checkConnection(params, config) {
11164
11191
  const { proxyFetch } = config;
11165
- const url = "https://analyticsadmin.googleapis.com/v1beta/accountSummaries";
11192
+ const propertyId = params[parameters16.propertyId.slug];
11193
+ if (!propertyId) {
11194
+ return { success: true };
11195
+ }
11196
+ const url = `https://analyticsdata.googleapis.com/v1beta/properties/${propertyId}/metadata`;
11166
11197
  try {
11167
11198
  const res = await proxyFetch(url, { method: "GET" });
11168
11199
  if (!res.ok) {
@@ -11186,8 +11217,8 @@ export default async function handler(c) {
11186
11217
  import { z as z26 } from "zod";
11187
11218
 
11188
11219
  // ../connectors/src/lib/normalize-path.ts
11189
- function normalizeRequestPath(path4, basePathSegment) {
11190
- let p = path4.trim();
11220
+ function normalizeRequestPath(path5, basePathSegment) {
11221
+ let p = path5.trim();
11191
11222
  if (!p.startsWith("/")) p = "/" + p;
11192
11223
  if (p === basePathSegment || p.startsWith(basePathSegment + "/")) {
11193
11224
  p = p.slice(basePathSegment.length) || "/";
@@ -11251,7 +11282,7 @@ var requestTool5 = new ConnectorTool({
11251
11282
  description: "Call the Google Calendar API as the service account itself (no delegation). Read-only operations only. Only calendars explicitly shared with the service account email are accessible. Pass `scopes` as a read-only Calendar scope (e.g., ['https://www.googleapis.com/auth/calendar.readonly']). Use this tool when the project knowledge records the calendar with `(service-account, ...)` (no `subject`).",
11252
11283
  inputSchema: inputSchema26,
11253
11284
  outputSchema: outputSchema26,
11254
- async execute({ connectionId, method, path: path4, scopes, queryParams, body }, connections) {
11285
+ async execute({ connectionId, method, path: path5, scopes, queryParams, body }, connections) {
11255
11286
  const connection = connections.find((c) => c.id === connectionId);
11256
11287
  if (!connection) {
11257
11288
  return {
@@ -11272,7 +11303,7 @@ var requestTool5 = new ConnectorTool({
11272
11303
  }
11273
11304
  const serviceAccountEmail = serviceAccount.client_email;
11274
11305
  console.log(
11275
- `[connector-request] google-calendar/${connection.name}: ${method} ${path4} (service account)`
11306
+ `[connector-request] google-calendar/${connection.name}: ${method} ${path5} (service account)`
11276
11307
  );
11277
11308
  try {
11278
11309
  const { GoogleAuth } = await import("google-auth-library");
@@ -11291,7 +11322,7 @@ var requestTool5 = new ConnectorTool({
11291
11322
  serviceAccountEmail
11292
11323
  };
11293
11324
  }
11294
- const normalizedPath = normalizeRequestPath(path4, BASE_PATH_SEGMENT);
11325
+ const normalizedPath = normalizeRequestPath(path5, BASE_PATH_SEGMENT);
11295
11326
  let url = `${BASE_URL5}${normalizedPath}`;
11296
11327
  if (queryParams) {
11297
11328
  const searchParams = new URLSearchParams(queryParams);
@@ -11388,7 +11419,7 @@ var requestWithDelegationTool = new ConnectorTool({
11388
11419
  description: "Call the Google Calendar API on behalf of the specified Workspace user via Domain-wide Delegation. Read-only operations only. Pass `subject` as the target user email and `scopes` as a read-only Calendar scope (e.g., ['https://www.googleapis.com/auth/calendar.readonly']). Use this tool when the project knowledge records the calendar with `(delegation, subject: <email>, ...)`. Requires Domain-wide Delegation to be authorized for the service account in the Workspace admin console.",
11389
11420
  inputSchema: inputSchema27,
11390
11421
  outputSchema: outputSchema27,
11391
- async execute({ connectionId, method, path: path4, subject, scopes, queryParams, body }, connections) {
11422
+ async execute({ connectionId, method, path: path5, subject, scopes, queryParams, body }, connections) {
11392
11423
  const connection = connections.find((c) => c.id === connectionId);
11393
11424
  if (!connection) {
11394
11425
  return {
@@ -11409,7 +11440,7 @@ var requestWithDelegationTool = new ConnectorTool({
11409
11440
  }
11410
11441
  const serviceAccountEmail = serviceAccount.client_email;
11411
11442
  console.log(
11412
- `[connector-request] google-calendar/${connection.name}: ${method} ${path4} subject=${subject}`
11443
+ `[connector-request] google-calendar/${connection.name}: ${method} ${path5} subject=${subject}`
11413
11444
  );
11414
11445
  try {
11415
11446
  const { GoogleAuth } = await import("google-auth-library");
@@ -11429,7 +11460,7 @@ var requestWithDelegationTool = new ConnectorTool({
11429
11460
  serviceAccountEmail
11430
11461
  };
11431
11462
  }
11432
- const normalizedPath = normalizeRequestPath(path4, BASE_PATH_SEGMENT2);
11463
+ const normalizedPath = normalizeRequestPath(path5, BASE_PATH_SEGMENT2);
11433
11464
  let url = `${BASE_URL6}${normalizedPath}`;
11434
11465
  if (queryParams) {
11435
11466
  const searchParams = new URLSearchParams(queryParams);
@@ -12511,7 +12542,7 @@ Authentication is handled automatically via OAuth proxy.
12511
12542
  {calendarId} in the path is automatically replaced with the connection's default calendar ID.`,
12512
12543
  inputSchema: inputSchema29,
12513
12544
  outputSchema: outputSchema29,
12514
- async execute({ connectionId, method, path: path4, queryParams, body }, connections, config) {
12545
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
12515
12546
  const connection = connections.find((c) => c.id === connectionId);
12516
12547
  if (!connection) {
12517
12548
  return {
@@ -12520,11 +12551,11 @@ Authentication is handled automatically via OAuth proxy.
12520
12551
  };
12521
12552
  }
12522
12553
  console.log(
12523
- `[connector-request] google-calendar-oauth/${connection.name}: ${method} ${path4}`
12554
+ `[connector-request] google-calendar-oauth/${connection.name}: ${method} ${path5}`
12524
12555
  );
12525
12556
  try {
12526
12557
  const calendarId = parameters18.calendarId.tryGetValue(connection) ?? "primary";
12527
- const resolvedPath = path4.replace(/\{calendarId\}/g, calendarId);
12558
+ const resolvedPath = path5.replace(/\{calendarId\}/g, calendarId);
12528
12559
  const normalizedPath = normalizeRequestPath(
12529
12560
  resolvedPath,
12530
12561
  BASE_PATH_SEGMENT3
@@ -12930,7 +12961,7 @@ Supports GET (read) and POST (create/update) methods.
12930
12961
  Authentication is handled automatically via OAuth proxy.`,
12931
12962
  inputSchema: inputSchema30,
12932
12963
  outputSchema: outputSchema30,
12933
- async execute({ connectionId, method, path: path4, body, queryParams }, connections, config) {
12964
+ async execute({ connectionId, method, path: path5, body, queryParams }, connections, config) {
12934
12965
  const connection = connections.find((c) => c.id === connectionId);
12935
12966
  if (!connection) {
12936
12967
  return {
@@ -12939,11 +12970,11 @@ Authentication is handled automatically via OAuth proxy.`,
12939
12970
  };
12940
12971
  }
12941
12972
  console.log(
12942
- `[connector-request] google-docs/${connection.name}: ${method} ${path4}`
12973
+ `[connector-request] google-docs/${connection.name}: ${method} ${path5}`
12943
12974
  );
12944
12975
  try {
12945
12976
  const normalizedPath = normalizeRequestPath(
12946
- path4,
12977
+ path5,
12947
12978
  DOCS_BASE_PATH_SEGMENT
12948
12979
  );
12949
12980
  let url = `${DOCS_BASE_URL}${normalizedPath === "/" ? "" : normalizedPath}`;
@@ -13395,7 +13426,7 @@ Supports GET (read/list/download), POST (create/copy), and PATCH (update) method
13395
13426
  Authentication is handled automatically via OAuth proxy.`,
13396
13427
  inputSchema: inputSchema31,
13397
13428
  outputSchema: outputSchema31,
13398
- async execute({ connectionId, method, path: path4, body, queryParams }, connections, config) {
13429
+ async execute({ connectionId, method, path: path5, body, queryParams }, connections, config) {
13399
13430
  const connection = connections.find((c) => c.id === connectionId);
13400
13431
  if (!connection) {
13401
13432
  return {
@@ -13404,10 +13435,10 @@ Authentication is handled automatically via OAuth proxy.`,
13404
13435
  };
13405
13436
  }
13406
13437
  console.log(
13407
- `[connector-request] google-drive/${connection.name}: ${method} ${path4}`
13438
+ `[connector-request] google-drive/${connection.name}: ${method} ${path5}`
13408
13439
  );
13409
13440
  try {
13410
- const normalizedPath = normalizeRequestPath(path4, BASE_PATH_SEGMENT4);
13441
+ const normalizedPath = normalizeRequestPath(path5, BASE_PATH_SEGMENT4);
13411
13442
  let url = `${BASE_URL9}${normalizedPath}`;
13412
13443
  if (queryParams) {
13413
13444
  const searchParams = new URLSearchParams(queryParams);
@@ -13836,7 +13867,7 @@ The caller must include the target spreadsheetId in the path explicitly.
13836
13867
  Authentication is handled automatically via OAuth proxy.`,
13837
13868
  inputSchema: inputSchema32,
13838
13869
  outputSchema: outputSchema32,
13839
- async execute({ connectionId, method, path: path4, queryParams }, connections, config) {
13870
+ async execute({ connectionId, method, path: path5, queryParams }, connections, config) {
13840
13871
  const connection = connections.find((c) => c.id === connectionId);
13841
13872
  if (!connection) {
13842
13873
  return {
@@ -13845,11 +13876,11 @@ Authentication is handled automatically via OAuth proxy.`,
13845
13876
  };
13846
13877
  }
13847
13878
  console.log(
13848
- `[connector-request] google-sheets/${connection.name}: ${method} ${path4}`
13879
+ `[connector-request] google-sheets/${connection.name}: ${method} ${path5}`
13849
13880
  );
13850
13881
  try {
13851
13882
  const normalizedPath = normalizeRequestPath(
13852
- path4,
13883
+ path5,
13853
13884
  SHEETS_BASE_PATH_SEGMENT
13854
13885
  );
13855
13886
  let url = `${SHEETS_BASE_URL}${normalizedPath === "/" ? "" : normalizedPath}`;
@@ -14352,7 +14383,7 @@ Supports GET (read) and POST (create/update) methods.
14352
14383
  Authentication is handled automatically via OAuth proxy.`,
14353
14384
  inputSchema: inputSchema33,
14354
14385
  outputSchema: outputSchema33,
14355
- async execute({ connectionId, method, path: path4, body, queryParams }, connections, config) {
14386
+ async execute({ connectionId, method, path: path5, body, queryParams }, connections, config) {
14356
14387
  const connection = connections.find((c) => c.id === connectionId);
14357
14388
  if (!connection) {
14358
14389
  return {
@@ -14361,11 +14392,11 @@ Authentication is handled automatically via OAuth proxy.`,
14361
14392
  };
14362
14393
  }
14363
14394
  console.log(
14364
- `[connector-request] google-slides/${connection.name}: ${method} ${path4}`
14395
+ `[connector-request] google-slides/${connection.name}: ${method} ${path5}`
14365
14396
  );
14366
14397
  try {
14367
14398
  const normalizedPath = normalizeRequestPath(
14368
- path4,
14399
+ path5,
14369
14400
  SLIDES_BASE_PATH_SEGMENT
14370
14401
  );
14371
14402
  let url = `${SLIDES_BASE_URL}${normalizedPath === "/" ? "" : normalizedPath}`;
@@ -14656,7 +14687,7 @@ var requestTool11 = new ConnectorTool({
14656
14687
  Authentication is handled automatically via OAuth proxy.`,
14657
14688
  inputSchema: inputSchema34,
14658
14689
  outputSchema: outputSchema34,
14659
- async execute({ connectionId, method, path: path4, queryParams, body }, connections, config) {
14690
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
14660
14691
  const connection = connections.find((c) => c.id === connectionId);
14661
14692
  if (!connection) {
14662
14693
  return {
@@ -14665,10 +14696,10 @@ Authentication is handled automatically via OAuth proxy.`,
14665
14696
  };
14666
14697
  }
14667
14698
  console.log(
14668
- `[connector-request] hubspot-oauth/${connection.name}: ${method} ${path4}`
14699
+ `[connector-request] hubspot-oauth/${connection.name}: ${method} ${path5}`
14669
14700
  );
14670
14701
  try {
14671
- let url = `${BASE_URL10}${path4.startsWith("/") ? "" : "/"}${path4}`;
14702
+ let url = `${BASE_URL10}${path5.startsWith("/") ? "" : "/"}${path5}`;
14672
14703
  if (queryParams) {
14673
14704
  const searchParams = new URLSearchParams(queryParams);
14674
14705
  url += `?${searchParams.toString()}`;
@@ -14744,8 +14775,8 @@ var hubspotOnboarding = new ConnectorOnboarding({
14744
14775
 
14745
14776
  // ../connectors/src/connectors/hubspot-oauth/utils.ts
14746
14777
  var BASE_URL11 = "https://api.hubapi.com";
14747
- function apiFetch2(proxyFetch, path4, init) {
14748
- const url = `${BASE_URL11}${path4.startsWith("/") ? "" : "/"}${path4}`;
14778
+ function apiFetch2(proxyFetch, path5, init) {
14779
+ const url = `${BASE_URL11}${path5.startsWith("/") ? "" : "/"}${path5}`;
14749
14780
  return proxyFetch(url, init);
14750
14781
  }
14751
14782
 
@@ -15067,7 +15098,7 @@ var requestTool12 = new ConnectorTool({
15067
15098
  Authentication is handled automatically via OAuth proxy.`,
15068
15099
  inputSchema: inputSchema35,
15069
15100
  outputSchema: outputSchema35,
15070
- async execute({ connectionId, method, path: path4, queryParams, body }, connections, config) {
15101
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
15071
15102
  const connection = connections.find((c) => c.id === connectionId);
15072
15103
  if (!connection) {
15073
15104
  return {
@@ -15076,10 +15107,10 @@ Authentication is handled automatically via OAuth proxy.`,
15076
15107
  };
15077
15108
  }
15078
15109
  console.log(
15079
- `[connector-request] stripe-oauth/${connection.name}: ${method} ${path4}`
15110
+ `[connector-request] stripe-oauth/${connection.name}: ${method} ${path5}`
15080
15111
  );
15081
15112
  try {
15082
- let url = `${BASE_URL12}${path4.startsWith("/") ? "" : "/"}${path4}`;
15113
+ let url = `${BASE_URL12}${path5.startsWith("/") ? "" : "/"}${path5}`;
15083
15114
  if (queryParams) {
15084
15115
  const searchParams = new URLSearchParams(queryParams);
15085
15116
  url += `?${searchParams.toString()}`;
@@ -15493,7 +15524,7 @@ Authentication is handled automatically using the configured API Key (Bearer tok
15493
15524
  Use this tool for all Stripe API interactions: querying charges, customers, invoices, subscriptions, products, prices, payment intents, balances, and more.`,
15494
15525
  inputSchema: inputSchema36,
15495
15526
  outputSchema: outputSchema36,
15496
- async execute({ connectionId, method, path: path4, queryParams, body }, connections) {
15527
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections) {
15497
15528
  const connection = connections.find((c) => c.id === connectionId);
15498
15529
  if (!connection) {
15499
15530
  return {
@@ -15502,11 +15533,11 @@ Use this tool for all Stripe API interactions: querying charges, customers, invo
15502
15533
  };
15503
15534
  }
15504
15535
  console.log(
15505
- `[connector-request] stripe-api-key/${connection.name}: ${method} ${path4}`
15536
+ `[connector-request] stripe-api-key/${connection.name}: ${method} ${path5}`
15506
15537
  );
15507
15538
  try {
15508
15539
  const apiKey = parameters25.apiKey.getValue(connection);
15509
- let url = `${BASE_URL14}${path4.startsWith("/") ? "" : "/"}${path4}`;
15540
+ let url = `${BASE_URL14}${path5.startsWith("/") ? "" : "/"}${path5}`;
15510
15541
  if (queryParams) {
15511
15542
  const searchParams = new URLSearchParams(queryParams);
15512
15543
  url += `?${searchParams.toString()}`;
@@ -15586,12 +15617,12 @@ var stripeApiKeyOnboarding = new ConnectorOnboarding({
15586
15617
 
15587
15618
  // ../connectors/src/connectors/stripe-api-key/utils.ts
15588
15619
  var BASE_URL15 = "https://api.stripe.com";
15589
- async function apiFetch3(params, path4, init) {
15620
+ async function apiFetch3(params, path5, init) {
15590
15621
  const apiKey = params[parameters25.apiKey.slug];
15591
15622
  if (!apiKey) {
15592
15623
  throw new Error("stripe-api-key: missing required parameter: api-key");
15593
15624
  }
15594
- const url = `${BASE_URL15}${path4.startsWith("/") ? "" : "/"}${path4}`;
15625
+ const url = `${BASE_URL15}${path5.startsWith("/") ? "" : "/"}${path5}`;
15595
15626
  const headers = new Headers(init?.headers);
15596
15627
  headers.set("Authorization", `Bearer ${apiKey}`);
15597
15628
  return fetch(url, { ...init, headers });
@@ -15630,8 +15661,8 @@ var ENTITY_PATHS2 = {
15630
15661
  paymentIntents: "/v1/payment_intents?limit=3"
15631
15662
  };
15632
15663
  var ENTITY_VALUES2 = Object.keys(ENTITY_PATHS2);
15633
- async function defaultFetchEntity(params, path4) {
15634
- return apiFetch3(params, path4);
15664
+ async function defaultFetchEntity(params, path5) {
15665
+ return apiFetch3(params, path5);
15635
15666
  }
15636
15667
  function createStripeSetupFlow(fetchEntity = defaultFetchEntity, labelPrefix = "Stripe") {
15637
15668
  return {
@@ -15965,7 +15996,7 @@ Authentication is handled automatically via OAuth proxy.
15965
15996
  {baseId} in the path is automatically replaced with the connection's default base ID if configured.`,
15966
15997
  inputSchema: inputSchema37,
15967
15998
  outputSchema: outputSchema37,
15968
- async execute({ connectionId, method, path: path4, queryParams, body }, connections, config) {
15999
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
15969
16000
  const connection = connections.find((c) => c.id === connectionId);
15970
16001
  if (!connection) {
15971
16002
  return {
@@ -15974,11 +16005,11 @@ Authentication is handled automatically via OAuth proxy.
15974
16005
  };
15975
16006
  }
15976
16007
  console.log(
15977
- `[connector-request] airtable-oauth/${connection.name}: ${method} ${path4}`
16008
+ `[connector-request] airtable-oauth/${connection.name}: ${method} ${path5}`
15978
16009
  );
15979
16010
  try {
15980
16011
  const baseId = parameters26.baseId.tryGetValue(connection);
15981
- const resolvedPath = baseId ? path4.replace(/\{baseId\}/g, baseId) : path4;
16012
+ const resolvedPath = baseId ? path5.replace(/\{baseId\}/g, baseId) : path5;
15982
16013
  let url = `${BASE_URL16}${resolvedPath.startsWith("/") ? "" : "/"}${resolvedPath}`;
15983
16014
  if (queryParams) {
15984
16015
  const searchParams = new URLSearchParams(queryParams);
@@ -16063,8 +16094,8 @@ var airtableOauthOnboarding = new ConnectorOnboarding({
16063
16094
 
16064
16095
  // ../connectors/src/connectors/airtable-oauth/utils.ts
16065
16096
  var BASE_URL17 = "https://api.airtable.com/v0";
16066
- function apiFetch4(proxyFetch, path4, init) {
16067
- const url = `${BASE_URL17}${path4.startsWith("/") ? "" : "/"}${path4}`;
16097
+ function apiFetch4(proxyFetch, path5, init) {
16098
+ const url = `${BASE_URL17}${path5.startsWith("/") ? "" : "/"}${path5}`;
16068
16099
  return proxyFetch(url, init);
16069
16100
  }
16070
16101
 
@@ -16403,7 +16434,7 @@ var parameters27 = {
16403
16434
  };
16404
16435
 
16405
16436
  // ../connectors/src/connectors/kintone/utils.ts
16406
- async function apiFetch5(params, path4, init) {
16437
+ async function apiFetch5(params, path5, init) {
16407
16438
  const baseUrl = params[parameters27.baseUrl.slug];
16408
16439
  const username = params[parameters27.username.slug];
16409
16440
  const password = params[parameters27.password.slug];
@@ -16413,7 +16444,7 @@ async function apiFetch5(params, path4, init) {
16413
16444
  );
16414
16445
  }
16415
16446
  const authToken = Buffer.from(`${username}:${password}`).toString("base64");
16416
- const normalizedPath = path4.replace(/^\/+/, "");
16447
+ const normalizedPath = path5.replace(/^\/+/, "");
16417
16448
  const url = `${baseUrl.replace(/\/+$/, "")}/k/v1/${normalizedPath}`;
16418
16449
  const headers = new Headers(init?.headers);
16419
16450
  headers.set("X-Cybozu-Authorization", authToken);
@@ -16627,18 +16658,18 @@ var requestTool15 = new ConnectorTool({
16627
16658
  Authentication is handled automatically using username and password.`,
16628
16659
  inputSchema: inputSchema38,
16629
16660
  outputSchema: outputSchema38,
16630
- async execute({ connectionId, method, path: path4, body }, connections) {
16661
+ async execute({ connectionId, method, path: path5, body }, connections) {
16631
16662
  const connection = connections.find((c) => c.id === connectionId);
16632
16663
  if (!connection) {
16633
16664
  return { success: false, error: `Connection ${connectionId} not found` };
16634
16665
  }
16635
- console.log(`[connector-request] kintone/${connection.name}: ${method} ${path4}`);
16666
+ console.log(`[connector-request] kintone/${connection.name}: ${method} ${path5}`);
16636
16667
  try {
16637
16668
  const baseUrl = parameters27.baseUrl.getValue(connection);
16638
16669
  const username = parameters27.username.getValue(connection);
16639
16670
  const password = parameters27.password.getValue(connection);
16640
16671
  const authToken = Buffer.from(`${username}:${password}`).toString("base64");
16641
- const url = `${baseUrl.replace(/\/+$/, "")}/k/v1/${path4}`;
16672
+ const url = `${baseUrl.replace(/\/+$/, "")}/k/v1/${path5}`;
16642
16673
  const controller = new AbortController();
16643
16674
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS26);
16644
16675
  try {
@@ -16943,7 +16974,7 @@ var parameters28 = {
16943
16974
  };
16944
16975
 
16945
16976
  // ../connectors/src/connectors/kintone-api-token/utils.ts
16946
- async function apiFetch6(params, path4, init) {
16977
+ async function apiFetch6(params, path5, init) {
16947
16978
  const baseUrl = params[parameters28.baseUrl.slug];
16948
16979
  const apiToken = params[parameters28.apiToken.slug];
16949
16980
  if (!baseUrl || !apiToken) {
@@ -16951,7 +16982,7 @@ async function apiFetch6(params, path4, init) {
16951
16982
  "kintone-api-token: missing required parameter(s): base-url, api-token"
16952
16983
  );
16953
16984
  }
16954
- const normalizedPath = path4.replace(/^\/+/, "");
16985
+ const normalizedPath = path5.replace(/^\/+/, "");
16955
16986
  const url = `${baseUrl.replace(/\/+$/, "")}/k/v1/${normalizedPath}`;
16956
16987
  const headers = new Headers(init?.headers);
16957
16988
  headers.set("X-Cybozu-API-Token", apiToken);
@@ -17064,8 +17095,8 @@ var APP_PARAM_KEY_BY_ENDPOINT = {
17064
17095
  "app.json": "id"
17065
17096
  };
17066
17097
  var DEFAULT_APP_PARAM_KEY = "app";
17067
- function injectAppIntoPath(path4, appId) {
17068
- const [head, query = ""] = path4.split("?", 2);
17098
+ function injectAppIntoPath(path5, appId) {
17099
+ const [head, query = ""] = path5.split("?", 2);
17069
17100
  const endpoint = head.toLowerCase();
17070
17101
  const paramKey = APP_PARAM_KEY_BY_ENDPOINT[endpoint] ?? DEFAULT_APP_PARAM_KEY;
17071
17102
  const params = new URLSearchParams(query);
@@ -17106,17 +17137,17 @@ var requestTool16 = new ConnectorTool({
17106
17137
  Authentication is handled automatically using the API token.`,
17107
17138
  inputSchema: inputSchema39,
17108
17139
  outputSchema: outputSchema39,
17109
- async execute({ connectionId, method, path: path4, body }, connections) {
17140
+ async execute({ connectionId, method, path: path5, body }, connections) {
17110
17141
  const connection = connections.find((c) => c.id === connectionId);
17111
17142
  if (!connection) {
17112
17143
  return { success: false, error: `Connection ${connectionId} not found` };
17113
17144
  }
17114
- console.log(`[connector-request] kintone-api-token/${connection.name}: ${method} ${path4}`);
17145
+ console.log(`[connector-request] kintone-api-token/${connection.name}: ${method} ${path5}`);
17115
17146
  try {
17116
17147
  const baseUrl = parameters28.baseUrl.getValue(connection);
17117
17148
  const apiToken = parameters28.apiToken.getValue(connection);
17118
17149
  const appId = parameters28.appId.getValue(connection);
17119
- const normalizedPath = path4.replace(/^\/+/, "");
17150
+ const normalizedPath = path5.replace(/^\/+/, "");
17120
17151
  const pathHead = normalizedPath.split("?")[0] ?? "";
17121
17152
  if (/^apps\.json$/i.test(pathHead)) {
17122
17153
  return {
@@ -17333,8 +17364,8 @@ export default async function handler(c: Context) {
17333
17364
  };
17334
17365
  }
17335
17366
  try {
17336
- const path4 = appId ? `app.json?id=${encodeURIComponent(appId)}` : `app/form/fields.json?app=0`;
17337
- const url = `${baseUrl.replace(/\/+$/, "")}/k/v1/${path4}`;
17367
+ const path5 = appId ? `app.json?id=${encodeURIComponent(appId)}` : `app/form/fields.json?app=0`;
17368
+ const url = `${baseUrl.replace(/\/+$/, "")}/k/v1/${path5}`;
17338
17369
  const res = await fetch(url, {
17339
17370
  method: "GET",
17340
17371
  headers: {
@@ -17415,7 +17446,7 @@ var parameters29 = {
17415
17446
 
17416
17447
  // ../connectors/src/connectors/wix-store/utils.ts
17417
17448
  var BASE_URL18 = "https://www.wixapis.com";
17418
- async function apiFetch7(params, path4, init) {
17449
+ async function apiFetch7(params, path5, init) {
17419
17450
  const apiKey = params[parameters29.apiKey.slug];
17420
17451
  const siteId = params[parameters29.siteId.slug];
17421
17452
  if (!apiKey || !siteId) {
@@ -17423,7 +17454,7 @@ async function apiFetch7(params, path4, init) {
17423
17454
  "wix-store: missing required parameters: api-key and site-id"
17424
17455
  );
17425
17456
  }
17426
- const url = `${BASE_URL18}${path4.startsWith("/") ? "" : "/"}${path4}`;
17457
+ const url = `${BASE_URL18}${path5.startsWith("/") ? "" : "/"}${path5}`;
17427
17458
  const headers = new Headers(init?.headers);
17428
17459
  headers.set("Authorization", apiKey);
17429
17460
  headers.set("wix-site-id", siteId);
@@ -17469,8 +17500,8 @@ var QUERY_SPECS = {
17469
17500
  totalField: "totalResults"
17470
17501
  }
17471
17502
  };
17472
- function lookupNumeric(data, path4) {
17473
- const parts = path4.split(".");
17503
+ function lookupNumeric(data, path5) {
17504
+ const parts = path5.split(".");
17474
17505
  let cur = data;
17475
17506
  for (const p of parts) {
17476
17507
  if (!cur || typeof cur !== "object") return void 0;
@@ -17552,16 +17583,16 @@ var requestTool17 = new ConnectorTool({
17552
17583
  Authentication is handled automatically using the API Key and Site ID.`,
17553
17584
  inputSchema: inputSchema40,
17554
17585
  outputSchema: outputSchema40,
17555
- async execute({ connectionId, method, path: path4, body }, connections) {
17586
+ async execute({ connectionId, method, path: path5, body }, connections) {
17556
17587
  const connection = connections.find((c) => c.id === connectionId);
17557
17588
  if (!connection) {
17558
17589
  return { success: false, error: `Connection ${connectionId} not found` };
17559
17590
  }
17560
- console.log(`[connector-request] wix-store/${connection.name}: ${method} ${path4}`);
17591
+ console.log(`[connector-request] wix-store/${connection.name}: ${method} ${path5}`);
17561
17592
  try {
17562
17593
  const apiKey = parameters29.apiKey.getValue(connection);
17563
17594
  const siteId = parameters29.siteId.getValue(connection);
17564
- const url = `${BASE_URL19}${path4}`;
17595
+ const url = `${BASE_URL19}${path5}`;
17565
17596
  const controller = new AbortController();
17566
17597
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS28);
17567
17598
  try {
@@ -17859,7 +17890,7 @@ function adminApiBase(host) {
17859
17890
  }
17860
17891
  return `https://${trimmed}`;
17861
17892
  }
17862
- function adminApiFetch(params, path4, init) {
17893
+ function adminApiFetch(params, path5, init) {
17863
17894
  const host = params[parameters30.host.slug];
17864
17895
  const token = params[parameters30.token.slug];
17865
17896
  if (!host) {
@@ -17868,7 +17899,7 @@ function adminApiFetch(params, path4, init) {
17868
17899
  if (!token) {
17869
17900
  throw new Error(`dbt: missing required parameter: ${parameters30.token.slug}`);
17870
17901
  }
17871
- const trimmedPath = path4.startsWith("/") ? path4 : `/${path4}`;
17902
+ const trimmedPath = path5.startsWith("/") ? path5 : `/${path5}`;
17872
17903
  const headers = new Headers(init?.headers);
17873
17904
  headers.set("Authorization", `Token ${token}`);
17874
17905
  if (!headers.has("Accept")) headers.set("Accept", "application/json");
@@ -17957,8 +17988,8 @@ async function fetchRecentRunCount(params, projectId2) {
17957
17988
  const accountId = params[parameters30.accountId.slug];
17958
17989
  if (!accountId) return null;
17959
17990
  try {
17960
- const path4 = `/api/v2/accounts/${encodeURIComponent(accountId)}/runs/?project_id=${encodeURIComponent(projectId2)}&limit=1&order_by=-id`;
17961
- const res = await adminApiFetch(params, path4);
17991
+ const path5 = `/api/v2/accounts/${encodeURIComponent(accountId)}/runs/?project_id=${encodeURIComponent(projectId2)}&limit=1&order_by=-id`;
17992
+ const res = await adminApiFetch(params, path5);
17962
17993
  if (!res.ok) return null;
17963
17994
  const data = await res.json();
17964
17995
  const total = data.extra?.pagination?.total_count;
@@ -18209,11 +18240,11 @@ function classifyByTags(tags) {
18209
18240
  function classifyModel(m) {
18210
18241
  const fromTags = classifyByTags(m.tags ?? []);
18211
18242
  if (fromTags) return fromTags;
18212
- const path4 = (m.filePath ?? "").toLowerCase();
18213
- if (path4) {
18214
- if (MART_PATH_RE.test(path4)) return "mart";
18215
- if (INT_PATH_RE.test(path4)) return "intermediate";
18216
- if (STG_PATH_RE.test(path4)) return "staging";
18243
+ const path5 = (m.filePath ?? "").toLowerCase();
18244
+ if (path5) {
18245
+ if (MART_PATH_RE.test(path5)) return "mart";
18246
+ if (INT_PATH_RE.test(path5)) return "intermediate";
18247
+ if (STG_PATH_RE.test(path5)) return "staging";
18217
18248
  }
18218
18249
  const name = (m.name ?? "").toLowerCase();
18219
18250
  if (MART_NAME_RE.test(name)) return "mart";
@@ -19569,7 +19600,7 @@ function getBaseUrl(params) {
19569
19600
  const region = params[parameters35.region.slug];
19570
19601
  return region === "eu" ? "https://analytics.eu.amplitude.com" : "https://amplitude.com";
19571
19602
  }
19572
- async function apiFetch8(params, path4, init) {
19603
+ async function apiFetch8(params, path5, init) {
19573
19604
  const apiKey = params[parameters35.apiKey.slug];
19574
19605
  const secretKey = params[parameters35.secretKey.slug];
19575
19606
  if (!apiKey || !secretKey) {
@@ -19577,7 +19608,7 @@ async function apiFetch8(params, path4, init) {
19577
19608
  "amplitude: missing required parameters: api-key and secret-key"
19578
19609
  );
19579
19610
  }
19580
- const url = `${getBaseUrl(params)}${path4.startsWith("/") ? "" : "/"}${path4}`;
19611
+ const url = `${getBaseUrl(params)}${path5.startsWith("/") ? "" : "/"}${path5}`;
19581
19612
  const headers = new Headers(init?.headers);
19582
19613
  headers.set("Authorization", `Basic ${btoa(`${apiKey}:${secretKey}`)}`);
19583
19614
  return fetch(url, { ...init, headers });
@@ -19983,12 +20014,12 @@ var parameters36 = {
19983
20014
 
19984
20015
  // ../connectors/src/connectors/attio/utils.ts
19985
20016
  var BASE_URL20 = "https://api.attio.com/v2";
19986
- async function apiFetch9(params, path4, init) {
20017
+ async function apiFetch9(params, path5, init) {
19987
20018
  const apiKey = params[parameters36.apiKey.slug];
19988
20019
  if (!apiKey) {
19989
20020
  throw new Error("attio: missing required parameter: api-key");
19990
20021
  }
19991
- const url = `${BASE_URL20}${path4.startsWith("/") ? "" : "/"}${path4}`;
20022
+ const url = `${BASE_URL20}${path5.startsWith("/") ? "" : "/"}${path5}`;
19992
20023
  const headers = new Headers(init?.headers);
19993
20024
  headers.set("Authorization", `Bearer ${apiKey}`);
19994
20025
  headers.set("Accept", "application/json");
@@ -20129,7 +20160,7 @@ Use this tool for every Attio API interaction, including: querying records (peop
20129
20160
  Record queries use POST /objects/{object}/records/query with a JSON body containing \`filter\`, \`sorts\`, \`limit\`, and \`offset\`. Record updates use PATCH (append multiselect) or PUT (overwrite multiselect). Workspace members, tasks, webhooks, notes, threads, comments, and meetings live at top-level paths \u2014 the workspace-members path uses a snake_case underscore: /workspace_members.`,
20130
20161
  inputSchema: inputSchema44,
20131
20162
  outputSchema: outputSchema44,
20132
- async execute({ connectionId, method, path: path4, body }, connections) {
20163
+ async execute({ connectionId, method, path: path5, body }, connections) {
20133
20164
  const connection = connections.find((c) => c.id === connectionId);
20134
20165
  if (!connection) {
20135
20166
  return {
@@ -20138,11 +20169,11 @@ Record queries use POST /objects/{object}/records/query with a JSON body contain
20138
20169
  };
20139
20170
  }
20140
20171
  console.log(
20141
- `[connector-request] attio/${connection.name}: ${method} ${path4}`
20172
+ `[connector-request] attio/${connection.name}: ${method} ${path5}`
20142
20173
  );
20143
20174
  try {
20144
20175
  const apiKey = parameters36.apiKey.getValue(connection);
20145
- const url = `${BASE_URL21}${path4}`;
20176
+ const url = `${BASE_URL21}${path5}`;
20146
20177
  const controller = new AbortController();
20147
20178
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS31);
20148
20179
  try {
@@ -20598,9 +20629,9 @@ async function getAccessToken3(params) {
20598
20629
  }
20599
20630
  return data.access_token;
20600
20631
  }
20601
- async function apiFetch10(params, path4, init) {
20632
+ async function apiFetch10(params, path5, init) {
20602
20633
  const token = await getAccessToken3(params);
20603
- const url = `${getStoreBaseUrl(params)}${path4.startsWith("/") ? "" : "/"}${path4}`;
20634
+ const url = `${getStoreBaseUrl(params)}${path5.startsWith("/") ? "" : "/"}${path5}`;
20604
20635
  const headers = new Headers(init?.headers);
20605
20636
  headers.set("X-Shopify-Access-Token", token);
20606
20637
  if (!headers.has("Content-Type")) {
@@ -20635,8 +20666,8 @@ var COUNT_PATHS = {
20635
20666
  inventory: null,
20636
20667
  discounts: `/admin/api/${SHOPIFY_API_VERSION}/price_rules/count.json`
20637
20668
  };
20638
- async function defaultFetchCount(params, path4) {
20639
- return apiFetch10(params, path4);
20669
+ async function defaultFetchCount(params, path5) {
20670
+ return apiFetch10(params, path5);
20640
20671
  }
20641
20672
  function createShopifySetupFlow(fetchCount5 = defaultFetchCount, labelPrefix = "Shopify") {
20642
20673
  return {
@@ -20667,10 +20698,10 @@ function createShopifySetupFlow(fetchCount5 = defaultFetchCount, labelPrefix = "
20667
20698
  ).slice(0, SHOPIFY_SETUP_MAX_ENTITIES);
20668
20699
  const sections = [`## ${labelPrefix}`, ""];
20669
20700
  for (const entity of selected) {
20670
- const path4 = COUNT_PATHS[entity];
20701
+ const path5 = COUNT_PATHS[entity];
20671
20702
  let count = "available";
20672
- if (path4) {
20673
- const res = await fetchCount5(rt.params, path4);
20703
+ if (path5) {
20704
+ const res = await fetchCount5(rt.params, path5);
20674
20705
  if (res.ok) {
20675
20706
  const data = await res.json();
20676
20707
  if (typeof data.count === "number") count = String(data.count);
@@ -20720,7 +20751,7 @@ The store domain is resolved from the connection \u2014 only provide the path st
20720
20751
  Use this tool for all Shopify API interactions: listing products, orders, customers, inventory, collections, and more.`,
20721
20752
  inputSchema: inputSchema45,
20722
20753
  outputSchema: outputSchema45,
20723
- async execute({ connectionId, method, path: path4, body }, connections) {
20754
+ async execute({ connectionId, method, path: path5, body }, connections) {
20724
20755
  const connection = connections.find((c) => c.id === connectionId);
20725
20756
  if (!connection) {
20726
20757
  return {
@@ -20729,7 +20760,7 @@ Use this tool for all Shopify API interactions: listing products, orders, custom
20729
20760
  };
20730
20761
  }
20731
20762
  console.log(
20732
- `[connector-request] shopify/${connection.name}: ${method} ${path4}`
20763
+ `[connector-request] shopify/${connection.name}: ${method} ${path5}`
20733
20764
  );
20734
20765
  try {
20735
20766
  const storeDomain = parameters37.storeDomain.getValue(connection);
@@ -20761,7 +20792,7 @@ Use this tool for all Shopify API interactions: listing products, orders, custom
20761
20792
  error: "access_token not found in token response"
20762
20793
  };
20763
20794
  }
20764
- const url = `https://${storeDomain}${path4}`;
20795
+ const url = `https://${storeDomain}${path5}`;
20765
20796
  const controller = new AbortController();
20766
20797
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS32);
20767
20798
  try {
@@ -21076,7 +21107,7 @@ var requestTool22 = new ConnectorTool({
21076
21107
  Authentication is handled automatically via OAuth proxy.`,
21077
21108
  inputSchema: inputSchema46,
21078
21109
  outputSchema: outputSchema46,
21079
- async execute({ connectionId, method, path: path4, queryParams, body }, connections, config) {
21110
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
21080
21111
  const connection = connections.find((c) => c.id === connectionId);
21081
21112
  if (!connection) {
21082
21113
  return {
@@ -21085,10 +21116,10 @@ Authentication is handled automatically via OAuth proxy.`,
21085
21116
  };
21086
21117
  }
21087
21118
  console.log(
21088
- `[connector-request] shopify-oauth/${connection.name}: ${method} ${path4}`
21119
+ `[connector-request] shopify-oauth/${connection.name}: ${method} ${path5}`
21089
21120
  );
21090
21121
  try {
21091
- let url = path4;
21122
+ let url = path5;
21092
21123
  if (queryParams) {
21093
21124
  const searchParams = new URLSearchParams(queryParams);
21094
21125
  url += `${url.includes("?") ? "&" : "?"}${searchParams.toString()}`;
@@ -21223,10 +21254,10 @@ var shopifyOauthSetupFlow = {
21223
21254
  sections.push("| Entity | Count |");
21224
21255
  sections.push("|--------|-------|");
21225
21256
  for (const entity of selected) {
21226
- const path4 = COUNT_PATHS2[entity];
21257
+ const path5 = COUNT_PATHS2[entity];
21227
21258
  let count = "available";
21228
- if (path4) {
21229
- const res = await rt.config.proxyFetch(path4, { method: "GET" });
21259
+ if (path5) {
21260
+ const res = await rt.config.proxyFetch(path5, { method: "GET" });
21230
21261
  if (res.ok) {
21231
21262
  const data = await res.json();
21232
21263
  if (typeof data.count === "number") count = String(data.count);
@@ -21439,12 +21470,12 @@ var parameters39 = {
21439
21470
 
21440
21471
  // ../connectors/src/connectors/hubspot/utils.ts
21441
21472
  var BASE_URL22 = "https://api.hubapi.com";
21442
- async function apiFetch11(params, path4, init) {
21473
+ async function apiFetch11(params, path5, init) {
21443
21474
  const apiKey = params[parameters39.apiKey.slug];
21444
21475
  if (!apiKey) {
21445
21476
  throw new Error("hubspot: missing required parameter: api-key");
21446
21477
  }
21447
- const url = `${BASE_URL22}${path4.startsWith("/") ? "" : "/"}${path4}`;
21478
+ const url = `${BASE_URL22}${path5.startsWith("/") ? "" : "/"}${path5}`;
21448
21479
  const headers = new Headers(init?.headers);
21449
21480
  headers.set("Authorization", `Bearer ${apiKey}`);
21450
21481
  headers.set("Accept", "application/json");
@@ -21585,7 +21616,7 @@ Use this tool for all HubSpot API interactions: querying contacts, deals, compan
21585
21616
  Use the search endpoint (POST /crm/v3/objects/{objectType}/search) for complex queries with filters.`,
21586
21617
  inputSchema: inputSchema47,
21587
21618
  outputSchema: outputSchema47,
21588
- async execute({ connectionId, method, path: path4, body }, connections) {
21619
+ async execute({ connectionId, method, path: path5, body }, connections) {
21589
21620
  const connection = connections.find((c) => c.id === connectionId);
21590
21621
  if (!connection) {
21591
21622
  return {
@@ -21594,11 +21625,11 @@ Use the search endpoint (POST /crm/v3/objects/{objectType}/search) for complex q
21594
21625
  };
21595
21626
  }
21596
21627
  console.log(
21597
- `[connector-request] hubspot/${connection.name}: ${method} ${path4}`
21628
+ `[connector-request] hubspot/${connection.name}: ${method} ${path5}`
21598
21629
  );
21599
21630
  try {
21600
21631
  const apiKey = parameters39.apiKey.getValue(connection);
21601
- const url = `${BASE_URL23}${path4.startsWith("/") ? "" : "/"}${path4}`;
21632
+ const url = `${BASE_URL23}${path5.startsWith("/") ? "" : "/"}${path5}`;
21602
21633
  const controller = new AbortController();
21603
21634
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS34);
21604
21635
  try {
@@ -21856,7 +21887,7 @@ var parameters40 = {
21856
21887
  };
21857
21888
 
21858
21889
  // ../connectors/src/connectors/jira/utils.ts
21859
- async function apiFetch12(params, path4, init) {
21890
+ async function apiFetch12(params, path5, init) {
21860
21891
  const instanceUrl = params[parameters40.instanceUrl.slug];
21861
21892
  const email = params[parameters40.email.slug];
21862
21893
  const apiToken = params[parameters40.apiToken.slug];
@@ -21870,7 +21901,7 @@ async function apiFetch12(params, path4, init) {
21870
21901
  throw new Error("jira: missing required parameter: api-token");
21871
21902
  }
21872
21903
  const credentials = Buffer.from(`${email}:${apiToken}`).toString("base64");
21873
- const trimmedPath = path4.replace(/^\/+/, "");
21904
+ const trimmedPath = path5.replace(/^\/+/, "");
21874
21905
  const url = `${instanceUrl.replace(/\/+$/, "")}/rest/api/3/${trimmedPath}`;
21875
21906
  const headers = new Headers(init?.headers);
21876
21907
  headers.set("Authorization", `Basic ${credentials}`);
@@ -22056,17 +22087,17 @@ Use this tool for all Jira operations: listing projects, searching issues with J
22056
22087
  The base URL and authentication credentials are configured per connection \u2014 only specify the API path relative to /rest/api/3/.`,
22057
22088
  inputSchema: inputSchema48,
22058
22089
  outputSchema: outputSchema48,
22059
- async execute({ connectionId, method, path: path4, body }, connections) {
22090
+ async execute({ connectionId, method, path: path5, body }, connections) {
22060
22091
  const connection = connections.find((c) => c.id === connectionId);
22061
22092
  if (!connection) {
22062
22093
  return { success: false, error: `Connection ${connectionId} not found` };
22063
22094
  }
22064
- console.log(`[connector-request] jira-api-key/${connection.name}: ${method} ${path4}`);
22095
+ console.log(`[connector-request] jira-api-key/${connection.name}: ${method} ${path5}`);
22065
22096
  try {
22066
22097
  const instanceUrl = parameters40.instanceUrl.getValue(connection);
22067
22098
  const email = parameters40.email.getValue(connection);
22068
22099
  const apiToken = parameters40.apiToken.getValue(connection);
22069
- const baseUrl = `${instanceUrl.replace(/\/+$/, "")}/rest/api/3/${path4}`;
22100
+ const baseUrl = `${instanceUrl.replace(/\/+$/, "")}/rest/api/3/${path5}`;
22070
22101
  const credentials = Buffer.from(`${email}:${apiToken}`).toString("base64");
22071
22102
  const controller = new AbortController();
22072
22103
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS35);
@@ -22785,12 +22816,12 @@ var parameters42 = {
22785
22816
 
22786
22817
  // ../connectors/src/connectors/asana/utils.ts
22787
22818
  var BASE_URL26 = "https://app.asana.com/api/1.0";
22788
- async function apiFetch13(params, path4, init) {
22819
+ async function apiFetch13(params, path5, init) {
22789
22820
  const token = params[parameters42.personalAccessToken.slug];
22790
22821
  if (!token) {
22791
22822
  throw new Error("asana: missing required parameter: personal-access-token");
22792
22823
  }
22793
- const url = `${BASE_URL26}${path4.startsWith("/") ? "" : "/"}${path4}`;
22824
+ const url = `${BASE_URL26}${path5.startsWith("/") ? "" : "/"}${path5}`;
22794
22825
  const headers = new Headers(init?.headers);
22795
22826
  headers.set("Authorization", `Bearer ${token}`);
22796
22827
  if (!headers.has("Accept")) headers.set("Accept", "application/json");
@@ -22985,7 +23016,7 @@ Common endpoints:
22985
23016
  Pagination: Use limit (1-100) and offset query parameters. The response includes next_page.offset for the next page.`,
22986
23017
  inputSchema: inputSchema50,
22987
23018
  outputSchema: outputSchema50,
22988
- async execute({ connectionId, method, path: path4, body }, connections) {
23019
+ async execute({ connectionId, method, path: path5, body }, connections) {
22989
23020
  const connection = connections.find((c) => c.id === connectionId);
22990
23021
  if (!connection) {
22991
23022
  return {
@@ -22994,11 +23025,11 @@ Pagination: Use limit (1-100) and offset query parameters. The response includes
22994
23025
  };
22995
23026
  }
22996
23027
  console.log(
22997
- `[connector-request] asana/${connection.name}: ${method} ${path4}`
23028
+ `[connector-request] asana/${connection.name}: ${method} ${path5}`
22998
23029
  );
22999
23030
  try {
23000
23031
  const token = parameters42.personalAccessToken.getValue(connection);
23001
- const normalizedPath = normalizeRequestPath(path4, BASE_PATH_SEGMENT5);
23032
+ const normalizedPath = normalizeRequestPath(path5, BASE_PATH_SEGMENT5);
23002
23033
  const url = `${BASE_URL27}${normalizedPath}`;
23003
23034
  const controller = new AbortController();
23004
23035
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS37);
@@ -24294,12 +24325,12 @@ var parameters45 = {
24294
24325
  // ../connectors/src/connectors/notion/utils.ts
24295
24326
  var BASE_URL28 = "https://api.notion.com/v1";
24296
24327
  var NOTION_VERSION = "2022-06-28";
24297
- async function apiFetch14(params, path4, init) {
24328
+ async function apiFetch14(params, path5, init) {
24298
24329
  const apiKey = params[parameters45.apiKey.slug];
24299
24330
  if (!apiKey) {
24300
24331
  throw new Error("notion: missing required parameter: api-key");
24301
24332
  }
24302
- const url = `${BASE_URL28}${path4.startsWith("/") ? "" : "/"}${path4}`;
24333
+ const url = `${BASE_URL28}${path5.startsWith("/") ? "" : "/"}${path5}`;
24303
24334
  const headers = new Headers(init?.headers);
24304
24335
  headers.set("Authorization", `Bearer ${apiKey}`);
24305
24336
  headers.set("Notion-Version", NOTION_VERSION);
@@ -24534,7 +24565,7 @@ Use this tool for all Notion API interactions: searching pages/databases, queryi
24534
24565
  Pagination uses cursor-based start_cursor and page_size (max 100).`,
24535
24566
  inputSchema: inputSchema55,
24536
24567
  outputSchema: outputSchema55,
24537
- async execute({ connectionId, method, path: path4, body }, connections) {
24568
+ async execute({ connectionId, method, path: path5, body }, connections) {
24538
24569
  const connection = connections.find((c) => c.id === connectionId);
24539
24570
  if (!connection) {
24540
24571
  return {
@@ -24543,11 +24574,11 @@ Pagination uses cursor-based start_cursor and page_size (max 100).`,
24543
24574
  };
24544
24575
  }
24545
24576
  console.log(
24546
- `[connector-request] notion/${connection.name}: ${method} ${path4}`
24577
+ `[connector-request] notion/${connection.name}: ${method} ${path5}`
24547
24578
  );
24548
24579
  try {
24549
24580
  const apiKey = parameters45.apiKey.getValue(connection);
24550
- const url = `${BASE_URL29}${path4.startsWith("/") ? "" : "/"}${path4}`;
24581
+ const url = `${BASE_URL29}${path5.startsWith("/") ? "" : "/"}${path5}`;
24551
24582
  const controller = new AbortController();
24552
24583
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS38);
24553
24584
  try {
@@ -24834,7 +24865,7 @@ Use this tool for all Notion API interactions: searching pages/databases, queryi
24834
24865
  Pagination uses cursor-based start_cursor and page_size (max 100).`,
24835
24866
  inputSchema: inputSchema56,
24836
24867
  outputSchema: outputSchema56,
24837
- async execute({ connectionId, method, path: path4, body }, connections, config) {
24868
+ async execute({ connectionId, method, path: path5, body }, connections, config) {
24838
24869
  const connection = connections.find((c) => c.id === connectionId);
24839
24870
  if (!connection) {
24840
24871
  return {
@@ -24843,10 +24874,10 @@ Pagination uses cursor-based start_cursor and page_size (max 100).`,
24843
24874
  };
24844
24875
  }
24845
24876
  console.log(
24846
- `[connector-request] notion-oauth/${connection.name}: ${method} ${path4}`
24877
+ `[connector-request] notion-oauth/${connection.name}: ${method} ${path5}`
24847
24878
  );
24848
24879
  try {
24849
- const url = `${BASE_URL30}${path4.startsWith("/") ? "" : "/"}${path4}`;
24880
+ const url = `${BASE_URL30}${path5.startsWith("/") ? "" : "/"}${path5}`;
24850
24881
  const token = await getProxyToken19(config.oauthProxy);
24851
24882
  const proxyUrl = `https://${config.oauthProxy.sandboxId}.${config.oauthProxy.previewBaseDomain}/_sqcore/connections/${connectionId}/request`;
24852
24883
  const controller = new AbortController();
@@ -24925,8 +24956,8 @@ var parameters46 = {};
24925
24956
  // ../connectors/src/connectors/notion-oauth/utils.ts
24926
24957
  var BASE_URL31 = "https://api.notion.com/v1";
24927
24958
  var NOTION_VERSION4 = "2022-06-28";
24928
- function apiFetch15(proxyFetch, path4, init) {
24929
- const url = `${BASE_URL31}${path4.startsWith("/") ? "" : "/"}${path4}`;
24959
+ function apiFetch15(proxyFetch, path5, init) {
24960
+ const url = `${BASE_URL31}${path5.startsWith("/") ? "" : "/"}${path5}`;
24930
24961
  const headers = new Headers(init?.headers);
24931
24962
  headers.set("Notion-Version", NOTION_VERSION4);
24932
24963
  if (init?.body && !headers.has("Content-Type")) {
@@ -25367,13 +25398,13 @@ var metaAdsOnboarding = new ConnectorOnboarding({
25367
25398
 
25368
25399
  // ../connectors/src/connectors/meta-ads/utils.ts
25369
25400
  var BASE_URL33 = "https://graph.facebook.com/v21.0";
25370
- async function apiFetch16(params, path4, init) {
25401
+ async function apiFetch16(params, path5, init) {
25371
25402
  const accessToken = params[parameters47.accessToken.slug];
25372
25403
  if (!accessToken) {
25373
25404
  throw new Error("meta-ads: missing required parameter: access-token");
25374
25405
  }
25375
- const sep = path4.includes("?") ? "&" : "?";
25376
- const url = `${BASE_URL33}${path4.startsWith("/") ? "" : "/"}${path4}${sep}access_token=${encodeURIComponent(accessToken)}`;
25406
+ const sep = path5.includes("?") ? "&" : "?";
25407
+ const url = `${BASE_URL33}${path5.startsWith("/") ? "" : "/"}${path5}${sep}access_token=${encodeURIComponent(accessToken)}`;
25377
25408
  return fetch(url, init);
25378
25409
  }
25379
25410
 
@@ -25528,7 +25559,7 @@ Authentication is handled via the configured access token.
25528
25559
  {adAccountId} in the path is automatically replaced with the connection's ad account ID (with act_ prefix added).`,
25529
25560
  inputSchema: inputSchema58,
25530
25561
  outputSchema: outputSchema58,
25531
- async execute({ connectionId, method, path: path4, queryParams, body }, connections) {
25562
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections) {
25532
25563
  const connection = connections.find((c) => c.id === connectionId);
25533
25564
  if (!connection) {
25534
25565
  return {
@@ -25537,12 +25568,12 @@ Authentication is handled via the configured access token.
25537
25568
  };
25538
25569
  }
25539
25570
  console.log(
25540
- `[connector-request] meta-ads/${connection.name}: ${method} ${path4}`
25571
+ `[connector-request] meta-ads/${connection.name}: ${method} ${path5}`
25541
25572
  );
25542
25573
  try {
25543
25574
  const accessToken = parameters47.accessToken.getValue(connection);
25544
25575
  const adAccountId = parameters47.adAccountId.tryGetValue(connection) ?? "";
25545
- const resolvedPath = adAccountId ? path4.replace(/\{adAccountId\}/g, adAccountId) : path4;
25576
+ const resolvedPath = adAccountId ? path5.replace(/\{adAccountId\}/g, adAccountId) : path5;
25546
25577
  let url = `${BASE_URL34}${resolvedPath}`;
25547
25578
  const params = new URLSearchParams(queryParams ?? {});
25548
25579
  params.set("access_token", accessToken);
@@ -26092,7 +26123,7 @@ Authentication is handled automatically via OAuth proxy.
26092
26123
  {adAccountId} in the path is automatically replaced with the connection's ad account ID.`,
26093
26124
  inputSchema: inputSchema60,
26094
26125
  outputSchema: outputSchema60,
26095
- async execute({ connectionId, method, path: path4, queryParams, body }, connections, config) {
26126
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
26096
26127
  const connection = connections.find((c) => c.id === connectionId);
26097
26128
  if (!connection) {
26098
26129
  return {
@@ -26101,11 +26132,11 @@ Authentication is handled automatically via OAuth proxy.
26101
26132
  };
26102
26133
  }
26103
26134
  console.log(
26104
- `[connector-request] meta-ads-oauth/${connection.name}: ${method} ${path4}`
26135
+ `[connector-request] meta-ads-oauth/${connection.name}: ${method} ${path5}`
26105
26136
  );
26106
26137
  try {
26107
26138
  const adAccountId = parameters48.adAccountId.tryGetValue(connection) ?? "";
26108
- const resolvedPath = adAccountId ? path4.replace(/\{adAccountId\}/g, adAccountId) : path4;
26139
+ const resolvedPath = adAccountId ? path5.replace(/\{adAccountId\}/g, adAccountId) : path5;
26109
26140
  let url = `${BASE_URL37}${resolvedPath}`;
26110
26141
  if (queryParams && Object.keys(queryParams).length > 0) {
26111
26142
  const params = new URLSearchParams(queryParams);
@@ -26676,7 +26707,7 @@ Authentication is handled automatically via OAuth proxy.
26676
26707
  The advertiser_id is automatically injected if configured.`,
26677
26708
  inputSchema: inputSchema62,
26678
26709
  outputSchema: outputSchema62,
26679
- async execute({ connectionId, method, path: path4, queryParams, body }, connections, config) {
26710
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
26680
26711
  const connection = connections.find((c) => c.id === connectionId);
26681
26712
  if (!connection) {
26682
26713
  return {
@@ -26685,11 +26716,11 @@ The advertiser_id is automatically injected if configured.`,
26685
26716
  };
26686
26717
  }
26687
26718
  console.log(
26688
- `[connector-request] tiktok-ads/${connection.name}: ${method} ${path4}`
26719
+ `[connector-request] tiktok-ads/${connection.name}: ${method} ${path5}`
26689
26720
  );
26690
26721
  try {
26691
26722
  const advertiserId = parameters49.advertiserId.tryGetValue(connection) ?? "";
26692
- const normalizedPath = normalizeRequestPath(path4, BASE_PATH_SEGMENT6);
26723
+ const normalizedPath = normalizeRequestPath(path5, BASE_PATH_SEGMENT6);
26693
26724
  let url = `${BASE_URL40}${normalizedPath}`;
26694
26725
  if (method === "GET") {
26695
26726
  const params = new URLSearchParams(queryParams ?? {});
@@ -26974,14 +27005,14 @@ function extractDatacenter(apiKey) {
26974
27005
  }
26975
27006
  return dc;
26976
27007
  }
26977
- async function apiFetch17(params, path4, init) {
27008
+ async function apiFetch17(params, path5, init) {
26978
27009
  const apiKey = params[parameters50.apiKey.slug];
26979
27010
  if (!apiKey) {
26980
27011
  throw new Error("mailchimp: missing required parameter: api-key");
26981
27012
  }
26982
27013
  const dc = extractDatacenter(apiKey);
26983
27014
  const baseUrl = `https://${dc}.api.mailchimp.com/3.0`;
26984
- const url = `${baseUrl}${path4.startsWith("/") ? "" : "/"}${path4}`;
27015
+ const url = `${baseUrl}${path5.startsWith("/") ? "" : "/"}${path5}`;
26985
27016
  const headers = new Headers(init?.headers);
26986
27017
  headers.set("Authorization", `Basic ${btoa(`anystring:${apiKey}`)}`);
26987
27018
  return fetch(url, { ...init, headers });
@@ -27114,7 +27145,7 @@ Use this tool for all Mailchimp API interactions: managing audiences/lists, camp
27114
27145
  The datacenter is automatically extracted from the API key suffix.`,
27115
27146
  inputSchema: inputSchema63,
27116
27147
  outputSchema: outputSchema63,
27117
- async execute({ connectionId, method, path: path4, queryParams, body }, connections) {
27148
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections) {
27118
27149
  const connection = connections.find((c) => c.id === connectionId);
27119
27150
  if (!connection) {
27120
27151
  return {
@@ -27123,13 +27154,13 @@ The datacenter is automatically extracted from the API key suffix.`,
27123
27154
  };
27124
27155
  }
27125
27156
  console.log(
27126
- `[connector-request] mailchimp/${connection.name}: ${method} ${path4}`
27157
+ `[connector-request] mailchimp/${connection.name}: ${method} ${path5}`
27127
27158
  );
27128
27159
  try {
27129
27160
  const apiKey = parameters50.apiKey.getValue(connection);
27130
27161
  const dc = extractDatacenter2(apiKey);
27131
27162
  const baseUrl = `https://${dc}.api.mailchimp.com/3.0`;
27132
- let url = `${baseUrl}${path4.startsWith("/") ? "" : "/"}${path4}`;
27163
+ let url = `${baseUrl}${path5.startsWith("/") ? "" : "/"}${path5}`;
27133
27164
  if (queryParams) {
27134
27165
  const searchParams = new URLSearchParams(queryParams);
27135
27166
  url += `?${searchParams.toString()}`;
@@ -27442,7 +27473,7 @@ var parameters51 = {
27442
27473
  };
27443
27474
 
27444
27475
  // ../connectors/src/connectors/mailchimp-oauth/utils.ts
27445
- function apiFetch18(params, proxyFetch, path4, init) {
27476
+ function apiFetch18(params, proxyFetch, path5, init) {
27446
27477
  const serverPrefix = params[parameters51.serverPrefix.slug];
27447
27478
  if (!serverPrefix) {
27448
27479
  throw new Error(
@@ -27450,7 +27481,7 @@ function apiFetch18(params, proxyFetch, path4, init) {
27450
27481
  );
27451
27482
  }
27452
27483
  const baseUrl = `https://${serverPrefix}.api.mailchimp.com/3.0`;
27453
- const url = `${baseUrl}${path4.startsWith("/") ? "" : "/"}${path4}`;
27484
+ const url = `${baseUrl}${path5.startsWith("/") ? "" : "/"}${path5}`;
27454
27485
  return proxyFetch(url, init);
27455
27486
  }
27456
27487
 
@@ -27598,7 +27629,7 @@ var requestTool33 = new ConnectorTool({
27598
27629
  Authentication is handled automatically via OAuth proxy.`,
27599
27630
  inputSchema: inputSchema64,
27600
27631
  outputSchema: outputSchema64,
27601
- async execute({ connectionId, method, path: path4, queryParams, body }, connections, config) {
27632
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
27602
27633
  const connection = connections.find((c) => c.id === connectionId);
27603
27634
  if (!connection) {
27604
27635
  return {
@@ -27607,12 +27638,12 @@ Authentication is handled automatically via OAuth proxy.`,
27607
27638
  };
27608
27639
  }
27609
27640
  console.log(
27610
- `[connector-request] mailchimp-oauth/${connection.name}: ${method} ${path4}`
27641
+ `[connector-request] mailchimp-oauth/${connection.name}: ${method} ${path5}`
27611
27642
  );
27612
27643
  try {
27613
27644
  const serverPrefix = parameters51.serverPrefix.getValue(connection);
27614
27645
  const baseUrl = `https://${serverPrefix}.api.mailchimp.com/3.0`;
27615
- let url = `${baseUrl}${path4.startsWith("/") ? "" : "/"}${path4}`;
27646
+ let url = `${baseUrl}${path5.startsWith("/") ? "" : "/"}${path5}`;
27616
27647
  if (queryParams) {
27617
27648
  const searchParams = new URLSearchParams(queryParams);
27618
27649
  url += `?${searchParams.toString()}`;
@@ -27855,14 +27886,14 @@ var parameters52 = {
27855
27886
  };
27856
27887
 
27857
27888
  // ../connectors/src/connectors/customerio/utils.ts
27858
- async function apiFetch19(params, path4, init) {
27889
+ async function apiFetch19(params, path5, init) {
27859
27890
  const apiKey = params[parameters52.appApiKey.slug];
27860
27891
  if (!apiKey) {
27861
27892
  throw new Error("customerio: missing required parameter: app-api-key");
27862
27893
  }
27863
27894
  const region = params[parameters52.region.slug];
27864
27895
  const baseUrl = region === "eu" ? "https://api-eu.customer.io" : "https://api.customer.io";
27865
- const url = `${baseUrl}${path4.startsWith("/") ? "" : "/"}${path4}`;
27896
+ const url = `${baseUrl}${path5.startsWith("/") ? "" : "/"}${path5}`;
27866
27897
  const headers = new Headers(init?.headers);
27867
27898
  headers.set("Authorization", `Bearer ${apiKey}`);
27868
27899
  return fetch(url, { ...init, headers });
@@ -27919,10 +27950,10 @@ async function fetchEntityCount(params, entity) {
27919
27950
  campaigns: "/v1/campaigns",
27920
27951
  newsletters: "/v1/newsletters"
27921
27952
  };
27922
- const path4 = endpoint[entity];
27923
- if (!path4) return "available";
27953
+ const path5 = endpoint[entity];
27954
+ if (!path5) return "available";
27924
27955
  try {
27925
- const res = await apiFetch19(params, path4);
27956
+ const res = await apiFetch19(params, path5);
27926
27957
  if (!res.ok) return "available";
27927
27958
  const data = await res.json();
27928
27959
  if (typeof data.count === "number") return String(data.count);
@@ -28008,7 +28039,7 @@ Use this tool for reading customer data, managing campaigns, segments, broadcast
28008
28039
  The App API is the read and management path for Customer.io data.`,
28009
28040
  inputSchema: inputSchema65,
28010
28041
  outputSchema: outputSchema65,
28011
- async execute({ connectionId, method, path: path4, queryParams, body }, connections) {
28042
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections) {
28012
28043
  const connection = connections.find((c) => c.id === connectionId);
28013
28044
  if (!connection) {
28014
28045
  return {
@@ -28017,13 +28048,13 @@ The App API is the read and management path for Customer.io data.`,
28017
28048
  };
28018
28049
  }
28019
28050
  console.log(
28020
- `[connector-request] customerio/${connection.name}: ${method} ${path4}`
28051
+ `[connector-request] customerio/${connection.name}: ${method} ${path5}`
28021
28052
  );
28022
28053
  try {
28023
28054
  const appApiKey = parameters52.appApiKey.getValue(connection);
28024
28055
  const region = parameters52.region.tryGetValue(connection);
28025
28056
  const baseUrl = getBaseUrl2(region);
28026
- let url = `${baseUrl}${path4.startsWith("/") ? "" : "/"}${path4}`;
28057
+ let url = `${baseUrl}${path5.startsWith("/") ? "" : "/"}${path5}`;
28027
28058
  if (queryParams) {
28028
28059
  const searchParams = new URLSearchParams(queryParams);
28029
28060
  url += `?${searchParams.toString()}`;
@@ -28348,7 +28379,7 @@ var requestWithDelegationTool2 = new ConnectorTool({
28348
28379
  description: "Call the Gmail API on behalf of the specified Workspace user via Domain-wide Delegation. Read-only operations only. Pass `subject` as the target user email and `scopes` as ['https://www.googleapis.com/auth/gmail.readonly']. Paths are relative to https://gmail.googleapis.com/gmail/v1/users \u2014 use '/me' as the userId prefix (e.g., '/me/messages'). Requires Domain-wide Delegation to be authorized for the service account in the Workspace admin console.",
28349
28380
  inputSchema: inputSchema66,
28350
28381
  outputSchema: outputSchema66,
28351
- async execute({ connectionId, method, path: path4, subject, scopes, queryParams, body }, connections) {
28382
+ async execute({ connectionId, method, path: path5, subject, scopes, queryParams, body }, connections) {
28352
28383
  const connection = connections.find((c) => c.id === connectionId);
28353
28384
  if (!connection) {
28354
28385
  return {
@@ -28369,7 +28400,7 @@ var requestWithDelegationTool2 = new ConnectorTool({
28369
28400
  }
28370
28401
  const serviceAccountEmail = serviceAccount.client_email;
28371
28402
  console.log(
28372
- `[connector-request] gmail/${connection.name}: ${method} ${path4} subject=${subject}`
28403
+ `[connector-request] gmail/${connection.name}: ${method} ${path5} subject=${subject}`
28373
28404
  );
28374
28405
  try {
28375
28406
  const { GoogleAuth } = await import("google-auth-library");
@@ -28389,7 +28420,7 @@ var requestWithDelegationTool2 = new ConnectorTool({
28389
28420
  serviceAccountEmail
28390
28421
  };
28391
28422
  }
28392
- const normalizedPath = normalizeRequestPath(path4, BASE_PATH_SEGMENT7);
28423
+ const normalizedPath = normalizeRequestPath(path5, BASE_PATH_SEGMENT7);
28393
28424
  let url = `${BASE_URL41}${normalizedPath}`;
28394
28425
  if (queryParams) {
28395
28426
  const searchParams = new URLSearchParams(queryParams);
@@ -28952,7 +28983,7 @@ Authentication is handled automatically via OAuth proxy.
28952
28983
  All paths are relative to https://gmail.googleapis.com/gmail/v1/users. Use '/me' as the userId prefix (e.g., '/me/messages').`,
28953
28984
  inputSchema: inputSchema67,
28954
28985
  outputSchema: outputSchema67,
28955
- async execute({ connectionId, method, path: path4, queryParams }, connections, config) {
28986
+ async execute({ connectionId, method, path: path5, queryParams }, connections, config) {
28956
28987
  const connection = connections.find((c) => c.id === connectionId);
28957
28988
  if (!connection) {
28958
28989
  return {
@@ -28961,10 +28992,10 @@ All paths are relative to https://gmail.googleapis.com/gmail/v1/users. Use '/me'
28961
28992
  };
28962
28993
  }
28963
28994
  console.log(
28964
- `[connector-request] gmail-oauth/${connection.name}: ${method} ${path4}`
28995
+ `[connector-request] gmail-oauth/${connection.name}: ${method} ${path5}`
28965
28996
  );
28966
28997
  try {
28967
- const normalizedPath = normalizeRequestPath(path4, BASE_PATH_SEGMENT8);
28998
+ const normalizedPath = normalizeRequestPath(path5, BASE_PATH_SEGMENT8);
28968
28999
  let url = `${BASE_URL42}${normalizedPath}`;
28969
29000
  if (queryParams) {
28970
29001
  const searchParams = new URLSearchParams(queryParams);
@@ -29406,7 +29437,7 @@ var requestWithDelegationTool3 = new ConnectorTool({
29406
29437
  description: "Call the Google Workspace Admin SDK Reports API on behalf of the specified Workspace admin via Domain-wide Delegation. Read-only operations only. Pass `subject` as the admin user email and `scopes` as one or both of ['https://www.googleapis.com/auth/admin.reports.audit.readonly', 'https://www.googleapis.com/auth/admin.reports.usage.readonly']. Paths are relative to https://admin.googleapis.com/admin/reports/v1 (e.g., '/activity/users/all/applications/login', '/usage/users/all/dates/2025-04-01'). Requires Domain-wide Delegation to be authorized for the service account in the Workspace admin console.",
29407
29438
  inputSchema: inputSchema68,
29408
29439
  outputSchema: outputSchema68,
29409
- async execute({ connectionId, method, path: path4, subject, scopes, queryParams }, connections) {
29440
+ async execute({ connectionId, method, path: path5, subject, scopes, queryParams }, connections) {
29410
29441
  const connection = connections.find((c) => c.id === connectionId);
29411
29442
  if (!connection) {
29412
29443
  return {
@@ -29427,7 +29458,7 @@ var requestWithDelegationTool3 = new ConnectorTool({
29427
29458
  }
29428
29459
  const serviceAccountEmail = serviceAccount.client_email;
29429
29460
  console.log(
29430
- `[connector-request] google-audit-log/${connection.name}: ${method} ${path4} subject=${subject}`
29461
+ `[connector-request] google-audit-log/${connection.name}: ${method} ${path5} subject=${subject}`
29431
29462
  );
29432
29463
  try {
29433
29464
  const { GoogleAuth } = await import("google-auth-library");
@@ -29447,7 +29478,7 @@ var requestWithDelegationTool3 = new ConnectorTool({
29447
29478
  serviceAccountEmail
29448
29479
  };
29449
29480
  }
29450
- const normalizedPath = normalizeRequestPath(path4, BASE_PATH_SEGMENT9);
29481
+ const normalizedPath = normalizeRequestPath(path5, BASE_PATH_SEGMENT9);
29451
29482
  let url = `${BASE_URL43}${normalizedPath}`;
29452
29483
  if (queryParams) {
29453
29484
  const searchParams = new URLSearchParams(queryParams);
@@ -30373,7 +30404,7 @@ Authentication is handled automatically via OAuth proxy.
30373
30404
  Required headers (LinkedIn-Version, X-Restli-Protocol-Version) are set automatically.`,
30374
30405
  inputSchema: inputSchema70,
30375
30406
  outputSchema: outputSchema70,
30376
- async execute({ connectionId, method, path: path4, queryParams, body }, connections, config) {
30407
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
30377
30408
  const connection = connections.find((c) => c.id === connectionId);
30378
30409
  if (!connection) {
30379
30410
  return {
@@ -30382,11 +30413,11 @@ Required headers (LinkedIn-Version, X-Restli-Protocol-Version) are set automatic
30382
30413
  };
30383
30414
  }
30384
30415
  console.log(
30385
- `[connector-request] linkedin-ads/${connection.name}: ${method} ${path4}`
30416
+ `[connector-request] linkedin-ads/${connection.name}: ${method} ${path5}`
30386
30417
  );
30387
30418
  try {
30388
30419
  const adAccountId = parameters56.adAccountId.tryGetValue(connection) ?? "";
30389
- const resolvedPath = adAccountId ? path4.replace(/\{adAccountId\}/g, adAccountId) : path4;
30420
+ const resolvedPath = adAccountId ? path5.replace(/\{adAccountId\}/g, adAccountId) : path5;
30390
30421
  let url = `${BASE_URL46}${resolvedPath}`;
30391
30422
  if (queryParams && Object.keys(queryParams).length > 0) {
30392
30423
  const params = new URLSearchParams(queryParams);
@@ -30734,7 +30765,7 @@ function normalizeSubdomain(raw) {
30734
30765
  function basicAuthHeader(email, apiToken) {
30735
30766
  return `Basic ${Buffer.from(`${email}/token:${apiToken}`).toString("base64")}`;
30736
30767
  }
30737
- async function apiFetch20(params, path4, init) {
30768
+ async function apiFetch20(params, path5, init) {
30738
30769
  const subdomain = params[parameters57.subdomain.slug];
30739
30770
  const email = params[parameters57.email.slug];
30740
30771
  const apiToken = params[parameters57.apiToken.slug];
@@ -30743,7 +30774,7 @@ async function apiFetch20(params, path4, init) {
30743
30774
  "zendesk: missing required parameter(s) (subdomain, email, api-token)"
30744
30775
  );
30745
30776
  }
30746
- const url = `https://${normalizeSubdomain(subdomain)}.zendesk.com${path4.startsWith("/") ? "" : "/"}${path4}`;
30777
+ const url = `https://${normalizeSubdomain(subdomain)}.zendesk.com${path5.startsWith("/") ? "" : "/"}${path5}`;
30747
30778
  const headers = new Headers(init?.headers);
30748
30779
  headers.set("Authorization", basicAuthHeader(email, apiToken));
30749
30780
  headers.set("Accept", "application/json");
@@ -30790,8 +30821,8 @@ async function listBrands(params) {
30790
30821
  const data = await res.json();
30791
30822
  return data.brands ?? [];
30792
30823
  }
30793
- async function fetchCount(params, path4, countField) {
30794
- const res = await apiFetch20(params, path4);
30824
+ async function fetchCount(params, path5, countField) {
30825
+ const res = await apiFetch20(params, path5);
30795
30826
  if (!res.ok) return null;
30796
30827
  const data = await res.json();
30797
30828
  const raw = data[countField];
@@ -30906,7 +30937,7 @@ Use this tool for all Zendesk API interactions: querying tickets, users, organiz
30906
30937
  Zendesk uses cursor-based pagination with page[size] and page[after] parameters. All endpoints return .json suffix.`,
30907
30938
  inputSchema: inputSchema71,
30908
30939
  outputSchema: outputSchema71,
30909
- async execute({ connectionId, method, path: path4, body }, connections) {
30940
+ async execute({ connectionId, method, path: path5, body }, connections) {
30910
30941
  const connection = connections.find((c) => c.id === connectionId);
30911
30942
  if (!connection) {
30912
30943
  return {
@@ -30915,7 +30946,7 @@ Zendesk uses cursor-based pagination with page[size] and page[after] parameters.
30915
30946
  };
30916
30947
  }
30917
30948
  console.log(
30918
- `[connector-request] zendesk/${connection.name}: ${method} ${path4}`
30949
+ `[connector-request] zendesk/${connection.name}: ${method} ${path5}`
30919
30950
  );
30920
30951
  try {
30921
30952
  const subdomain = parameters57.subdomain.getValue(connection);
@@ -30924,7 +30955,7 @@ Zendesk uses cursor-based pagination with page[size] and page[after] parameters.
30924
30955
  const authToken = Buffer.from(`${email}/token:${apiToken}`).toString(
30925
30956
  "base64"
30926
30957
  );
30927
- const url = `https://${subdomain}.zendesk.com${path4.startsWith("/") ? "" : "/"}${path4}`;
30958
+ const url = `https://${subdomain}.zendesk.com${path5.startsWith("/") ? "" : "/"}${path5}`;
30928
30959
  const controller = new AbortController();
30929
30960
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS54);
30930
30961
  try {
@@ -31248,7 +31279,7 @@ Use this tool for all Zendesk API interactions: querying tickets, users, organiz
31248
31279
  Zendesk uses cursor-based pagination with page[size] and page[after] parameters. All endpoint paths end with .json.`,
31249
31280
  inputSchema: inputSchema72,
31250
31281
  outputSchema: outputSchema72,
31251
- async execute({ connectionId, method, path: path4, queryParams, body }, connections, config) {
31282
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
31252
31283
  const connection = connections.find((c) => c.id === connectionId);
31253
31284
  if (!connection) {
31254
31285
  return {
@@ -31257,10 +31288,10 @@ Zendesk uses cursor-based pagination with page[size] and page[after] parameters.
31257
31288
  };
31258
31289
  }
31259
31290
  console.log(
31260
- `[connector-request] zendesk-oauth/${connection.name}: ${method} ${path4}`
31291
+ `[connector-request] zendesk-oauth/${connection.name}: ${method} ${path5}`
31261
31292
  );
31262
31293
  try {
31263
- let url = path4;
31294
+ let url = path5;
31264
31295
  if (queryParams) {
31265
31296
  const searchParams = new URLSearchParams(queryParams);
31266
31297
  const separator = url.includes("?") ? "&" : "?";
@@ -31338,8 +31369,8 @@ var zendeskOauthOnboarding = new ConnectorOnboarding({
31338
31369
  });
31339
31370
 
31340
31371
  // ../connectors/src/connectors/zendesk-oauth/utils.ts
31341
- function apiFetch21(proxyFetch, path4, init) {
31342
- const url = path4.startsWith("/") ? path4 : `/${path4}`;
31372
+ function apiFetch21(proxyFetch, path5, init) {
31373
+ const url = path5.startsWith("/") ? path5 : `/${path5}`;
31343
31374
  const headers = new Headers(init?.headers);
31344
31375
  headers.set("Accept", "application/json");
31345
31376
  return proxyFetch(url, { ...init, headers });
@@ -31380,8 +31411,8 @@ async function listBrands2(proxyFetch) {
31380
31411
  const data = await res.json();
31381
31412
  return data.brands ?? [];
31382
31413
  }
31383
- async function fetchCount2(proxyFetch, path4) {
31384
- const res = await apiFetch21(proxyFetch, path4);
31414
+ async function fetchCount2(proxyFetch, path5) {
31415
+ const res = await apiFetch21(proxyFetch, path5);
31385
31416
  if (!res.ok) return null;
31386
31417
  const data = await res.json();
31387
31418
  if (typeof data["count"] === "number") return data["count"];
@@ -31696,12 +31727,12 @@ var parameters59 = {
31696
31727
  // ../connectors/src/connectors/intercom/utils.ts
31697
31728
  var BASE_URL47 = "https://api.intercom.io";
31698
31729
  var INTERCOM_VERSION = "2.11";
31699
- async function apiFetch22(params, path4, init) {
31730
+ async function apiFetch22(params, path5, init) {
31700
31731
  const accessToken = params[parameters59.accessToken.slug];
31701
31732
  if (!accessToken) {
31702
31733
  throw new Error("intercom: missing required parameter: access-token");
31703
31734
  }
31704
- const url = `${BASE_URL47}${path4.startsWith("/") ? "" : "/"}${path4}`;
31735
+ const url = `${BASE_URL47}${path5.startsWith("/") ? "" : "/"}${path5}`;
31705
31736
  const headers = new Headers(init?.headers);
31706
31737
  headers.set("Authorization", `Bearer ${accessToken}`);
31707
31738
  headers.set("Accept", "application/json");
@@ -31722,8 +31753,8 @@ var INTERCOM_SCOPES = [
31722
31753
  { value: "articles", label: "Articles", countPath: "/articles?per_page=1" },
31723
31754
  { value: "teams", label: "Teams", countPath: "/teams" }
31724
31755
  ];
31725
- async function fetchCount3(params, path4) {
31726
- const res = await apiFetch22(params, path4);
31756
+ async function fetchCount3(params, path5) {
31757
+ const res = await apiFetch22(params, path5);
31727
31758
  if (!res.ok) {
31728
31759
  return null;
31729
31760
  }
@@ -31826,7 +31857,7 @@ Search endpoints (contacts/search, conversations/search) use POST with a query o
31826
31857
  The Intercom-Version header is set to 2.11 automatically.`,
31827
31858
  inputSchema: inputSchema73,
31828
31859
  outputSchema: outputSchema73,
31829
- async execute({ connectionId, method, path: path4, body }, connections) {
31860
+ async execute({ connectionId, method, path: path5, body }, connections) {
31830
31861
  const connection = connections.find((c) => c.id === connectionId);
31831
31862
  if (!connection) {
31832
31863
  return {
@@ -31835,11 +31866,11 @@ The Intercom-Version header is set to 2.11 automatically.`,
31835
31866
  };
31836
31867
  }
31837
31868
  console.log(
31838
- `[connector-request] intercom/${connection.name}: ${method} ${path4}`
31869
+ `[connector-request] intercom/${connection.name}: ${method} ${path5}`
31839
31870
  );
31840
31871
  try {
31841
31872
  const accessToken = parameters59.accessToken.getValue(connection);
31842
- const url = `${BASE_URL48}${path4.startsWith("/") ? "" : "/"}${path4}`;
31873
+ const url = `${BASE_URL48}${path5.startsWith("/") ? "" : "/"}${path5}`;
31843
31874
  const controller = new AbortController();
31844
31875
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS56);
31845
31876
  try {
@@ -32180,7 +32211,7 @@ Use this tool for all Intercom API interactions: querying contacts, conversation
32180
32211
  Search endpoints (contacts/search, conversations/search) use POST with a query object in the body.`,
32181
32212
  inputSchema: inputSchema74,
32182
32213
  outputSchema: outputSchema74,
32183
- async execute({ connectionId, method, path: path4, queryParams, body }, connections, config) {
32214
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
32184
32215
  const connection = connections.find((c) => c.id === connectionId);
32185
32216
  if (!connection) {
32186
32217
  return {
@@ -32189,10 +32220,10 @@ Search endpoints (contacts/search, conversations/search) use POST with a query o
32189
32220
  };
32190
32221
  }
32191
32222
  console.log(
32192
- `[connector-request] intercom-oauth/${connection.name}: ${method} ${path4}`
32223
+ `[connector-request] intercom-oauth/${connection.name}: ${method} ${path5}`
32193
32224
  );
32194
32225
  try {
32195
- let url = `${BASE_URL49}${path4.startsWith("/") ? "" : "/"}${path4}`;
32226
+ let url = `${BASE_URL49}${path5.startsWith("/") ? "" : "/"}${path5}`;
32196
32227
  if (queryParams) {
32197
32228
  const searchParams = new URLSearchParams(queryParams);
32198
32229
  const separator = url.includes("?") ? "&" : "?";
@@ -32273,8 +32304,8 @@ var intercomOauthOnboarding = new ConnectorOnboarding({
32273
32304
  // ../connectors/src/connectors/intercom-oauth/utils.ts
32274
32305
  var BASE_URL50 = "https://api.intercom.io";
32275
32306
  var INTERCOM_VERSION2 = "2.11";
32276
- function apiFetch23(proxyFetch, path4, init) {
32277
- const url = `${BASE_URL50}${path4.startsWith("/") ? "" : "/"}${path4}`;
32307
+ function apiFetch23(proxyFetch, path5, init) {
32308
+ const url = `${BASE_URL50}${path5.startsWith("/") ? "" : "/"}${path5}`;
32278
32309
  const headers = new Headers(init?.headers);
32279
32310
  headers.set("Accept", "application/json");
32280
32311
  headers.set("Intercom-Version", INTERCOM_VERSION2);
@@ -32294,8 +32325,8 @@ var INTERCOM_SCOPES2 = [
32294
32325
  { value: "articles", label: "Articles", countPath: "/articles?per_page=1" },
32295
32326
  { value: "teams", label: "Teams", countPath: "/teams" }
32296
32327
  ];
32297
- async function fetchCount4(proxyFetch, path4) {
32298
- const res = await apiFetch23(proxyFetch, path4);
32328
+ async function fetchCount4(proxyFetch, path5) {
32329
+ const res = await apiFetch23(proxyFetch, path5);
32299
32330
  if (!res.ok) {
32300
32331
  return null;
32301
32332
  }
@@ -32654,7 +32685,7 @@ function getQueryBaseUrl(params) {
32654
32685
  if (region === "in") return "https://in.mixpanel.com/api";
32655
32686
  return "https://mixpanel.com/api";
32656
32687
  }
32657
- async function apiFetch24(params, path4, init) {
32688
+ async function apiFetch24(params, path5, init) {
32658
32689
  const username = params[parameters61.serviceAccountUsername.slug];
32659
32690
  const secret = params[parameters61.serviceAccountSecret.slug];
32660
32691
  const projectId2 = params[parameters61.projectId.slug];
@@ -32664,7 +32695,7 @@ async function apiFetch24(params, path4, init) {
32664
32695
  );
32665
32696
  }
32666
32697
  const base = getQueryBaseUrl(params);
32667
- const url = new URL(`${base}${path4.startsWith("/") ? "" : "/"}${path4}`);
32698
+ const url = new URL(`${base}${path5.startsWith("/") ? "" : "/"}${path5}`);
32668
32699
  if (!url.searchParams.has("project_id")) {
32669
32700
  url.searchParams.set("project_id", projectId2);
32670
32701
  }
@@ -33113,14 +33144,14 @@ var parameters62 = {
33113
33144
  };
33114
33145
 
33115
33146
  // ../connectors/src/connectors/grafana/utils.ts
33116
- async function apiFetch25(params, path4, init) {
33147
+ async function apiFetch25(params, path5, init) {
33117
33148
  const apiKey = params[parameters62.apiKey.slug];
33118
33149
  const rawUrl = params[parameters62.url.slug];
33119
33150
  if (!apiKey || !rawUrl) {
33120
33151
  throw new Error("grafana: missing required parameters: url and api-key");
33121
33152
  }
33122
33153
  const baseUrl = rawUrl.replace(/\/+$/, "");
33123
- const url = `${baseUrl}${path4.startsWith("/") ? path4 : `/${path4}`}`;
33154
+ const url = `${baseUrl}${path5.startsWith("/") ? path5 : `/${path5}`}`;
33124
33155
  const headers = new Headers(init?.headers);
33125
33156
  headers.set("Authorization", `Bearer ${apiKey}`);
33126
33157
  if (!headers.has("Accept")) headers.set("Accept", "application/json");
@@ -33305,7 +33336,7 @@ Use this tool to interact with Grafana resources: datasources, dashboards, alert
33305
33336
  The path must start with '/' and is appended to the configured Grafana instance URL.`,
33306
33337
  inputSchema: inputSchema76,
33307
33338
  outputSchema: outputSchema76,
33308
- async execute({ connectionId, method, path: path4, body }, connections) {
33339
+ async execute({ connectionId, method, path: path5, body }, connections) {
33309
33340
  const connection = connections.find((c) => c.id === connectionId);
33310
33341
  if (!connection) {
33311
33342
  return {
@@ -33314,12 +33345,12 @@ The path must start with '/' and is appended to the configured Grafana instance
33314
33345
  };
33315
33346
  }
33316
33347
  console.log(
33317
- `[connector-request] grafana/${connection.name}: ${method} ${path4}`
33348
+ `[connector-request] grafana/${connection.name}: ${method} ${path5}`
33318
33349
  );
33319
33350
  try {
33320
33351
  const baseUrl = parameters62.url.getValue(connection).replace(/\/+$/, "");
33321
33352
  const apiKey = parameters62.apiKey.getValue(connection);
33322
- const url = `${baseUrl}${path4}`;
33353
+ const url = `${baseUrl}${path5}`;
33323
33354
  const controller = new AbortController();
33324
33355
  const timeout = setTimeout(
33325
33356
  () => controller.abort(),
@@ -33557,7 +33588,7 @@ var parameters63 = {
33557
33588
  };
33558
33589
 
33559
33590
  // ../connectors/src/connectors/backlog/utils.ts
33560
- async function apiFetch26(params, path4, init) {
33591
+ async function apiFetch26(params, path5, init) {
33561
33592
  const spaceUrl = params[parameters63.spaceUrl.slug];
33562
33593
  const apiKey = params[parameters63.apiKey.slug];
33563
33594
  if (!spaceUrl) {
@@ -33566,7 +33597,7 @@ async function apiFetch26(params, path4, init) {
33566
33597
  if (!apiKey) {
33567
33598
  throw new Error("backlog: missing required parameter: api-key");
33568
33599
  }
33569
- const trimmedPath = path4.replace(/^\/+/, "");
33600
+ const trimmedPath = path5.replace(/^\/+/, "");
33570
33601
  const separator = trimmedPath.includes("?") ? "&" : "?";
33571
33602
  const url = `${spaceUrl.replace(/\/+$/, "")}/api/v2/${trimmedPath}${separator}apiKey=${encodeURIComponent(apiKey)}`;
33572
33603
  const headers = new Headers(init?.headers);
@@ -33719,17 +33750,17 @@ The base URL and API key are configured per connection \u2014 only specify the A
33719
33750
  Do NOT include the apiKey parameter yourself; it is injected automatically.`,
33720
33751
  inputSchema: inputSchema77,
33721
33752
  outputSchema: outputSchema77,
33722
- async execute({ connectionId, method, path: path4, body }, connections) {
33753
+ async execute({ connectionId, method, path: path5, body }, connections) {
33723
33754
  const connection = connections.find((c) => c.id === connectionId);
33724
33755
  if (!connection) {
33725
33756
  return { success: false, error: `Connection ${connectionId} not found` };
33726
33757
  }
33727
- console.log(`[connector-request] backlog-api-key/${connection.name}: ${method} ${path4}`);
33758
+ console.log(`[connector-request] backlog-api-key/${connection.name}: ${method} ${path5}`);
33728
33759
  try {
33729
33760
  const spaceUrl = parameters63.spaceUrl.getValue(connection);
33730
33761
  const apiKey = parameters63.apiKey.getValue(connection);
33731
- const separator = path4.includes("?") ? "&" : "?";
33732
- const url = `${spaceUrl.replace(/\/+$/, "")}/api/v2/${path4}${separator}apiKey=${apiKey}`;
33762
+ const separator = path5.includes("?") ? "&" : "?";
33763
+ const url = `${spaceUrl.replace(/\/+$/, "")}/api/v2/${path5}${separator}apiKey=${apiKey}`;
33733
33764
  const controller = new AbortController();
33734
33765
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS60);
33735
33766
  try {
@@ -33991,7 +34022,7 @@ var parameters64 = {
33991
34022
 
33992
34023
  // ../connectors/src/connectors/gamma/utils.ts
33993
34024
  var BASE_URL51 = "https://public-api.gamma.app/v1.0";
33994
- function apiFetch27(params, path4, init) {
34025
+ function apiFetch27(params, path5, init) {
33995
34026
  const apiKey = params[parameters64.apiKey.slug];
33996
34027
  if (!apiKey) {
33997
34028
  throw new Error(`gamma: missing required parameter: ${parameters64.apiKey.slug}`);
@@ -33999,7 +34030,7 @@ function apiFetch27(params, path4, init) {
33999
34030
  const headers = new Headers(init?.headers);
34000
34031
  headers.set("X-API-KEY", apiKey);
34001
34032
  if (!headers.has("Content-Type")) headers.set("Content-Type", "application/json");
34002
- const trimmedPath = path4.startsWith("/") ? path4 : `/${path4}`;
34033
+ const trimmedPath = path5.startsWith("/") ? path5 : `/${path5}`;
34003
34034
  return fetch(`${BASE_URL51}${trimmedPath}`, { ...init, headers });
34004
34035
  }
34005
34036
 
@@ -34136,7 +34167,7 @@ Use this tool for listing themes, listing folders, checking generation status, a
34136
34167
  For creating presentations/documents, prefer the connector_gamma_generate tool instead.`,
34137
34168
  inputSchema: inputSchema78,
34138
34169
  outputSchema: outputSchema78,
34139
- async execute({ connectionId, method, path: path4, body }, connections) {
34170
+ async execute({ connectionId, method, path: path5, body }, connections) {
34140
34171
  const connection = connections.find((c) => c.id === connectionId);
34141
34172
  if (!connection) {
34142
34173
  return {
@@ -34145,11 +34176,11 @@ For creating presentations/documents, prefer the connector_gamma_generate tool i
34145
34176
  };
34146
34177
  }
34147
34178
  console.log(
34148
- `[connector-request] gamma/${connection.name}: ${method} ${path4}`
34179
+ `[connector-request] gamma/${connection.name}: ${method} ${path5}`
34149
34180
  );
34150
34181
  try {
34151
34182
  const apiKey = parameters64.apiKey.getValue(connection);
34152
- const url = `${BASE_URL52}${path4}`;
34183
+ const url = `${BASE_URL52}${path5}`;
34153
34184
  const controller = new AbortController();
34154
34185
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS61);
34155
34186
  try {
@@ -34593,12 +34624,12 @@ var parameters65 = {
34593
34624
 
34594
34625
  // ../connectors/src/connectors/sentry/utils.ts
34595
34626
  var BASE_URL54 = "https://sentry.io/api/0";
34596
- async function apiFetch28(params, path4, init) {
34627
+ async function apiFetch28(params, path5, init) {
34597
34628
  const authToken = params[parameters65.authToken.slug];
34598
34629
  if (!authToken) {
34599
34630
  throw new Error("sentry: missing required parameter: auth-token");
34600
34631
  }
34601
- const url = `${BASE_URL54}${path4.startsWith("/") ? "" : "/"}${path4}`;
34632
+ const url = `${BASE_URL54}${path5.startsWith("/") ? "" : "/"}${path5}`;
34602
34633
  const headers = new Headers(init?.headers);
34603
34634
  headers.set("Authorization", `Bearer ${authToken}`);
34604
34635
  if (!headers.has("Accept")) headers.set("Accept", "application/json");
@@ -34763,7 +34794,7 @@ Authentication is handled automatically via Bearer token.
34763
34794
  {organizationSlug} in the path is automatically replaced with the configured organization slug.`,
34764
34795
  inputSchema: inputSchema80,
34765
34796
  outputSchema: outputSchema80,
34766
- async execute({ connectionId, method, path: path4, body }, connections) {
34797
+ async execute({ connectionId, method, path: path5, body }, connections) {
34767
34798
  const connection = connections.find((c) => c.id === connectionId);
34768
34799
  if (!connection) {
34769
34800
  return {
@@ -34772,12 +34803,12 @@ Authentication is handled automatically via Bearer token.
34772
34803
  };
34773
34804
  }
34774
34805
  console.log(
34775
- `[connector-request] sentry/${connection.name}: ${method} ${path4}`
34806
+ `[connector-request] sentry/${connection.name}: ${method} ${path5}`
34776
34807
  );
34777
34808
  try {
34778
34809
  const authToken = parameters65.authToken.getValue(connection);
34779
34810
  const organizationSlug = parameters65.organizationSlug.getValue(connection);
34780
- const resolvedPath = path4.replace(
34811
+ const resolvedPath = path5.replace(
34781
34812
  /\{organizationSlug\}/g,
34782
34813
  organizationSlug
34783
34814
  );
@@ -35114,9 +35145,9 @@ async function getAccessToken4(params) {
35114
35145
  instanceUrl: tokenJson.instance_url ?? instanceUrl
35115
35146
  };
35116
35147
  }
35117
- async function apiFetch29(params, path4, init) {
35148
+ async function apiFetch29(params, path5, init) {
35118
35149
  const token = await getAccessToken4(params);
35119
- const url = `${token.instanceUrl}${path4.startsWith("/") ? "" : "/"}${path4}`;
35150
+ const url = `${token.instanceUrl}${path5.startsWith("/") ? "" : "/"}${path5}`;
35120
35151
  const headers = new Headers(init?.headers);
35121
35152
  headers.set("Authorization", `Bearer ${token.accessToken}`);
35122
35153
  headers.set("Accept", "application/json");
@@ -35340,7 +35371,7 @@ Use this tool for all Salesforce interactions: describing sObjects, running SOQL
35340
35371
  Prefer SOQL via the /query endpoint for filtered, joined, or aggregated reads rather than paginating /sobjects/{Type} endpoints.`,
35341
35372
  inputSchema: inputSchema81,
35342
35373
  outputSchema: outputSchema81,
35343
- async execute({ connectionId, method, path: path4, body }, connections) {
35374
+ async execute({ connectionId, method, path: path5, body }, connections) {
35344
35375
  const connection = connections.find((c) => c.id === connectionId);
35345
35376
  if (!connection) {
35346
35377
  return {
@@ -35349,7 +35380,7 @@ Prefer SOQL via the /query endpoint for filtered, joined, or aggregated reads ra
35349
35380
  };
35350
35381
  }
35351
35382
  console.log(
35352
- `[connector-request] salesforce/${connection.name}: ${method} ${path4}`
35383
+ `[connector-request] salesforce/${connection.name}: ${method} ${path5}`
35353
35384
  );
35354
35385
  try {
35355
35386
  const instanceUrlParam = parameters66.instanceUrl.getValue(connection);
@@ -35383,7 +35414,7 @@ Prefer SOQL via the /query endpoint for filtered, joined, or aggregated reads ra
35383
35414
  };
35384
35415
  }
35385
35416
  const resolvedInstanceUrl = tokenJson.instance_url ?? instanceUrl;
35386
- const url = `${resolvedInstanceUrl}${path4.startsWith("/") ? "" : "/"}${path4}`;
35417
+ const url = `${resolvedInstanceUrl}${path5.startsWith("/") ? "" : "/"}${path5}`;
35387
35418
  const controller = new AbortController();
35388
35419
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS63);
35389
35420
  try {
@@ -36029,7 +36060,7 @@ Use this tool for all InfluxDB interactions: running SQL / InfluxQL / Flux queri
36029
36060
  For read-only data exploration prefer SQL (InfluxDB 3) or InfluxQL queries \u2014 they return JSON that is straightforward to parse. Flux queries return annotated CSV.`,
36030
36061
  inputSchema: inputSchema82,
36031
36062
  outputSchema: outputSchema82,
36032
- async execute({ connectionId, method, path: path4, body, contentType }, connections) {
36063
+ async execute({ connectionId, method, path: path5, body, contentType }, connections) {
36033
36064
  const connection = connections.find((c) => c.id === connectionId);
36034
36065
  if (!connection) {
36035
36066
  return {
@@ -36038,12 +36069,12 @@ For read-only data exploration prefer SQL (InfluxDB 3) or InfluxQL queries \u201
36038
36069
  };
36039
36070
  }
36040
36071
  console.log(
36041
- `[connector-request] influxdb/${connection.name}: ${method} ${path4}`
36072
+ `[connector-request] influxdb/${connection.name}: ${method} ${path5}`
36042
36073
  );
36043
36074
  try {
36044
36075
  const url = parameters67.url.getValue(connection).replace(/\/$/, "");
36045
36076
  const token = parameters67.token.getValue(connection);
36046
- const fullUrl = `${url}${path4.startsWith("/") ? "" : "/"}${path4}`;
36077
+ const fullUrl = `${url}${path5.startsWith("/") ? "" : "/"}${path5}`;
36047
36078
  const controller = new AbortController();
36048
36079
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS64);
36049
36080
  const resolvedContentType = contentType ?? (typeof body === "string" ? "text/plain; charset=utf-8" : "application/json");
@@ -36080,7 +36111,7 @@ For read-only data exploration prefer SQL (InfluxDB 3) or InfluxQL queries \u201
36080
36111
  } else if (bodyText) {
36081
36112
  errorMessage = isHtml ? bodyText.replace(/\s+/g, " ").slice(0, 200) : bodyText;
36082
36113
  }
36083
- const hitsV3Path = path4.includes("/api/v3/");
36114
+ const hitsV3Path = path5.includes("/api/v3/");
36084
36115
  const looksLikeMissingV3 = hitsV3Path && (response.status === 405 || response.status === 404 || isHtml);
36085
36116
  if (looksLikeMissingV3) {
36086
36117
  errorMessage += " \u2014 This InfluxDB instance does not support the v3 API at this path. It is likely InfluxDB 2 (e.g. InfluxDB Cloud on '*.cloud2.influxdata.com'). Retry via Flux on '/api/v2/query?org={org}' with contentType 'application/vnd.flux'.";
@@ -37856,7 +37887,7 @@ Errors from the Standard API are returned as a plain text body starting with "ER
37856
37887
  async execute({
37857
37888
  connectionId,
37858
37889
  method,
37859
- path: path4,
37890
+ path: path5,
37860
37891
  queryParams,
37861
37892
  body,
37862
37893
  contentType,
@@ -37870,13 +37901,13 @@ Errors from the Standard API are returned as a plain text body starting with "ER
37870
37901
  };
37871
37902
  }
37872
37903
  console.log(
37873
- `[connector-request] semrush/${connection.name}: ${method} ${path4}`
37904
+ `[connector-request] semrush/${connection.name}: ${method} ${path5}`
37874
37905
  );
37875
37906
  try {
37876
37907
  const apiKey = parameters70.apiKey.getValue(connection);
37877
- const isAbsolute = /^https?:\/\//i.test(path4);
37908
+ const isAbsolute = /^https?:\/\//i.test(path5);
37878
37909
  if (isAbsolute) {
37879
- const host = new URL(path4).hostname.toLowerCase();
37910
+ const host = new URL(path5).hostname.toLowerCase();
37880
37911
  if (host !== "api.semrush.com" && host !== "www.semrush.com") {
37881
37912
  return {
37882
37913
  success: false,
@@ -37885,7 +37916,7 @@ Errors from the Standard API are returned as a plain text body starting with "ER
37885
37916
  }
37886
37917
  }
37887
37918
  const url = new URL(
37888
- isAbsolute ? path4 : `${BASE_URL58}${path4.startsWith("/") ? "" : "/"}${path4}`
37919
+ isAbsolute ? path5 : `${BASE_URL58}${path5.startsWith("/") ? "" : "/"}${path5}`
37889
37920
  );
37890
37921
  if (queryParams) {
37891
37922
  for (const [k, v] of Object.entries(queryParams)) {
@@ -37991,14 +38022,14 @@ var semrushOnboarding = new ConnectorOnboarding({
37991
38022
  // ../connectors/src/connectors/semrush/utils.ts
37992
38023
  var BASE_URL59 = "https://api.semrush.com";
37993
38024
  var PROJECTS_BASE_URL = `${BASE_URL59}/management/v1`;
37994
- function projectsApiFetch(params, path4, init) {
38025
+ function projectsApiFetch(params, path5, init) {
37995
38026
  const apiKey = params[parameters70.apiKey.slug];
37996
38027
  if (!apiKey) {
37997
38028
  throw new Error(
37998
38029
  `semrush: missing required parameter: ${parameters70.apiKey.slug}`
37999
38030
  );
38000
38031
  }
38001
- const trimmedPath = path4.startsWith("/") ? path4 : `/${path4}`;
38032
+ const trimmedPath = path5.startsWith("/") ? path5 : `/${path5}`;
38002
38033
  const url = new URL(`${PROJECTS_BASE_URL}${trimmedPath}`);
38003
38034
  if (!url.searchParams.has("key")) {
38004
38035
  url.searchParams.set("key", apiKey);
@@ -39106,7 +39137,7 @@ Authentication is handled automatically via OAuth proxy.
39106
39137
  For URL Inspection API requests, use the absolute path '/v1/urlInspection/index:inspect' \u2014 the leading /webmasters/v3 prefix will be stripped if you accidentally include it.`,
39107
39138
  inputSchema: inputSchema87,
39108
39139
  outputSchema: outputSchema87,
39109
- async execute({ connectionId, method, path: path4, queryParams, body }, connections, config) {
39140
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
39110
39141
  const connection = connections.find((c) => c.id === connectionId);
39111
39142
  if (!connection) {
39112
39143
  return {
@@ -39115,11 +39146,11 @@ For URL Inspection API requests, use the absolute path '/v1/urlInspection/index:
39115
39146
  };
39116
39147
  }
39117
39148
  console.log(
39118
- `[connector-request] google-search-console-oauth/${connection.name}: ${method} ${path4}`
39149
+ `[connector-request] google-search-console-oauth/${connection.name}: ${method} ${path5}`
39119
39150
  );
39120
39151
  try {
39121
39152
  const siteUrl = parameters71.siteUrl.tryGetValue(connection);
39122
- const resolvedPath = siteUrl ? path4.replace(/\{siteUrl\}/g, encodeURIComponent(siteUrl)) : path4;
39153
+ const resolvedPath = siteUrl ? path5.replace(/\{siteUrl\}/g, encodeURIComponent(siteUrl)) : path5;
39123
39154
  const normalizedPath = normalizeRequestPath(
39124
39155
  resolvedPath,
39125
39156
  BASE_PATH_SEGMENT10
@@ -39775,12 +39806,12 @@ var parameters73 = {
39775
39806
 
39776
39807
  // ../connectors/src/connectors/clickup/utils.ts
39777
39808
  var BASE_URL62 = "https://api.clickup.com/api/v2";
39778
- async function apiFetch30(params, path4, init) {
39809
+ async function apiFetch30(params, path5, init) {
39779
39810
  const token = params[parameters73.apiToken.slug];
39780
39811
  if (!token) {
39781
39812
  throw new Error("clickup: missing required parameter: api-token");
39782
39813
  }
39783
- const url = `${BASE_URL62}${path4.startsWith("/") ? "" : "/"}${path4}`;
39814
+ const url = `${BASE_URL62}${path5.startsWith("/") ? "" : "/"}${path5}`;
39784
39815
  const headers = new Headers(init?.headers);
39785
39816
  headers.set("Authorization", token);
39786
39817
  if (!headers.has("Accept")) headers.set("Accept", "application/json");
@@ -40007,7 +40038,7 @@ Common endpoints:
40007
40038
  Pagination: ClickUp uses zero-indexed \`page\` query parameter on list endpoints (page=0, page=1, ...). Each page returns up to 100 tasks; you must increment \`page\` until the response array is empty.`,
40008
40039
  inputSchema: inputSchema89,
40009
40040
  outputSchema: outputSchema89,
40010
- async execute({ connectionId, method, path: path4, body }, connections) {
40041
+ async execute({ connectionId, method, path: path5, body }, connections) {
40011
40042
  const connection = connections.find((c) => c.id === connectionId);
40012
40043
  if (!connection) {
40013
40044
  return {
@@ -40016,11 +40047,11 @@ Pagination: ClickUp uses zero-indexed \`page\` query parameter on list endpoints
40016
40047
  };
40017
40048
  }
40018
40049
  console.log(
40019
- `[connector-request] clickup/${connection.name}: ${method} ${path4}`
40050
+ `[connector-request] clickup/${connection.name}: ${method} ${path5}`
40020
40051
  );
40021
40052
  try {
40022
40053
  const token = parameters73.apiToken.getValue(connection);
40023
- const normalizedPath = normalizeRequestPath(path4, BASE_PATH_SEGMENT11);
40054
+ const normalizedPath = normalizeRequestPath(path5, BASE_PATH_SEGMENT11);
40024
40055
  const url = `${BASE_URL63}${normalizedPath}`;
40025
40056
  const controller = new AbortController();
40026
40057
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS69);
@@ -41901,7 +41932,7 @@ function buildBaseUrl(domain) {
41901
41932
  function basicAuthHeader2(apiKey) {
41902
41933
  return `Basic ${Buffer.from(`${apiKey}:X`).toString("base64")}`;
41903
41934
  }
41904
- async function apiFetch31(params, path4, init) {
41935
+ async function apiFetch31(params, path5, init) {
41905
41936
  const apiKey = params[parameters78.apiKey.slug];
41906
41937
  const domain = params[parameters78.domain.slug];
41907
41938
  if (!apiKey || !domain) {
@@ -41910,7 +41941,7 @@ async function apiFetch31(params, path4, init) {
41910
41941
  );
41911
41942
  }
41912
41943
  const baseUrl = buildBaseUrl(domain);
41913
- const url = `${baseUrl}${path4.startsWith("/") ? "" : "/"}${path4}`;
41944
+ const url = `${baseUrl}${path5.startsWith("/") ? "" : "/"}${path5}`;
41914
41945
  const headers = new Headers(init?.headers);
41915
41946
  headers.set("Authorization", basicAuthHeader2(apiKey));
41916
41947
  headers.set("Accept", "application/json");
@@ -41971,8 +42002,8 @@ var FRESHSERVICE_ENTITIES = [
41971
42002
  countPath: "/service_catalog/items?per_page=1"
41972
42003
  }
41973
42004
  ];
41974
- async function fetchEntityCount2(params, path4) {
41975
- const res = await apiFetch31(params, path4);
42005
+ async function fetchEntityCount2(params, path5) {
42006
+ const res = await apiFetch31(params, path5);
41976
42007
  if (!res.ok) return null;
41977
42008
  const data = await res.json();
41978
42009
  if (typeof data["total"] === "number") return data["total"];
@@ -42105,7 +42136,7 @@ Field codes:
42105
42136
  - ticket source: 1 Email, 2 Portal, 3 Phone, 4 Chat, 5 Feedback widget, 7 Yammer, 8 AwsCloudwatch, 9 Pagerduty, 10 Walkup, 11 Slack`,
42106
42137
  inputSchema: inputSchema95,
42107
42138
  outputSchema: outputSchema95,
42108
- async execute({ connectionId, method, path: path4, body }, connections) {
42139
+ async execute({ connectionId, method, path: path5, body }, connections) {
42109
42140
  const connection = connections.find((c) => c.id === connectionId);
42110
42141
  if (!connection) {
42111
42142
  return {
@@ -42114,13 +42145,13 @@ Field codes:
42114
42145
  };
42115
42146
  }
42116
42147
  console.log(
42117
- `[connector-request] freshservice/${connection.name}: ${method} ${path4}`
42148
+ `[connector-request] freshservice/${connection.name}: ${method} ${path5}`
42118
42149
  );
42119
42150
  try {
42120
42151
  const apiKey = parameters78.apiKey.getValue(connection);
42121
42152
  const domain = parameters78.domain.getValue(connection);
42122
42153
  const baseUrl = buildBaseUrl2(domain);
42123
- const normalizedPath = normalizeRequestPath(path4, BASE_PATH_SEGMENT13);
42154
+ const normalizedPath = normalizeRequestPath(path5, BASE_PATH_SEGMENT13);
42124
42155
  const url = `${baseUrl}${normalizedPath}`;
42125
42156
  const controller = new AbortController();
42126
42157
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS70);
@@ -42413,7 +42444,7 @@ function buildBaseUrl3(domain) {
42413
42444
  function basicAuthHeader4(apiKey) {
42414
42445
  return `Basic ${Buffer.from(`${apiKey}:X`).toString("base64")}`;
42415
42446
  }
42416
- async function apiFetch32(params, path4, init) {
42447
+ async function apiFetch32(params, path5, init) {
42417
42448
  const apiKey = params[parameters79.apiKey.slug];
42418
42449
  const domain = params[parameters79.domain.slug];
42419
42450
  if (!apiKey || !domain) {
@@ -42422,7 +42453,7 @@ async function apiFetch32(params, path4, init) {
42422
42453
  );
42423
42454
  }
42424
42455
  const baseUrl = buildBaseUrl3(domain);
42425
- const url = `${baseUrl}${path4.startsWith("/") ? "" : "/"}${path4}`;
42456
+ const url = `${baseUrl}${path5.startsWith("/") ? "" : "/"}${path5}`;
42426
42457
  const headers = new Headers(init?.headers);
42427
42458
  headers.set("Authorization", basicAuthHeader4(apiKey));
42428
42459
  headers.set("Accept", "application/json");
@@ -42459,8 +42490,8 @@ var FRESHDESK_ENTITIES = [
42459
42490
  countPath: "/groups?per_page=1"
42460
42491
  }
42461
42492
  ];
42462
- async function fetchEntityCount3(params, path4, countField) {
42463
- const res = await apiFetch32(params, path4);
42493
+ async function fetchEntityCount3(params, path5, countField) {
42494
+ const res = await apiFetch32(params, path5);
42464
42495
  if (!res.ok) return null;
42465
42496
  const data = await res.json();
42466
42497
  if (Array.isArray(data)) return null;
@@ -42672,7 +42703,7 @@ Field codes (tickets):
42672
42703
  - source: 1 Email, 2 Portal, 3 Phone, 7 Chat, 9 Feedback widget, 10 Outbound email`,
42673
42704
  inputSchema: inputSchema96,
42674
42705
  outputSchema: outputSchema96,
42675
- async execute({ connectionId, method, path: path4, body }, connections) {
42706
+ async execute({ connectionId, method, path: path5, body }, connections) {
42676
42707
  const connection = connections.find((c) => c.id === connectionId);
42677
42708
  if (!connection) {
42678
42709
  return {
@@ -42681,13 +42712,13 @@ Field codes (tickets):
42681
42712
  };
42682
42713
  }
42683
42714
  console.log(
42684
- `[connector-request] freshdesk/${connection.name}: ${method} ${path4}`
42715
+ `[connector-request] freshdesk/${connection.name}: ${method} ${path5}`
42685
42716
  );
42686
42717
  try {
42687
42718
  const apiKey = parameters79.apiKey.getValue(connection);
42688
42719
  const domain = parameters79.domain.getValue(connection);
42689
42720
  const baseUrl = buildBaseUrl4(domain);
42690
- const normalizedPath = normalizeRequestPath(path4, BASE_PATH_SEGMENT15);
42721
+ const normalizedPath = normalizeRequestPath(path5, BASE_PATH_SEGMENT15);
42691
42722
  const url = `${baseUrl}${normalizedPath}`;
42692
42723
  const controller = new AbortController();
42693
42724
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS71);
@@ -42979,7 +43010,7 @@ function buildBaseUrl5(bundleAlias) {
42979
43010
  const subdomain = trimmed.split(".")[0];
42980
43011
  return `https://${subdomain}.myfreshworks.com${BASE_PATH_SEGMENT16}`;
42981
43012
  }
42982
- async function apiFetch33(params, path4, init) {
43013
+ async function apiFetch33(params, path5, init) {
42983
43014
  const apiKey = params[parameters80.apiKey.slug];
42984
43015
  const bundle = params[parameters80.bundleAlias.slug];
42985
43016
  if (!apiKey || !bundle) {
@@ -42988,7 +43019,7 @@ async function apiFetch33(params, path4, init) {
42988
43019
  );
42989
43020
  }
42990
43021
  const baseUrl = buildBaseUrl5(bundle);
42991
- const url = `${baseUrl}${path4.startsWith("/") ? "" : "/"}${path4}`;
43022
+ const url = `${baseUrl}${path5.startsWith("/") ? "" : "/"}${path5}`;
42992
43023
  const headers = new Headers(init?.headers);
42993
43024
  headers.set("Authorization", `Token token=${apiKey}`);
42994
43025
  headers.set("Accept", "application/json");
@@ -43161,7 +43192,7 @@ Pagination: 1-indexed \`page\` + \`per_page\` (default 25, max 100). View endpoi
43161
43192
  Includes: most GET endpoints accept \`?include=\` with a comma-separated list (\`owner\`, \`creator\`, \`deals\`, \`contacts\`, etc.) to inline related records.`,
43162
43193
  inputSchema: inputSchema97,
43163
43194
  outputSchema: outputSchema97,
43164
- async execute({ connectionId, method, path: path4, body }, connections) {
43195
+ async execute({ connectionId, method, path: path5, body }, connections) {
43165
43196
  const connection = connections.find((c) => c.id === connectionId);
43166
43197
  if (!connection) {
43167
43198
  return {
@@ -43170,13 +43201,13 @@ Includes: most GET endpoints accept \`?include=\` with a comma-separated list (\
43170
43201
  };
43171
43202
  }
43172
43203
  console.log(
43173
- `[connector-request] freshsales/${connection.name}: ${method} ${path4}`
43204
+ `[connector-request] freshsales/${connection.name}: ${method} ${path5}`
43174
43205
  );
43175
43206
  try {
43176
43207
  const apiKey = parameters80.apiKey.getValue(connection);
43177
43208
  const bundle = parameters80.bundleAlias.getValue(connection);
43178
43209
  const baseUrl = buildBaseUrl6(bundle);
43179
- const normalizedPath = normalizeRequestPath(path4, BASE_PATH_SEGMENT17);
43210
+ const normalizedPath = normalizeRequestPath(path5, BASE_PATH_SEGMENT17);
43180
43211
  const url = `${baseUrl}${normalizedPath}`;
43181
43212
  const controller = new AbortController();
43182
43213
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS72);
@@ -43481,7 +43512,7 @@ function resolveBaseUrl(connectionBaseUrl) {
43481
43512
  const trimmed = connectionBaseUrl?.trim();
43482
43513
  return trimmed && trimmed.replace(/\/+$/, "") || DEFAULT_BASE_URL;
43483
43514
  }
43484
- async function apiFetch34(params, path4, init) {
43515
+ async function apiFetch34(params, path5, init) {
43485
43516
  const token = params[parameters81.personalAccessToken.slug];
43486
43517
  if (!token) {
43487
43518
  throw new Error(
@@ -43489,7 +43520,7 @@ async function apiFetch34(params, path4, init) {
43489
43520
  );
43490
43521
  }
43491
43522
  const baseUrl = resolveBaseUrl(params[parameters81.baseUrl.slug]);
43492
- const trimmedPath = path4.replace(/^\/+/, "/");
43523
+ const trimmedPath = path5.replace(/^\/+/, "/");
43493
43524
  const url = `${baseUrl}${trimmedPath.startsWith("/") ? "" : "/"}${trimmedPath}`;
43494
43525
  const headers = new Headers(init?.headers);
43495
43526
  headers.set("Authorization", `Bearer ${token}`);
@@ -43727,7 +43758,7 @@ Pagination: 1-indexed \`page\` + \`per_page\` (max 100). The \`Link\` response h
43727
43758
  Rate limits: 5,000 req/hr on REST endpoints, 30 req/min on /search/*. Inspect \`X-RateLimit-Remaining\` to throttle.`,
43728
43759
  inputSchema: inputSchema98,
43729
43760
  outputSchema: outputSchema98,
43730
- async execute({ connectionId, method, path: path4, body }, connections) {
43761
+ async execute({ connectionId, method, path: path5, body }, connections) {
43731
43762
  const connection = connections.find((c) => c.id === connectionId);
43732
43763
  if (!connection) {
43733
43764
  return {
@@ -43736,12 +43767,12 @@ Rate limits: 5,000 req/hr on REST endpoints, 30 req/min on /search/*. Inspect \`
43736
43767
  };
43737
43768
  }
43738
43769
  console.log(
43739
- `[connector-request] github/${connection.name}: ${method} ${path4}`
43770
+ `[connector-request] github/${connection.name}: ${method} ${path5}`
43740
43771
  );
43741
43772
  try {
43742
43773
  const token = parameters81.personalAccessToken.getValue(connection);
43743
43774
  const baseUrl = resolveBaseUrl2(parameters81.baseUrl.tryGetValue(connection));
43744
- const trimmedPath = path4.trim().replace(/^\/+/, "/");
43775
+ const trimmedPath = path5.trim().replace(/^\/+/, "/");
43745
43776
  const url = `${baseUrl}${trimmedPath.startsWith("/") ? "" : "/"}${trimmedPath}`;
43746
43777
  const controller = new AbortController();
43747
43778
  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS73);
@@ -44119,7 +44150,7 @@ All paths are relative to https://api.powerbi.com/v1.0/myorg. Use the executeQue
44119
44150
  The signed-in user must have access to the workspace; unlike Service Principals, OAuth users can also access "My workspace" via the \`/datasets\` (without \`/groups/\`) endpoints.`,
44120
44151
  inputSchema: inputSchema99,
44121
44152
  outputSchema: outputSchema99,
44122
- async execute({ connectionId, method, path: path4, queryParams, body }, connections, config) {
44153
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
44123
44154
  const connection = connections.find((c) => c.id === connectionId);
44124
44155
  if (!connection) {
44125
44156
  return {
@@ -44128,10 +44159,10 @@ The signed-in user must have access to the workspace; unlike Service Principals,
44128
44159
  };
44129
44160
  }
44130
44161
  console.log(
44131
- `[connector-request] powerbi-oauth/${connection.name}: ${method} ${path4}`
44162
+ `[connector-request] powerbi-oauth/${connection.name}: ${method} ${path5}`
44132
44163
  );
44133
44164
  try {
44134
- const normalizedPath = normalizeRequestPath(path4, BASE_PATH_SEGMENT18);
44165
+ const normalizedPath = normalizeRequestPath(path5, BASE_PATH_SEGMENT18);
44135
44166
  let url = `${BASE_URL64}${normalizedPath}`;
44136
44167
  if (queryParams) {
44137
44168
  const searchParams = new URLSearchParams(queryParams);
@@ -44216,8 +44247,8 @@ var parameters82 = {};
44216
44247
 
44217
44248
  // ../connectors/src/connectors/powerbi-oauth/utils.ts
44218
44249
  var BASE_URL65 = "https://api.powerbi.com/v1.0/myorg";
44219
- function apiFetch35(proxyFetch, path4, init) {
44220
- const url = `${BASE_URL65}${path4.startsWith("/") ? "" : "/"}${path4}`;
44250
+ function apiFetch35(proxyFetch, path5, init) {
44251
+ const url = `${BASE_URL65}${path5.startsWith("/") ? "" : "/"}${path5}`;
44221
44252
  return proxyFetch(url, init);
44222
44253
  }
44223
44254
 
@@ -44242,8 +44273,8 @@ async function listGroups(proxyFetch) {
44242
44273
  return data.value ?? [];
44243
44274
  }
44244
44275
  async function listResource(proxyFetch, groupId, resource) {
44245
- const path4 = groupId === MY_WORKSPACE ? `/${resource}` : `/groups/${encodeURIComponent(groupId)}/${resource}`;
44246
- const res = await apiFetch35(proxyFetch, path4);
44276
+ const path5 = groupId === MY_WORKSPACE ? `/${resource}` : `/groups/${encodeURIComponent(groupId)}/${resource}`;
44277
+ const res = await apiFetch35(proxyFetch, path5);
44247
44278
  if (!res.ok) {
44248
44279
  const body = await res.text().catch(() => res.statusText);
44249
44280
  throw new Error(
@@ -44844,9 +44875,9 @@ function buildTableauBaseUrl(params) {
44844
44875
  }
44845
44876
  return `${serverUrl.replace(/\/$/, "")}/api/${apiVersion}`;
44846
44877
  }
44847
- async function tableauProxyApiFetch(proxyFetch, params, path4, init) {
44878
+ async function tableauProxyApiFetch(proxyFetch, params, path5, init) {
44848
44879
  const baseUrl = buildTableauBaseUrl(params);
44849
- const trimmedPath = path4.replace(/^([^/])/, "/$1");
44880
+ const trimmedPath = path5.replace(/^([^/])/, "/$1");
44850
44881
  return proxyFetch(`${baseUrl}${trimmedPath}`, init);
44851
44882
  }
44852
44883
 
@@ -45205,7 +45236,7 @@ All paths are relative to {serverUrl}/api/{apiVersion}. Use the literal placehol
45205
45236
  Accept and Content-Type headers default to application/json so list responses come back as JSON instead of Tableau's default XML.`,
45206
45237
  inputSchema: inputSchema100,
45207
45238
  outputSchema: outputSchema100,
45208
- async execute({ connectionId, method, path: path4, queryParams, body }, connections, config) {
45239
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
45209
45240
  const connection = connections.find((c) => c.id === connectionId);
45210
45241
  if (!connection) {
45211
45242
  return {
@@ -45214,12 +45245,12 @@ Accept and Content-Type headers default to application/json so list responses co
45214
45245
  };
45215
45246
  }
45216
45247
  console.log(
45217
- `[connector-request] tableau/${connection.name}: ${method} ${path4}`
45248
+ `[connector-request] tableau/${connection.name}: ${method} ${path5}`
45218
45249
  );
45219
45250
  try {
45220
45251
  const serverUrl = parameters83.serverUrl.getValue(connection);
45221
45252
  const apiVersion = parameters83.apiVersion.tryGetValue(connection) || DEFAULT_API_VERSION2;
45222
- const trimmedPath = path4.trim().replace(/^([^/])/, "/$1");
45253
+ const trimmedPath = path5.trim().replace(/^([^/])/, "/$1");
45223
45254
  const baseUrl = buildBaseUrl7(serverUrl, apiVersion);
45224
45255
  let url = `${baseUrl}${trimmedPath}`;
45225
45256
  if (queryParams) {
@@ -45513,7 +45544,7 @@ Covers mailbox (\`/me/messages\`, \`/me/mailFolders\`), threads (\`/me/messages?
45513
45544
  For full-text search use the \`$search\` query parameter (must be wrapped in double quotes); for filtering use \`$filter\` with OData syntax (e.g., \`receivedDateTime ge 2025-01-01T00:00:00Z\`).`,
45514
45545
  inputSchema: inputSchema101,
45515
45546
  outputSchema: outputSchema101,
45516
- async execute({ connectionId, method, path: path4, queryParams }, connections, config) {
45547
+ async execute({ connectionId, method, path: path5, queryParams }, connections, config) {
45517
45548
  const connection = connections.find((c) => c.id === connectionId);
45518
45549
  if (!connection) {
45519
45550
  return {
@@ -45522,10 +45553,10 @@ For full-text search use the \`$search\` query parameter (must be wrapped in dou
45522
45553
  };
45523
45554
  }
45524
45555
  console.log(
45525
- `[connector-request] outlook-oauth/${connection.name}: ${method} ${path4}`
45556
+ `[connector-request] outlook-oauth/${connection.name}: ${method} ${path5}`
45526
45557
  );
45527
45558
  try {
45528
- const normalizedPath = normalizeRequestPath(path4, BASE_PATH_SEGMENT19);
45559
+ const normalizedPath = normalizeRequestPath(path5, BASE_PATH_SEGMENT19);
45529
45560
  let url = `${BASE_URL66}${normalizedPath}`;
45530
45561
  if (queryParams) {
45531
45562
  const searchParams = new URLSearchParams(queryParams);
@@ -46094,7 +46125,7 @@ Use this tool for X API v2 reads such as looking up users, fetching posts, retri
46094
46125
  X rate limits are endpoint-specific and commonly reset on fixed windows. This tool returns x-rate-limit-limit, x-rate-limit-remaining, and x-rate-limit-reset when X sends them. Before making repeated calls or adding pagination, inspect these values and keep dashboard requests small. Do not use this tool for frequent polling; if a request returns 429, wait until the reset timestamp instead of retrying immediately.`,
46095
46126
  inputSchema: inputSchema102,
46096
46127
  outputSchema: outputSchema102,
46097
- async execute({ connectionId, method, path: path4, queryParams, body }, connections) {
46128
+ async execute({ connectionId, method, path: path5, queryParams, body }, connections) {
46098
46129
  const connection = connections.find((c) => c.id === connectionId);
46099
46130
  if (!connection) {
46100
46131
  return {
@@ -46102,9 +46133,9 @@ X rate limits are endpoint-specific and commonly reset on fixed windows. This to
46102
46133
  error: `Connection ${connectionId} not found`
46103
46134
  };
46104
46135
  }
46105
- console.log(`[connector-request] x/${connection.name}: ${method} ${path4}`);
46136
+ console.log(`[connector-request] x/${connection.name}: ${method} ${path5}`);
46106
46137
  try {
46107
- if (/^https?:\/\//i.test(path4)) {
46138
+ if (/^https?:\/\//i.test(path5)) {
46108
46139
  return {
46109
46140
  success: false,
46110
46141
  error: "Absolute URLs are not allowed. Pass a path such as /2/users/me."
@@ -46112,7 +46143,7 @@ X rate limits are endpoint-specific and commonly reset on fixed windows. This to
46112
46143
  }
46113
46144
  const bearerToken = parameters85.bearerToken.getValue(connection);
46114
46145
  const url = new URL(
46115
- `${BASE_URL67}${path4.startsWith("/") ? "" : "/"}${path4}`
46146
+ `${BASE_URL67}${path5.startsWith("/") ? "" : "/"}${path5}`
46116
46147
  );
46117
46148
  if (queryParams) {
46118
46149
  for (const [k, v] of Object.entries(queryParams)) {
@@ -46484,7 +46515,7 @@ Use this tool for normal dashboard data: top/new/best/ask/show/job story IDs, in
46484
46515
  This connector does not require API credentials, but a connectionId is still required to select the Hacker News data source. Keep dashboard calls bounded: fetch list IDs first, then fetch only the small slice of item details needed for the current view. Use searchAlgolia only when keyword, tag, or historical search is necessary.`,
46485
46516
  inputSchema: inputSchema103,
46486
46517
  outputSchema: outputSchema103,
46487
- async execute({ connectionId, path: path4, printPretty }, connections) {
46518
+ async execute({ connectionId, path: path5, printPretty }, connections) {
46488
46519
  const connection = connections.find((c) => c.id === connectionId);
46489
46520
  if (!connection) {
46490
46521
  return {
@@ -46493,17 +46524,17 @@ This connector does not require API credentials, but a connectionId is still req
46493
46524
  };
46494
46525
  }
46495
46526
  console.log(
46496
- `[connector-request] hackernews/${connection.name}: GET ${path4}`
46527
+ `[connector-request] hackernews/${connection.name}: GET ${path5}`
46497
46528
  );
46498
46529
  try {
46499
- if (/^https?:\/\//i.test(path4)) {
46530
+ if (/^https?:\/\//i.test(path5)) {
46500
46531
  return {
46501
46532
  success: false,
46502
46533
  error: "Absolute URLs are not allowed. Pass a Firebase path such as /topstories.json."
46503
46534
  };
46504
46535
  }
46505
46536
  const url = new URL(
46506
- `${BASE_URL68}${path4.startsWith("/") ? "" : "/"}${path4}`
46537
+ `${BASE_URL68}${path5.startsWith("/") ? "" : "/"}${path5}`
46507
46538
  );
46508
46539
  if (printPretty) url.searchParams.set("print", "pretty");
46509
46540
  const controller = new AbortController();
@@ -46590,7 +46621,7 @@ Avoid frequent repeated Algolia searches from dashboards. Keep hitsPerPage small
46590
46621
  `[connector-request] hackernews/${connection.name}: Algolia ${endpoint}`
46591
46622
  );
46592
46623
  try {
46593
- let path4 = `/${endpoint}`;
46624
+ let path5 = `/${endpoint}`;
46594
46625
  if (endpoint === "items" || endpoint === "users") {
46595
46626
  if (!idOrUsername) {
46596
46627
  return {
@@ -46598,9 +46629,9 @@ Avoid frequent repeated Algolia searches from dashboards. Keep hitsPerPage small
46598
46629
  error: `idOrUsername is required for endpoint ${endpoint}`
46599
46630
  };
46600
46631
  }
46601
- path4 += `/${encodeURIComponent(idOrUsername)}`;
46632
+ path5 += `/${encodeURIComponent(idOrUsername)}`;
46602
46633
  }
46603
- const url = new URL(`${BASE_URL69}${path4}`);
46634
+ const url = new URL(`${BASE_URL69}${path5}`);
46604
46635
  if (queryParams) {
46605
46636
  for (const [k, v] of Object.entries(queryParams)) {
46606
46637
  url.searchParams.set(k, v);
@@ -46862,7 +46893,7 @@ Use this tool for all Slack API interactions: listing channels, reading channel
46862
46893
  Pagination is cursor-based: pass 'cursor' from 'response_metadata.next_cursor' of the previous response. Message timestamps ('ts', 'oldest', 'latest') are Unix epoch seconds as strings.`,
46863
46894
  inputSchema: inputSchema105,
46864
46895
  outputSchema: outputSchema105,
46865
- async execute({ connectionId, method, path: path4, body }, connections, config) {
46896
+ async execute({ connectionId, method, path: path5, body }, connections, config) {
46866
46897
  const connection = connections.find((c) => c.id === connectionId);
46867
46898
  if (!connection) {
46868
46899
  return {
@@ -46871,10 +46902,10 @@ Pagination is cursor-based: pass 'cursor' from 'response_metadata.next_cursor' o
46871
46902
  };
46872
46903
  }
46873
46904
  console.log(
46874
- `[connector-request] slack/${connection.name}: ${method} ${path4}`
46905
+ `[connector-request] slack/${connection.name}: ${method} ${path5}`
46875
46906
  );
46876
46907
  try {
46877
- const url = `${BASE_URL70}${path4.startsWith("/") ? "" : "/"}${path4}`;
46908
+ const url = `${BASE_URL70}${path5.startsWith("/") ? "" : "/"}${path5}`;
46878
46909
  const token = await getProxyToken35(config.oauthProxy);
46879
46910
  const proxyUrl = `https://${config.oauthProxy.sandboxId}.${config.oauthProxy.previewBaseDomain}/_sqcore/connections/${connectionId}/request`;
46880
46911
  const controller = new AbortController();
@@ -47406,7 +47437,12 @@ function loadEnvFile(envPath) {
47406
47437
 
47407
47438
  // src/cli/runner.ts
47408
47439
  import { pathToFileURL } from "url";
47409
- import { readFile as readFile2, readdir } from "fs/promises";
47440
+ import { readFile as readFile3, readdir as readdir2 } from "fs/promises";
47441
+ import path3 from "path";
47442
+
47443
+ // src/registry.ts
47444
+ import { readdir, readFile as readFile2, mkdir } from "fs/promises";
47445
+ import { watch as fsWatch2 } from "fs";
47410
47446
  import path2 from "path";
47411
47447
 
47412
47448
  // src/types/server-logic.ts
@@ -47472,14 +47508,21 @@ var anyJsonServerLogicSchema = z106.union([
47472
47508
 
47473
47509
  // src/registry.ts
47474
47510
  function applyDefaults(parameterMeta, runtimeParams) {
47475
- const defaults = new Map(parameterMeta.map((p) => [p.name, p.default ?? null]));
47511
+ const defaults = new Map(
47512
+ parameterMeta.map((p) => [p.name, p.default ?? null])
47513
+ );
47476
47514
  const result = {};
47477
- for (const [key, value] of Object.entries(runtimeParams)) result[key] = value;
47515
+ for (const [key, value] of Object.entries(runtimeParams)) {
47516
+ result[key] = value;
47517
+ }
47478
47518
  for (const [key, defaultVal] of defaults) {
47479
- if (!(key in result)) result[key] = defaultVal;
47519
+ if (!(key in result)) {
47520
+ result[key] = defaultVal;
47521
+ }
47480
47522
  }
47481
47523
  return result;
47482
47524
  }
47525
+ var defaultServerLogicDir = path2.join(process.cwd(), "server-logic");
47483
47526
 
47484
47527
  // src/cli/runner.ts
47485
47528
  function createStubContext(params) {
@@ -47569,10 +47612,10 @@ async function runTypescriptServerLogic(slug, handlerPath, params) {
47569
47612
  }
47570
47613
  }
47571
47614
  async function runServerLogic(slug, dirPath, params, limit) {
47572
- const jsonPath = path2.join(dirPath, `${slug}.json`);
47615
+ const jsonPath = path3.join(dirPath, `${slug}.json`);
47573
47616
  let def;
47574
47617
  try {
47575
- const raw = await readFile2(jsonPath, "utf-8");
47618
+ const raw = await readFile3(jsonPath, "utf-8");
47576
47619
  const parsed = anyJsonServerLogicSchema.safeParse(JSON.parse(raw));
47577
47620
  if (!parsed.success) {
47578
47621
  return {
@@ -47594,14 +47637,14 @@ async function runServerLogic(slug, dirPath, params, limit) {
47594
47637
  };
47595
47638
  }
47596
47639
  if (def.type === "typescript") {
47597
- const absolutePath = path2.resolve(dirPath, def.handlerPath);
47640
+ const absolutePath = path3.resolve(dirPath, def.handlerPath);
47598
47641
  return runTypescriptServerLogic(slug, absolutePath, params);
47599
47642
  }
47600
47643
  return runSqlServerLogic(slug, def, params, limit);
47601
47644
  }
47602
47645
  async function listSlugs(dirPath) {
47603
47646
  try {
47604
- const files = await readdir(dirPath);
47647
+ const files = await readdir2(dirPath);
47605
47648
  return files.filter((f) => f.endsWith(".json")).map((f) => f.replace(/\.json$/, ""));
47606
47649
  } catch {
47607
47650
  return [];
@@ -47731,8 +47774,8 @@ async function main() {
47731
47774
  process.exit(0);
47732
47775
  }
47733
47776
  const cwd = process.cwd();
47734
- const dirPath = values.dir ? path3.resolve(cwd, values.dir) : path3.join(cwd, "server-logic");
47735
- const envPath = values.env ? path3.resolve(cwd, values.env) : path3.join(cwd, "../../.env");
47777
+ const dirPath = values.dir ? path4.resolve(cwd, values.dir) : path4.join(cwd, "server-logic");
47778
+ const envPath = values.env ? path4.resolve(cwd, values.env) : path4.join(cwd, "../../.env");
47736
47779
  const limit = parseInt(values.limit ?? "50", 10);
47737
47780
  const format = values.format ?? "table";
47738
47781
  loadEnvFile(envPath);
@@ -47785,10 +47828,10 @@ Total: ${results.length}, Failed: ${failed}`);
47785
47828
  console.log("Cancelled.");
47786
47829
  process.exit(0);
47787
47830
  }
47788
- const jsonPath = path3.join(dirPath, `${slug}.json`);
47831
+ const jsonPath = path4.join(dirPath, `${slug}.json`);
47789
47832
  let paramMeta = [];
47790
47833
  try {
47791
- const raw = await readFile3(jsonPath, "utf-8");
47834
+ const raw = await readFile4(jsonPath, "utf-8");
47792
47835
  const parsed = anyJsonServerLogicSchema.safeParse(JSON.parse(raw));
47793
47836
  if (parsed.success) paramMeta = parsed.data.parameters ?? [];
47794
47837
  } catch {