@squadbase/vite-server 0.1.6 → 0.1.7-dev.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -72734,21 +72734,23 @@ await drive.updateFile("fileId123", {}, "newFolderId", "oldFolderId");
72734
72734
  }
72735
72735
  });
72736
72736
 
72737
- // ../connectors/src/connectors/google-sheets/setup.ts
72738
- var googleSheetsOnboarding = new ConnectorOnboarding({
72739
- dataOverviewInstructions: {
72740
- en: `1. Create a new spreadsheet with google-sheets-oauth_request (POST with body { properties: { title: "..." } }) or use an existing spreadsheet ID.
72741
- 2. Call google-sheets-oauth_request with GET /{spreadsheetId} to fetch spreadsheet metadata (sheet names and properties).`,
72742
- ja: `1. google-sheets-oauth_request \u3092 POST\uFF08Body: { properties: { title: "..." } }\uFF09\u3067\u547C\u3073\u51FA\u3057\u3066\u65B0\u3057\u3044\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u3092\u4F5C\u6210\u3059\u308B\u304B\u3001\u65E2\u5B58\u306E\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u3092\u5229\u7528\u3057\u307E\u3059\u3002
72743
- 2. google-sheets-oauth_request \u3067 GET /{spreadsheetId} \u3092\u547C\u3073\u51FA\u3057\u3001\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\uFF08\u30B7\u30FC\u30C8\u540D\u3068\u30D7\u30ED\u30D1\u30C6\u30A3\uFF09\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002`
72744
- }
72745
- });
72737
+ // ../connectors/src/connectors/google-sheets/tools/request.ts
72738
+ import { z as z27 } from "zod";
72746
72739
 
72747
72740
  // ../connectors/src/connectors/google-sheets/parameters.ts
72748
- var parameters18 = {};
72741
+ var parameters18 = {
72742
+ spreadsheetId: new ParameterDefinition({
72743
+ slug: "spreadsheet-id",
72744
+ name: "Google Sheets Spreadsheet ID",
72745
+ description: "The spreadsheet ID from the Google Sheets URL (the segment between /d/ and /edit in https://docs.google.com/spreadsheets/d/{spreadsheetId}/edit).",
72746
+ envVarBaseKey: "GOOGLE_SHEETS_SPREADSHEET_ID",
72747
+ type: "text",
72748
+ secret: false,
72749
+ required: true
72750
+ })
72751
+ };
72749
72752
 
72750
72753
  // ../connectors/src/connectors/google-sheets/tools/request.ts
72751
- import { z as z27 } from "zod";
72752
72754
  var SHEETS_BASE_URL = "https://sheets.googleapis.com/v4/spreadsheets";
72753
72755
  var REQUEST_TIMEOUT_MS17 = 6e4;
72754
72756
  var cachedToken13 = null;
@@ -72787,11 +72789,10 @@ var inputSchema27 = z27.object({
72787
72789
  "Brief description of what you intend to accomplish with this tool call"
72788
72790
  ),
72789
72791
  connectionId: z27.string().describe("ID of the Google Sheets connection to use"),
72790
- method: z27.enum(["GET", "POST", "PUT"]).describe("HTTP method"),
72792
+ method: z27.enum(["GET"]).describe("HTTP method. Only GET is supported (read-only analysis)."),
72791
72793
  path: z27.string().describe(
72792
- "API path appended to https://sheets.googleapis.com/v4/spreadsheets (e.g., '', '/{spreadsheetId}', '/{spreadsheetId}/values/Sheet1!A1:D10')."
72794
+ "API path appended to https://sheets.googleapis.com/v4/spreadsheets (e.g., '/{spreadsheetId}', '/{spreadsheetId}/values/Sheet1!A1:D10'). The `{spreadsheetId}` placeholder is automatically replaced with the connection's configured spreadsheet ID."
72793
72795
  ),
72794
- body: z27.record(z27.string(), z27.unknown()).optional().describe("JSON request body for POST/PUT requests"),
72795
72796
  queryParams: z27.record(z27.string(), z27.string()).optional().describe("Query parameters to append to the URL")
72796
72797
  });
72797
72798
  var outputSchema27 = z27.discriminatedUnion("success", [
@@ -72807,12 +72808,12 @@ var outputSchema27 = z27.discriminatedUnion("success", [
72807
72808
  ]);
72808
72809
  var requestTool9 = new ConnectorTool({
72809
72810
  name: "request",
72810
- description: `Send authenticated requests to the Google Sheets API v4.
72811
- Supports GET (read), POST (create/append), and PUT (update) methods.
72811
+ description: `Send authenticated GET requests to the Google Sheets API v4 for read-only analysis.
72812
+ The \`{spreadsheetId}\` placeholder in the path is automatically replaced with the connection's configured spreadsheet ID.
72812
72813
  Authentication is handled automatically via OAuth proxy.`,
72813
72814
  inputSchema: inputSchema27,
72814
72815
  outputSchema: outputSchema27,
72815
- async execute({ connectionId, method, path: path5, body, queryParams }, connections, config) {
72816
+ async execute({ connectionId, method, path: path5, queryParams }, connections, config) {
72816
72817
  const connection = connections.find((c6) => c6.id === connectionId);
72817
72818
  if (!connection) {
72818
72819
  return {
@@ -72820,11 +72821,16 @@ Authentication is handled automatically via OAuth proxy.`,
72820
72821
  error: `Connection ${connectionId} not found`
72821
72822
  };
72822
72823
  }
72824
+ const spreadsheetIdParam = connection.parameters.find(
72825
+ (p6) => p6.parameterSlug === parameters18.spreadsheetId.slug
72826
+ );
72827
+ const spreadsheetId = spreadsheetIdParam?.value ?? void 0;
72828
+ const resolvedPath = spreadsheetId ? path5.replace(/\{spreadsheetId\}/g, spreadsheetId) : path5;
72823
72829
  console.log(
72824
- `[connector-request] google-sheets/${connection.name}: ${method} ${path5}`
72830
+ `[connector-request] google-sheets/${connection.name}: ${method} ${resolvedPath}`
72825
72831
  );
72826
72832
  try {
72827
- let url = `${SHEETS_BASE_URL}${path5 === "" || path5.startsWith("/") ? "" : "/"}${path5}`;
72833
+ let url = `${SHEETS_BASE_URL}${resolvedPath === "" || resolvedPath.startsWith("/") ? "" : "/"}${resolvedPath}`;
72828
72834
  if (queryParams) {
72829
72835
  const searchParams = new URLSearchParams(queryParams);
72830
72836
  url += `?${searchParams.toString()}`;
@@ -72842,8 +72848,7 @@ Authentication is handled automatically via OAuth proxy.`,
72842
72848
  },
72843
72849
  body: JSON.stringify({
72844
72850
  url,
72845
- method,
72846
- ...body != null ? { body: JSON.stringify(body) } : {}
72851
+ method
72847
72852
  }),
72848
72853
  signal: controller.signal
72849
72854
  });
@@ -72863,13 +72868,66 @@ Authentication is handled automatically via OAuth proxy.`,
72863
72868
  }
72864
72869
  });
72865
72870
 
72871
+ // ../connectors/src/connectors/google-sheets/setup.ts
72872
+ var requestToolName = `google-sheets-oauth_${requestTool9.name}`;
72873
+ var googleSheetsOnboarding = new ConnectorOnboarding({
72874
+ connectionSetupInstructions: {
72875
+ ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Google Sheets (OAuth) \u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002\u5206\u6790\u5BFE\u8C61\u306E\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306F\u30E6\u30FC\u30B6\u30FC\u304B\u3089\u53D7\u3051\u53D6\u3063\u305FURL\u3067\u6307\u5B9A\u3057\u307E\u3059\uFF08\u65B0\u3057\u3044\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306F\u4F5C\u6210\u3057\u307E\u305B\u3093\uFF09\u3002
72876
+
72877
+ 1. \`askUserQuestion\` \u3067\u5206\u6790\u5BFE\u8C61\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306EURL\u3092\u30D2\u30A2\u30EA\u30F3\u30B0\u3059\u308B:
72878
+ - \`type\`: \`"freeText"\`
72879
+ - \`question\`: \u300C\u5206\u6790\u3057\u305F\u3044Google Sheets\u306EURL\u3092\u8CBC\u308A\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\u300D
72880
+ - \`placeholder\`: \`"https://docs.google.com/spreadsheets/d/.../edit"\`
72881
+ 2. \u53D7\u3051\u53D6\u3063\u305FURL\u304B\u3089\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u3092\u62BD\u51FA\u3059\u308B\u3002URL\u306E \`/d/\` \u3068 \`/edit\`\uFF08\u307E\u305F\u306F\u672B\u5C3E\uFF09\u306E\u9593\u306B\u3042\u308B\u6587\u5B57\u5217\u304C\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u3067\u3059\uFF08\u4F8B: \`https://docs.google.com/spreadsheets/d/1AbCxyz.../edit\` \u2192 \`1AbCxyz...\`\uFF09\u3002URL\u3067\u306F\u306A\u304FID\u3060\u3051\u304C\u6E21\u3055\u308C\u305F\u5834\u5408\u306F\u305D\u306E\u307E\u307E\u5229\u7528\u3057\u307E\u3059\u3002
72882
+ 3. \u62BD\u51FA\u3057\u305FID\u3092 \`updateConnectionParameters\` \u3067\u4FDD\u5B58\u3059\u308B:
72883
+ - \`parameterSlug\`: \`"spreadsheet-id"\`
72884
+ - \`options\`: \`[{ value: <\u62BD\u51FA\u3057\u305FID>, label: <\u540C\u3058\u5024> }]\`\uFF081\u4EF6\u306E\u307F\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u81EA\u52D5\u9078\u629E\u3055\u308C\u308B\uFF09
72885
+ 4. \`${requestToolName}\` \u3067\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306B\u30A2\u30AF\u30BB\u30B9\u3067\u304D\u308B\u3053\u3068\u3092\u78BA\u8A8D\u3059\u308B:
72886
+ - \`method\`: \`"GET"\`
72887
+ - \`path\`: \`"/{spreadsheetId}"\`
72888
+ 5. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u4EE5\u4E0B\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u30E6\u30FC\u30B6\u30FC\u306B\u4F1D\u3048\u308B:
72889
+ - OAuth\u3067\u63A5\u7D9A\u3057\u305FGoogle\u30A2\u30AB\u30A6\u30F3\u30C8\u304C\u305D\u306E\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306B\u95B2\u89A7\u6A29\u9650\u3092\u6301\u3063\u3066\u3044\u308B\u304B
72890
+ - \u5165\u529B\u3055\u308C\u305FURL\u304C\u6B63\u3057\u3044\u304B
72891
+
72892
+ #### \u5236\u7D04
72893
+ - **\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u30BB\u30EB\u5024\u3092\u5927\u91CF\u306B\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
72894
+ - \u30C4\u30FC\u30EB\u9593\u306F1\u6587\u3060\u3051\u66F8\u3044\u3066\u5373\u6B21\u306E\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u3002\u4E0D\u8981\u306A\u8AAC\u660E\u306F\u7701\u7565\u3057\u3001\u52B9\u7387\u7684\u306B\u9032\u3081\u308B`,
72895
+ en: `Follow these steps to set up the Google Sheets (OAuth) connection. The spreadsheet to analyze is specified by the URL provided by the user (no new spreadsheet is created).
72896
+
72897
+ 1. Call \`askUserQuestion\` to ask for the spreadsheet URL to analyze:
72898
+ - \`type\`: \`"freeText"\`
72899
+ - \`question\`: "Please paste the URL of the Google Sheet you want to analyze"
72900
+ - \`placeholder\`: \`"https://docs.google.com/spreadsheets/d/.../edit"\`
72901
+ 2. Extract the spreadsheet ID from the URL. It is the segment between \`/d/\` and \`/edit\` (or the end of the URL), e.g. \`https://docs.google.com/spreadsheets/d/1AbCxyz.../edit\` \u2192 \`1AbCxyz...\`. If the user pasted just the ID, use it as-is.
72902
+ 3. Save the extracted ID via \`updateConnectionParameters\`:
72903
+ - \`parameterSlug\`: \`"spreadsheet-id"\`
72904
+ - \`options\`: \`[{ value: <extracted ID>, label: <same value> }]\` (a single option is auto-selected)
72905
+ 4. Verify access by calling \`${requestToolName}\`:
72906
+ - \`method\`: \`"GET"\`
72907
+ - \`path\`: \`"/{spreadsheetId}"\`
72908
+ 5. If an error is returned, ask the user to verify:
72909
+ - The OAuthed Google account has read access to the spreadsheet
72910
+ - The URL they entered is correct
72911
+
72912
+ #### Constraints
72913
+ - **Do NOT read large amounts of cell data during setup**. Only the metadata request specified above is allowed
72914
+ - Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`
72915
+ },
72916
+ dataOverviewInstructions: {
72917
+ en: `1. Call ${requestToolName} with GET /{spreadsheetId} to fetch spreadsheet metadata (sheet names, grid properties)
72918
+ 2. For each sheet of interest, call ${requestToolName} with GET /{spreadsheetId}/values/{SheetName}!A1:Z5 to sample the first rows and understand the column layout`,
72919
+ ja: `1. ${requestToolName} \u3067 GET /{spreadsheetId} \u3092\u547C\u3073\u51FA\u3057\u3001\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\uFF08\u30B7\u30FC\u30C8\u540D\u3001\u30B0\u30EA\u30C3\u30C9\u30D7\u30ED\u30D1\u30C6\u30A3\uFF09\u3092\u53D6\u5F97
72920
+ 2. \u4E3B\u8981\u306A\u30B7\u30FC\u30C8\u306B\u3064\u3044\u3066 ${requestToolName} \u3067 GET /{spreadsheetId}/values/{\u30B7\u30FC\u30C8\u540D}!A1:Z5 \u3092\u547C\u3073\u51FA\u3057\u3001\u5148\u982D\u6570\u884C\u3092\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u3057\u3066\u30AB\u30E9\u30E0\u69CB\u9020\u3092\u628A\u63E1`
72921
+ }
72922
+ });
72923
+
72866
72924
  // ../connectors/src/connectors/google-sheets/index.ts
72867
72925
  var tools18 = { request: requestTool9 };
72868
72926
  var googleSheetsConnector = new ConnectorPlugin({
72869
72927
  slug: "google-sheets",
72870
72928
  authType: AUTH_TYPES.OAUTH,
72871
72929
  name: "Google Sheets",
72872
- description: "Connect to Google Sheets for spreadsheet data access and creation using OAuth.",
72930
+ description: "Connect to an existing Google Sheets spreadsheet for read-only data analysis using OAuth.",
72873
72931
  iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/1UPQuggyiZmbb26CuaSr2h/032770e8739b183fa00b7625f024e536/google-sheets.svg",
72874
72932
  parameters: parameters18,
72875
72933
  releaseFlag: { dev1: true, dev2: false, prod: false },
@@ -72878,30 +72936,25 @@ var googleSheetsConnector = new ConnectorPlugin({
72878
72936
  allowlist: [
72879
72937
  {
72880
72938
  host: "sheets.googleapis.com",
72881
- methods: ["GET", "POST", "PUT"]
72939
+ methods: ["GET"]
72882
72940
  }
72883
72941
  ]
72884
72942
  },
72885
72943
  systemPrompt: {
72886
72944
  en: `### Tools (setup-time only)
72887
72945
 
72888
- - \`google-sheets-oauth_request\`: Call the Google Sheets API during setup / data overview. Supports read and write operations. Use it to get/update spreadsheet metadata, cell values, create new spreadsheets, and more. Authentication is configured automatically via OAuth.
72946
+ - \`google-sheets-oauth_request\`: Call the Google Sheets API during setup / data overview. Read-only (GET only). Use it to fetch spreadsheet metadata and sample cell values. The \`{spreadsheetId}\` placeholder in the path is automatically replaced with the spreadsheet configured at setup time. Authentication is configured automatically via OAuth.
72889
72947
 
72890
72948
  > **Important**: The \`google-sheets-oauth_request\` tool is only available at setup time. Inside server-logic handlers, use the SDK (\`connection(id).getValues\`, etc.) \u2014 the SDK's fetch is already wired through the OAuth proxy. **Do NOT** hand-roll HTTP calls to \`_sqcore/connections/*/request\` from a handler.
72891
72949
 
72892
- ### Google Sheets API Reference
72950
+ > **Connection scope**: Each connection is bound to a single spreadsheet selected at setup time via URL. This connector does NOT create new spreadsheets and does NOT write to spreadsheets. The OAuth scope is \`spreadsheets.readonly\`.
72951
+
72952
+ ### Google Sheets API Reference (read-only)
72893
72953
 
72894
- #### Read Endpoints
72895
72954
  - GET \`/{spreadsheetId}\` \u2014 Get spreadsheet metadata (title, sheets, properties)
72896
72955
  - GET \`/{spreadsheetId}/values/{range}\` \u2014 Get cell values for a range
72897
72956
  - GET \`/{spreadsheetId}/values:batchGet?ranges={range1}&ranges={range2}\` \u2014 Get values for multiple ranges
72898
72957
 
72899
- #### Write Endpoints
72900
- - POST \`\` (empty path, with body) \u2014 Create a new spreadsheet. Body: \`{ "properties": { "title": "My Sheet" }, "sheets": [{ "properties": { "title": "Sheet1" } }] }\`
72901
- - PUT \`/{spreadsheetId}/values/{range}?valueInputOption=USER_ENTERED\` \u2014 Update cell values for a range. Body: \`{ "range": "Sheet1!A1:B2", "majorDimension": "ROWS", "values": [["a","b"],["c","d"]] }\`
72902
- - POST \`/{spreadsheetId}/values/{range}:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS\` \u2014 Append rows after the last row. Body: \`{ "range": "Sheet1!A1", "majorDimension": "ROWS", "values": [["a","b"]] }\`
72903
- - POST \`/{spreadsheetId}:batchUpdate\` \u2014 Apply multiple updates (formatting, add sheets, merge cells, etc.). Body: \`{ "requests": [...] }\`
72904
-
72905
72958
  ### Range Notation (A1 notation)
72906
72959
  - \`Sheet1!A1:D10\` \u2014 Specific range on Sheet1
72907
72960
  - \`Sheet1!A:A\` \u2014 Entire column A on Sheet1
@@ -72914,21 +72967,17 @@ var googleSheetsConnector = new ConnectorPlugin({
72914
72967
  - Use \`valueRenderOption=FORMATTED_VALUE\` query param to get display values
72915
72968
  - Use \`valueRenderOption=UNFORMATTED_VALUE\` for raw numeric values
72916
72969
  - Use \`majorDimension=COLUMNS\` to get data organized by columns instead of rows
72917
- - For write operations, always use \`valueInputOption=USER_ENTERED\` so values are parsed as if typed by a user (dates, numbers, formulas are auto-detected)
72918
- - Sharing (permissions) cannot be done via this connector; only the OAuth user has access to the created spreadsheets
72919
72970
 
72920
72971
  ### Business Logic
72921
72972
 
72922
- 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.
72973
+ 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. The spreadsheet ID is bound to the connection at setup time; do NOT ask handler callers to pass it.
72923
72974
 
72924
72975
  SDK surface (client created via \`connection(connectionId)\`):
72925
- - \`client.request(path, init?)\` \u2014 low-level authenticated fetch (\`path\` is appended to \`https://sheets.googleapis.com/v4/spreadsheets\`).
72926
- - \`client.getSpreadsheet(spreadsheetId)\` \u2014 fetch spreadsheet metadata.
72927
- - \`client.getValues(spreadsheetId, range)\` \u2014 read a range (A1 notation).
72928
- - \`client.batchGetValues(spreadsheetId, ranges)\` \u2014 read multiple ranges.
72929
- - \`client.updateValues(spreadsheetId, range, values)\` \u2014 write values to a range.
72930
- - \`client.appendValues(spreadsheetId, range, values)\` \u2014 append rows after the last row.
72931
- - \`client.createSpreadsheet(title, sheetNames?)\` \u2014 create a new spreadsheet.
72976
+ - \`client.spreadsheetId\` \u2014 the spreadsheet ID configured for this connection.
72977
+ - \`client.request(path, init?)\` \u2014 low-level authenticated fetch (\`path\` is appended to \`https://sheets.googleapis.com/v4/spreadsheets\`; \`{spreadsheetId}\` is auto-replaced).
72978
+ - \`client.getSpreadsheet()\` \u2014 fetch spreadsheet metadata for the configured spreadsheet.
72979
+ - \`client.getValues(range)\` \u2014 read a range (A1 notation) from the configured spreadsheet.
72980
+ - \`client.batchGetValues(ranges)\` \u2014 read multiple ranges from the configured spreadsheet.
72932
72981
 
72933
72982
  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.
72934
72983
 
@@ -72939,43 +72988,31 @@ import { connection } from "@squadbase/vite-server/connectors/google-sheets";
72939
72988
 
72940
72989
  const sheets = connection("<connectionId>");
72941
72990
 
72942
- // Create a new spreadsheet
72943
- const newSheet = await sheets.createSpreadsheet("Sales Report", ["Q1", "Q2", "Q3", "Q4"]);
72944
- const spreadsheetId = newSheet.spreadsheetId;
72945
-
72946
- // Get spreadsheet metadata
72947
- const metadata = await sheets.getSpreadsheet(spreadsheetId);
72991
+ // Get metadata for the configured spreadsheet
72992
+ const metadata = await sheets.getSpreadsheet();
72948
72993
  console.log(metadata.properties.title, metadata.sheets.map(s => s.properties.title));
72949
72994
 
72950
72995
  // Get cell values
72951
- const values = await sheets.getValues(spreadsheetId, "Sheet1!A1:D10");
72996
+ const values = await sheets.getValues("Sheet1!A1:D10");
72952
72997
  console.log(values.values); // 2D array
72953
72998
 
72954
- // Update cell values
72955
- await sheets.updateValues(spreadsheetId, "Sheet1!A1:B2", [["Name", "Score"], ["Alice", "100"]]);
72956
-
72957
- // Append rows
72958
- await sheets.appendValues(spreadsheetId, "Sheet1!A1", [["Bob", "95"], ["Charlie", "88"]]);
72999
+ // Batch-get multiple ranges
73000
+ const batch = await sheets.batchGetValues(["Sheet1!A:A", "Sheet2!B2:C100"]);
72959
73001
  \`\`\``,
72960
73002
  ja: `### \u30C4\u30FC\u30EB\uFF08\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\uFF09
72961
73003
 
72962
- - \`google-sheets-oauth_request\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3084\u30C7\u30FC\u30BF\u6982\u8981\u628A\u63E1\u6642\u306B Google Sheets API \u3092\u547C\u3073\u51FA\u3059\u30C4\u30FC\u30EB\u3067\u3059\u3002\u8AAD\u307F\u53D6\u308A\u3068\u66F8\u304D\u8FBC\u307F\u306E\u4E21\u65B9\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u30FB\u30BB\u30EB\u5024\u306E\u53D6\u5F97/\u66F4\u65B0\u3001\u65B0\u3057\u3044\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u4F5C\u6210\u306A\u3069\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002OAuth \u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
73004
+ - \`google-sheets-oauth_request\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3084\u30C7\u30FC\u30BF\u6982\u8981\u628A\u63E1\u6642\u306B Google Sheets API \u3092\u547C\u3073\u51FA\u3059\u30C4\u30FC\u30EB\u3067\u3059\u3002\u8AAD\u307F\u53D6\u308A\u5C02\u7528\uFF08GET \u306E\u307F\uFF09\u3067\u3059\u3002\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u53D6\u5F97\u3084\u30BB\u30EB\u5024\u306E\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u30D1\u30B9\u5185\u306E \`{spreadsheetId}\` \u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u306F\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306B\u6307\u5B9A\u3055\u308C\u305F\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u306B\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059\u3002OAuth \u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
72963
73005
 
72964
73006
  > **\u91CD\u8981**: \`google-sheets-oauth_request\` \u306F\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\u5229\u7528\u53EF\u80FD\u3067\u3059\u3002\u30B5\u30FC\u30D0\u30FC\u30ED\u30B8\u30C3\u30AF\u306E\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u5FC5\u305A SDK\uFF08\`connection(id).getValues\` \u306A\u3069\uFF09\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002SDK \u306E fetch \u306F OAuth \u30D7\u30ED\u30AD\u30B7\u7D4C\u7531\u3067\u65E2\u306B\u914D\u7DDA\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u304B\u3089 \`_sqcore/connections/*/request\` \u3092\u624B\u66F8\u304D\u3067\u547C\u3073\u51FA\u3055\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
72965
73007
 
72966
- ### Google Sheets API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
73008
+ > **\u63A5\u7D9A\u30B9\u30B3\u30FC\u30D7**: \u5404\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306F\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306BURL\u3067\u6307\u5B9A\u3055\u308C\u305F1\u3064\u306E\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306B\u7D10\u3065\u304D\u307E\u3059\u3002\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306F\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u4F5C\u6210\u3084\u66F8\u304D\u8FBC\u307F\u306F\u884C\u3044\u307E\u305B\u3093\u3002OAuth \u30B9\u30B3\u30FC\u30D7\u306F \`spreadsheets.readonly\` \u3067\u3059\u3002
73009
+
73010
+ ### Google Sheets API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\uFF08\u8AAD\u307F\u53D6\u308A\u5C02\u7528\uFF09
72967
73011
 
72968
- #### \u8AAD\u307F\u53D6\u308A\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
72969
73012
  - GET \`/{spreadsheetId}\` \u2014 \u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\uFF08\u30BF\u30A4\u30C8\u30EB\u3001\u30B7\u30FC\u30C8\u3001\u30D7\u30ED\u30D1\u30C6\u30A3\uFF09
72970
73013
  - GET \`/{spreadsheetId}/values/{range}\` \u2014 \u7BC4\u56F2\u306E\u30BB\u30EB\u5024\u3092\u53D6\u5F97
72971
73014
  - GET \`/{spreadsheetId}/values:batchGet?ranges={range1}&ranges={range2}\` \u2014 \u8907\u6570\u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97
72972
73015
 
72973
- #### \u66F8\u304D\u8FBC\u307F\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
72974
- - POST \`\`\uFF08\u7A7A\u30D1\u30B9\u3001\u30DC\u30C7\u30A3\u4ED8\u304D\uFF09\u2014 \u65B0\u3057\u3044\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u3092\u4F5C\u6210\u3002Body: \`{ "properties": { "title": "\u30DE\u30A4\u30B7\u30FC\u30C8" }, "sheets": [{ "properties": { "title": "Sheet1" } }] }\`
72975
- - PUT \`/{spreadsheetId}/values/{range}?valueInputOption=USER_ENTERED\` \u2014 \u7BC4\u56F2\u306E\u30BB\u30EB\u5024\u3092\u66F4\u65B0\u3002Body: \`{ "range": "Sheet1!A1:B2", "majorDimension": "ROWS", "values": [["a","b"],["c","d"]] }\`
72976
- - POST \`/{spreadsheetId}/values/{range}:append?valueInputOption=USER_ENTERED&insertDataOption=INSERT_ROWS\` \u2014 \u6700\u7D42\u884C\u306E\u5F8C\u306B\u884C\u3092\u8FFD\u52A0\u3002Body: \`{ "range": "Sheet1!A1", "majorDimension": "ROWS", "values": [["a","b"]] }\`
72977
- - POST \`/{spreadsheetId}:batchUpdate\` \u2014 \u8907\u6570\u306E\u66F4\u65B0\u3092\u9069\u7528\uFF08\u66F8\u5F0F\u8A2D\u5B9A\u3001\u30B7\u30FC\u30C8\u8FFD\u52A0\u3001\u30BB\u30EB\u7D50\u5408\u306A\u3069\uFF09\u3002Body: \`{ "requests": [...] }\`
72978
-
72979
73016
  ### \u7BC4\u56F2\u306E\u8868\u8A18\u6CD5\uFF08A1\u8868\u8A18\u6CD5\uFF09
72980
73017
  - \`Sheet1!A1:D10\` \u2014 Sheet1\u4E0A\u306E\u7279\u5B9A\u7BC4\u56F2
72981
73018
  - \`Sheet1!A:A\` \u2014 Sheet1\u306EA\u5217\u5168\u4F53
@@ -72988,21 +73025,17 @@ await sheets.appendValues(spreadsheetId, "Sheet1!A1", [["Bob", "95"], ["Charlie"
72988
73025
  - \u8868\u793A\u5024\u3092\u53D6\u5F97\u3059\u308B\u306B\u306F \`valueRenderOption=FORMATTED_VALUE\` \u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u4F7F\u7528\u3057\u307E\u3059
72989
73026
  - \u751F\u306E\u6570\u5024\u3092\u53D6\u5F97\u3059\u308B\u306B\u306F \`valueRenderOption=UNFORMATTED_VALUE\` \u3092\u4F7F\u7528\u3057\u307E\u3059
72990
73027
  - \u5217\u3054\u3068\u306B\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3059\u308B\u306B\u306F \`majorDimension=COLUMNS\` \u3092\u4F7F\u7528\u3057\u307E\u3059
72991
- - \u66F8\u304D\u8FBC\u307F\u64CD\u4F5C\u3067\u306F\u5E38\u306B \`valueInputOption=USER_ENTERED\` \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u5024\u304C\u30E6\u30FC\u30B6\u30FC\u5165\u529B\u306E\u3088\u3046\u306B\u89E3\u6790\u3055\u308C\u307E\u3059\uFF08\u65E5\u4ED8\u3001\u6570\u5024\u3001\u6570\u5F0F\u304C\u81EA\u52D5\u691C\u51FA\uFF09
72992
- - \u5171\u6709\uFF08permissions\uFF09\u306F\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u7D4C\u7531\u3067\u306F\u884C\u3048\u307E\u305B\u3093\u3002\u4F5C\u6210\u3057\u305F\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u3078\u306F\u63A5\u7D9A\u3057\u305FOAuth\u30E6\u30FC\u30B6\u30FC\u306E\u307F\u304C\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u3067\u3059
72993
73028
 
72994
73029
  ### Business Logic
72995
73030
 
72996
- \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
73031
+ \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\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u306F\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306B\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306B\u7D10\u3065\u3051\u3089\u308C\u3066\u3044\u308B\u306E\u3067\u3001\u30CF\u30F3\u30C9\u30E9\u306E\u547C\u3073\u51FA\u3057\u5143\u306B\u6E21\u3055\u305B\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
72997
73032
 
72998
73033
  SDK\uFF08\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\uFF09:
72999
- - \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304D fetch\uFF08\`path\` \u306F \`https://sheets.googleapis.com/v4/spreadsheets\` \u306B\u8FFD\u52A0\u3055\u308C\u307E\u3059\uFF09\u3002
73000
- - \`client.getSpreadsheet(spreadsheetId)\` \u2014 \u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3002
73001
- - \`client.getValues(spreadsheetId, range)\` \u2014 \u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97\uFF08A1 \u8868\u8A18\uFF09\u3002
73002
- - \`client.batchGetValues(spreadsheetId, ranges)\` \u2014 \u8907\u6570\u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97\u3002
73003
- - \`client.updateValues(spreadsheetId, range, values)\` \u2014 \u7BC4\u56F2\u306B\u5024\u3092\u66F8\u304D\u8FBC\u307F\u3002
73004
- - \`client.appendValues(spreadsheetId, range, values)\` \u2014 \u6700\u7D42\u884C\u306E\u5F8C\u306B\u884C\u3092\u8FFD\u52A0\u3002
73005
- - \`client.createSpreadsheet(title, sheetNames?)\` \u2014 \u65B0\u3057\u3044\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u3092\u4F5C\u6210\u3002
73034
+ - \`client.spreadsheetId\` \u2014 \u3053\u306E\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306B\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u308B\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u3002
73035
+ - \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304D fetch\uFF08\`path\` \u306F \`https://sheets.googleapis.com/v4/spreadsheets\` \u306B\u8FFD\u52A0\u3055\u308C\u3001\`{spreadsheetId}\` \u306F\u81EA\u52D5\u7F6E\u63DB\u3055\u308C\u307E\u3059\uFF09\u3002
73036
+ - \`client.getSpreadsheet()\` \u2014 \u8A2D\u5B9A\u6E08\u307F\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3002
73037
+ - \`client.getValues(range)\` \u2014 \u8A2D\u5B9A\u6E08\u307F\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97\uFF08A1 \u8868\u8A18\uFF09\u3002
73038
+ - \`client.batchGetValues(ranges)\` \u2014 \u8A2D\u5B9A\u6E08\u307F\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u8907\u6570\u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97\u3002
73006
73039
 
73007
73040
  \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
73008
73041
 
@@ -73013,23 +73046,16 @@ import { connection } from "@squadbase/vite-server/connectors/google-sheets";
73013
73046
 
73014
73047
  const sheets = connection("<connectionId>");
73015
73048
 
73016
- // \u65B0\u3057\u3044\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u3092\u4F5C\u6210
73017
- const newSheet = await sheets.createSpreadsheet("\u58F2\u4E0A\u30EC\u30DD\u30FC\u30C8", ["Q1", "Q2", "Q3", "Q4"]);
73018
- const spreadsheetId = newSheet.spreadsheetId;
73019
-
73020
- // \u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97
73021
- const metadata = await sheets.getSpreadsheet(spreadsheetId);
73049
+ // \u8A2D\u5B9A\u6E08\u307F\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97
73050
+ const metadata = await sheets.getSpreadsheet();
73022
73051
  console.log(metadata.properties.title, metadata.sheets.map(s => s.properties.title));
73023
73052
 
73024
73053
  // \u30BB\u30EB\u5024\u3092\u53D6\u5F97
73025
- const values = await sheets.getValues(spreadsheetId, "Sheet1!A1:D10");
73054
+ const values = await sheets.getValues("Sheet1!A1:D10");
73026
73055
  console.log(values.values); // 2D array
73027
73056
 
73028
- // \u30BB\u30EB\u5024\u3092\u66F4\u65B0
73029
- await sheets.updateValues(spreadsheetId, "Sheet1!A1:B2", [["\u540D\u524D", "\u30B9\u30B3\u30A2"], ["Alice", "100"]]);
73030
-
73031
- // \u884C\u3092\u8FFD\u52A0
73032
- await sheets.appendValues(spreadsheetId, "Sheet1!A1", [["Bob", "95"], ["Charlie", "88"]]);
73057
+ // \u8907\u6570\u7BC4\u56F2\u3092\u30D0\u30C3\u30C1\u53D6\u5F97
73058
+ const batch = await sheets.batchGetValues(["Sheet1!A:A", "Sheet2!B2:C100"]);
73033
73059
  \`\`\``
73034
73060
  },
73035
73061
  tools: tools18
@@ -73462,12 +73488,12 @@ Authentication is handled automatically via OAuth proxy.`,
73462
73488
  });
73463
73489
 
73464
73490
  // ../connectors/src/connectors/hubspot-oauth/setup.ts
73465
- var requestToolName = `hubspot-oauth_${requestTool11.name}`;
73491
+ var requestToolName2 = `hubspot-oauth_${requestTool11.name}`;
73466
73492
  var hubspotOnboarding = new ConnectorOnboarding({
73467
73493
  connectionSetupInstructions: {
73468
73494
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067HubSpot\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
73469
73495
 
73470
- 1. \`${requestToolName}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
73496
+ 1. \`${requestToolName2}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
73471
73497
  - \`method\`: \`"GET"\`
73472
73498
  - \`path\`: \`"/account-info/v3/details"\`
73473
73499
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306BOAuth\u63A5\u7D9A\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B
@@ -73477,7 +73503,7 @@ var hubspotOnboarding = new ConnectorOnboarding({
73477
73503
  - \u30C4\u30FC\u30EB\u9593\u306F1\u6587\u3060\u3051\u66F8\u3044\u3066\u5373\u6B21\u306E\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u3002\u4E0D\u8981\u306A\u8AAC\u660E\u306F\u7701\u7565\u3057\u3001\u52B9\u7387\u7684\u306B\u9032\u3081\u308B`,
73478
73504
  en: `Follow these steps to set up the HubSpot connection.
73479
73505
 
73480
- 1. Call \`${requestToolName}\` to fetch account info:
73506
+ 1. Call \`${requestToolName2}\` to fetch account info:
73481
73507
  - \`method\`: \`"GET"\`
73482
73508
  - \`path\`: \`"/account-info/v3/details"\`
73483
73509
  2. If an error is returned, ask the user to check the OAuth connection settings
@@ -73751,12 +73777,12 @@ Authentication is handled automatically via OAuth proxy.`,
73751
73777
  });
73752
73778
 
73753
73779
  // ../connectors/src/connectors/stripe-oauth/setup.ts
73754
- var requestToolName2 = `stripe-oauth_${requestTool12.name}`;
73780
+ var requestToolName3 = `stripe-oauth_${requestTool12.name}`;
73755
73781
  var stripeOnboarding = new ConnectorOnboarding({
73756
73782
  connectionSetupInstructions: {
73757
73783
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Stripe\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
73758
73784
 
73759
- 1. \`${requestToolName2}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
73785
+ 1. \`${requestToolName3}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
73760
73786
  - \`method\`: \`"GET"\`
73761
73787
  - \`path\`: \`"/v1/accounts"\`
73762
73788
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306BOAuth\u63A5\u7D9A\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B
@@ -73766,7 +73792,7 @@ var stripeOnboarding = new ConnectorOnboarding({
73766
73792
  - \u30C4\u30FC\u30EB\u9593\u306F1\u6587\u3060\u3051\u66F8\u3044\u3066\u5373\u6B21\u306E\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u3002\u4E0D\u8981\u306A\u8AAC\u660E\u306F\u7701\u7565\u3057\u3001\u52B9\u7387\u7684\u306B\u9032\u3081\u308B`,
73767
73793
  en: `Follow these steps to set up the Stripe connection.
73768
73794
 
73769
- 1. Call \`${requestToolName2}\` to fetch account info:
73795
+ 1. Call \`${requestToolName3}\` to fetch account info:
73770
73796
  - \`method\`: \`"GET"\`
73771
73797
  - \`path\`: \`"/v1/accounts"\`
73772
73798
  2. If an error is returned, ask the user to check the OAuth connection settings
@@ -74041,12 +74067,12 @@ Use this tool for all Stripe API interactions: querying charges, customers, invo
74041
74067
  });
74042
74068
 
74043
74069
  // ../connectors/src/connectors/stripe-api-key/setup.ts
74044
- var requestToolName3 = `stripe-api-key_${requestTool13.name}`;
74070
+ var requestToolName4 = `stripe-api-key_${requestTool13.name}`;
74045
74071
  var stripeApiKeyOnboarding = new ConnectorOnboarding({
74046
74072
  connectionSetupInstructions: {
74047
74073
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Stripe\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
74048
74074
 
74049
- 1. \`${requestToolName3}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u6B8B\u9AD8\u3092\u53D6\u5F97\u3059\u308B:
74075
+ 1. \`${requestToolName4}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u6B8B\u9AD8\u3092\u53D6\u5F97\u3059\u308B:
74050
74076
  - \`method\`: \`"GET"\`
74051
74077
  - \`path\`: \`"/v1/balance"\`
74052
74078
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306BAPI\u30AD\u30FC\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B\uFF08Secret API Key\u307E\u305F\u306FRestricted API Key\u304C\u6B63\u3057\u304F\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u308B\u304B\uFF09
@@ -74056,7 +74082,7 @@ var stripeApiKeyOnboarding = new ConnectorOnboarding({
74056
74082
  - \u30C4\u30FC\u30EB\u9593\u306F1\u6587\u3060\u3051\u66F8\u3044\u3066\u5373\u6B21\u306E\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u3002\u4E0D\u8981\u306A\u8AAC\u660E\u306F\u7701\u7565\u3057\u3001\u52B9\u7387\u7684\u306B\u9032\u3081\u308B`,
74057
74083
  en: `Follow these steps to set up the Stripe connection.
74058
74084
 
74059
- 1. Call \`${requestToolName3}\` to fetch account balance:
74085
+ 1. Call \`${requestToolName4}\` to fetch account balance:
74060
74086
  - \`method\`: \`"GET"\`
74061
74087
  - \`path\`: \`"/v1/balance"\`
74062
74088
  2. If an error is returned, ask the user to check the API key settings (verify that the Secret API Key or Restricted API Key is configured correctly)
@@ -74066,11 +74092,11 @@ var stripeApiKeyOnboarding = new ConnectorOnboarding({
74066
74092
  - Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`
74067
74093
  },
74068
74094
  dataOverviewInstructions: {
74069
- en: `1. Call ${requestToolName3} with GET /v1/customers?limit=5 to explore customers structure
74070
- 2. Call ${requestToolName3} with GET /v1/charges?limit=5 to explore charges structure
74095
+ en: `1. Call ${requestToolName4} with GET /v1/customers?limit=5 to explore customers structure
74096
+ 2. Call ${requestToolName4} with GET /v1/charges?limit=5 to explore charges structure
74071
74097
  3. Explore other endpoints (invoices, subscriptions, products) as needed`,
74072
- ja: `1. ${requestToolName3} \u3067 GET /v1/customers?limit=5 \u3092\u547C\u3073\u51FA\u3057\u3001\u9867\u5BA2\u306E\u69CB\u9020\u3092\u78BA\u8A8D
74073
- 2. ${requestToolName3} \u3067 GET /v1/charges?limit=5 \u3092\u547C\u3073\u51FA\u3057\u3001\u8AB2\u91D1\u306E\u69CB\u9020\u3092\u78BA\u8A8D
74098
+ ja: `1. ${requestToolName4} \u3067 GET /v1/customers?limit=5 \u3092\u547C\u3073\u51FA\u3057\u3001\u9867\u5BA2\u306E\u69CB\u9020\u3092\u78BA\u8A8D
74099
+ 2. ${requestToolName4} \u3067 GET /v1/charges?limit=5 \u3092\u547C\u3073\u51FA\u3057\u3001\u8AB2\u91D1\u306E\u69CB\u9020\u3092\u78BA\u8A8D
74074
74100
  3. \u5FC5\u8981\u306B\u5FDC\u3058\u3066\u4ED6\u306E\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\uFF08\u8ACB\u6C42\u66F8\u3001\u30B5\u30D6\u30B9\u30AF\u30EA\u30D7\u30B7\u30E7\u30F3\u3001\u5546\u54C1\uFF09\u3092\u63A2\u7D22`
74075
74101
  }
74076
74102
  });
@@ -74355,7 +74381,7 @@ Authentication is handled automatically via OAuth proxy.
74355
74381
  });
74356
74382
 
74357
74383
  // ../connectors/src/connectors/airtable-oauth/setup.ts
74358
- var requestToolName4 = `airtable-oauth_${requestTool14.name}`;
74384
+ var requestToolName5 = `airtable-oauth_${requestTool14.name}`;
74359
74385
  var airtableOauthOnboarding = new ConnectorOnboarding({
74360
74386
  connectionSetupInstructions: {
74361
74387
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Airtable OAuth\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
@@ -74365,7 +74391,7 @@ var airtableOauthOnboarding = new ConnectorOnboarding({
74365
74391
  3. \`updateConnectionParameters\` \u3092\u547C\u3073\u51FA\u3059:
74366
74392
  - \`parameterSlug\`: \`"base-id"\`
74367
74393
  - \`value\`: \u62BD\u51FA\u3057\u305F\u30D9\u30FC\u30B9ID
74368
- 4. \`${requestToolName4}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30D9\u30FC\u30B9\u306E\u30C6\u30FC\u30D6\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B:
74394
+ 4. \`${requestToolName5}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30D9\u30FC\u30B9\u306E\u30C6\u30FC\u30D6\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B:
74369
74395
  - \`method\`: \`"GET"\`
74370
74396
  - \`path\`: \`"/meta/bases/{baseId}/tables"\`
74371
74397
  5. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306B\u30D9\u30FC\u30B9\u306E\u5171\u6709\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B
@@ -74380,7 +74406,7 @@ var airtableOauthOnboarding = new ConnectorOnboarding({
74380
74406
  3. Call \`updateConnectionParameters\`:
74381
74407
  - \`parameterSlug\`: \`"base-id"\`
74382
74408
  - \`value\`: The extracted base ID
74383
- 4. Call \`${requestToolName4}\` to fetch the base's table list:
74409
+ 4. Call \`${requestToolName5}\` to fetch the base's table list:
74384
74410
  - \`method\`: \`"GET"\`
74385
74411
  - \`path\`: \`"/meta/bases/{baseId}/tables"\`
74386
74412
  5. If an error is returned, ask the user to check the base sharing settings
@@ -76958,6 +76984,7 @@ Use this tool for all Shopify API interactions: listing products, orders, custom
76958
76984
  method: "POST",
76959
76985
  headers: { "Content-Type": "application/json" },
76960
76986
  body: JSON.stringify({
76987
+ grant_type: "client_credentials",
76961
76988
  client_id: clientId,
76962
76989
  client_secret: clientSecret
76963
76990
  })
@@ -77281,12 +77308,12 @@ Authentication is handled automatically via OAuth proxy.`,
77281
77308
  });
77282
77309
 
77283
77310
  // ../connectors/src/connectors/shopify-oauth/setup.ts
77284
- var requestToolName5 = `shopify-oauth_${requestTool22.name}`;
77311
+ var requestToolName6 = `shopify-oauth_${requestTool22.name}`;
77285
77312
  var shopifyOauthOnboarding = new ConnectorOnboarding({
77286
77313
  connectionSetupInstructions: {
77287
77314
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Shopify\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
77288
77315
 
77289
- 1. \`${requestToolName5}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30B7\u30E7\u30C3\u30D7\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
77316
+ 1. \`${requestToolName6}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30B7\u30E7\u30C3\u30D7\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
77290
77317
  - \`method\`: \`"GET"\`
77291
77318
  - \`path\`: \`"/admin/api/2024-10/shop.json"\`
77292
77319
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306BOAuth\u63A5\u7D9A\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B
@@ -77296,7 +77323,7 @@ var shopifyOauthOnboarding = new ConnectorOnboarding({
77296
77323
  - \u30C4\u30FC\u30EB\u9593\u306F1\u6587\u3060\u3051\u66F8\u3044\u3066\u5373\u6B21\u306E\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u3002\u4E0D\u8981\u306A\u8AAC\u660E\u306F\u7701\u7565\u3057\u3001\u52B9\u7387\u7684\u306B\u9032\u3081\u308B`,
77297
77324
  en: `Follow these steps to set up the Shopify connection.
77298
77325
 
77299
- 1. Call \`${requestToolName5}\` to fetch shop info:
77326
+ 1. Call \`${requestToolName6}\` to fetch shop info:
77300
77327
  - \`method\`: \`"GET"\`
77301
77328
  - \`path\`: \`"/admin/api/2024-10/shop.json"\`
77302
77329
  2. If an error is returned, ask the user to check the OAuth connection settings
@@ -79553,12 +79580,12 @@ Pagination uses cursor-based start_cursor and page_size (max 100).`,
79553
79580
  });
79554
79581
 
79555
79582
  // ../connectors/src/connectors/notion-oauth/setup.ts
79556
- var requestToolName6 = `notion-oauth_${requestTool28.name}`;
79583
+ var requestToolName7 = `notion-oauth_${requestTool28.name}`;
79557
79584
  var notionOauthOnboarding = new ConnectorOnboarding({
79558
79585
  connectionSetupInstructions: {
79559
79586
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Notion\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
79560
79587
 
79561
- 1. \`${requestToolName6}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30DC\u30C3\u30C8\u30E6\u30FC\u30B6\u30FC\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
79588
+ 1. \`${requestToolName7}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30DC\u30C3\u30C8\u30E6\u30FC\u30B6\u30FC\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
79562
79589
  - \`method\`: \`"GET"\`
79563
79590
  - \`path\`: \`"/users/me"\`
79564
79591
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306BOAuth\u63A5\u7D9A\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B
@@ -79568,7 +79595,7 @@ var notionOauthOnboarding = new ConnectorOnboarding({
79568
79595
  - \u30C4\u30FC\u30EB\u9593\u306F1\u6587\u3060\u3051\u66F8\u3044\u3066\u5373\u6B21\u306E\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u3002\u4E0D\u8981\u306A\u8AAC\u660E\u306F\u7701\u7565\u3057\u3001\u52B9\u7387\u7684\u306B\u9032\u3081\u308B`,
79569
79596
  en: `Follow these steps to set up the Notion connection.
79570
79597
 
79571
- 1. Call \`${requestToolName6}\` to fetch bot user info:
79598
+ 1. Call \`${requestToolName7}\` to fetch bot user info:
79572
79599
  - \`method\`: \`"GET"\`
79573
79600
  - \`path\`: \`"/users/me"\`
79574
79601
  2. If an error is returned, ask the user to check the OAuth connection settings
@@ -82135,7 +82162,7 @@ All paths are relative to https://gmail.googleapis.com/gmail/v1/users. Use '/me'
82135
82162
  });
82136
82163
 
82137
82164
  // ../connectors/src/connectors/gmail/setup.ts
82138
- var requestToolName7 = `gmail-service-account_${requestTool35.name}`;
82165
+ var requestToolName8 = `gmail-service-account_${requestTool35.name}`;
82139
82166
  var gmailOnboarding = new ConnectorOnboarding({
82140
82167
  connectionSetupInstructions: {
82141
82168
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Gmail\uFF08\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8\uFF09\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002\u63A5\u7D9A\u4F5C\u6210\u6642\u306B\u306F\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8JSON\u306E\u307F\u304C\u8A2D\u5B9A\u6E08\u307F\u3067\u3001\u59D4\u4EFB\u5BFE\u8C61\u306E\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u306F\u3053\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u4E2D\u306B\u53D6\u5F97\u3057\u307E\u3059\u3002
@@ -82147,14 +82174,14 @@ var gmailOnboarding = new ConnectorOnboarding({
82147
82174
  2. \u53D7\u3051\u53D6\u3063\u305F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u3092 \`updateConnectionParameters\` \u3067\u4FDD\u5B58\u3059\u308B:
82148
82175
  - \`parameterSlug\`: \`"delegated-user-email"\`
82149
82176
  - \`options\`: \`[{ value: <\u5165\u529B\u3055\u308C\u305F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9>, label: <\u540C\u3058\u5024> }]\`\uFF081\u4EF6\u306E\u307F\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u306F\u81EA\u52D5\u9078\u629E\u3055\u308C\u308B\uFF09
82150
- 3. \`${requestToolName7}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3092\u53D6\u5F97\u3059\u308B:
82177
+ 3. \`${requestToolName8}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3092\u53D6\u5F97\u3059\u308B:
82151
82178
  - \`method\`: \`"GET"\`
82152
82179
  - \`path\`: \`"/me/profile"\`
82153
82180
  4. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u4EE5\u4E0B\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u30E6\u30FC\u30B6\u30FC\u306B\u4F1D\u3048\u308B:
82154
82181
  - \u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u30C9\u30E1\u30A4\u30F3\u5168\u4F53\u306E\u59D4\u4EFB\u304C\u6709\u52B9\u304B
82155
82182
  - Google Workspace\u7BA1\u7406\u30B3\u30F3\u30BD\u30FC\u30EB\u3067Gmail API\u30B9\u30B3\u30FC\u30D7\u304C\u8A31\u53EF\u3055\u308C\u3066\u3044\u308B\u304B
82156
82183
  - \u5165\u529B\u3055\u308C\u305F\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9\u304C\u6B63\u3057\u3044\u304B
82157
- 5. \`${requestToolName7}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E9\u30D9\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B:
82184
+ 5. \`${requestToolName8}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E9\u30D9\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B:
82158
82185
  - \`method\`: \`"GET"\`
82159
82186
  - \`path\`: \`"/me/labels"\`
82160
82187
 
@@ -82170,14 +82197,14 @@ var gmailOnboarding = new ConnectorOnboarding({
82170
82197
  2. Save the email via \`updateConnectionParameters\`:
82171
82198
  - \`parameterSlug\`: \`"delegated-user-email"\`
82172
82199
  - \`options\`: \`[{ value: <entered email>, label: <same value> }]\` (a single option is auto-selected)
82173
- 3. Call \`${requestToolName7}\` to get the user's profile:
82200
+ 3. Call \`${requestToolName8}\` to get the user's profile:
82174
82201
  - \`method\`: \`"GET"\`
82175
82202
  - \`path\`: \`"/me/profile"\`
82176
82203
  4. If an error is returned, ask the user to verify:
82177
82204
  - Domain-wide delegation is enabled for the service account
82178
82205
  - Gmail API scope is authorized in Google Workspace admin console
82179
82206
  - The entered email address is correct
82180
- 5. Call \`${requestToolName7}\` to get the label list:
82207
+ 5. Call \`${requestToolName8}\` to get the label list:
82181
82208
  - \`method\`: \`"GET"\`
82182
82209
  - \`path\`: \`"/me/labels"\`
82183
82210
 
@@ -82529,16 +82556,16 @@ All paths are relative to https://gmail.googleapis.com/gmail/v1/users. Use '/me'
82529
82556
  });
82530
82557
 
82531
82558
  // ../connectors/src/connectors/gmail-oauth/setup.ts
82532
- var requestToolName8 = `gmail-oauth_${requestTool36.name}`;
82559
+ var requestToolName9 = `gmail-oauth_${requestTool36.name}`;
82533
82560
  var gmailOnboarding2 = new ConnectorOnboarding({
82534
82561
  connectionSetupInstructions: {
82535
82562
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Gmail\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
82536
82563
 
82537
- 1. \`${requestToolName8}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3092\u53D6\u5F97\u3059\u308B:
82564
+ 1. \`${requestToolName9}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E6\u30FC\u30B6\u30FC\u306E\u30D7\u30ED\u30D5\u30A3\u30FC\u30EB\u3092\u53D6\u5F97\u3059\u308B:
82538
82565
  - \`method\`: \`"GET"\`
82539
82566
  - \`path\`: \`"/me/profile"\`
82540
82567
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001OAuth\u306E\u8A8D\u8A3C\u304C\u6B63\u3057\u304F\u5B8C\u4E86\u3057\u3066\u3044\u308B\u304B\u78BA\u8A8D\u3059\u308B\u3088\u3046\u30E6\u30FC\u30B6\u30FC\u306B\u4F1D\u3048\u308B
82541
- 3. \`${requestToolName8}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E9\u30D9\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B:
82568
+ 3. \`${requestToolName9}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u30E9\u30D9\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B:
82542
82569
  - \`method\`: \`"GET"\`
82543
82570
  - \`path\`: \`"/me/labels"\`
82544
82571
 
@@ -82547,11 +82574,11 @@ var gmailOnboarding2 = new ConnectorOnboarding({
82547
82574
  - \u30C4\u30FC\u30EB\u9593\u306F1\u6587\u3060\u3051\u66F8\u3044\u3066\u5373\u6B21\u306E\u30C4\u30FC\u30EB\u547C\u3073\u51FA\u3057\u3002\u4E0D\u8981\u306A\u8AAC\u660E\u306F\u7701\u7565\u3057\u3001\u52B9\u7387\u7684\u306B\u9032\u3081\u308B`,
82548
82575
  en: `Follow these steps to set up the Gmail connection.
82549
82576
 
82550
- 1. Call \`${requestToolName8}\` to get the user's profile:
82577
+ 1. Call \`${requestToolName9}\` to get the user's profile:
82551
82578
  - \`method\`: \`"GET"\`
82552
82579
  - \`path\`: \`"/me/profile"\`
82553
82580
  2. If an error is returned, ask the user to verify that OAuth authentication completed correctly
82554
- 3. Call \`${requestToolName8}\` to get the label list:
82581
+ 3. Call \`${requestToolName9}\` to get the label list:
82555
82582
  - \`method\`: \`"GET"\`
82556
82583
  - \`path\`: \`"/me/labels"\`
82557
82584
 
@@ -83754,12 +83781,12 @@ Zendesk uses cursor-based pagination with page[size] and page[after] parameters.
83754
83781
  });
83755
83782
 
83756
83783
  // ../connectors/src/connectors/zendesk-oauth/setup.ts
83757
- var requestToolName9 = `zendesk-oauth_${requestTool39.name}`;
83784
+ var requestToolName10 = `zendesk-oauth_${requestTool39.name}`;
83758
83785
  var zendeskOauthOnboarding = new ConnectorOnboarding({
83759
83786
  connectionSetupInstructions: {
83760
83787
  en: `Follow these steps to set up the Zendesk connection.
83761
83788
 
83762
- 1. Call \`${requestToolName9}\` to fetch account info:
83789
+ 1. Call \`${requestToolName10}\` to fetch account info:
83763
83790
  - \`method\`: \`"GET"\`
83764
83791
  - \`path\`: \`"/api/v2/account/settings.json"\`
83765
83792
  2. If an error is returned, ask the user to check the OAuth connection settings
@@ -83769,7 +83796,7 @@ var zendeskOauthOnboarding = new ConnectorOnboarding({
83769
83796
  - Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`,
83770
83797
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Zendesk\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
83771
83798
 
83772
- 1. \`${requestToolName9}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
83799
+ 1. \`${requestToolName10}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3092\u53D6\u5F97\u3059\u308B:
83773
83800
  - \`method\`: \`"GET"\`
83774
83801
  - \`path\`: \`"/api/v2/account/settings.json"\`
83775
83802
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306BOAuth\u63A5\u7D9A\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B
@@ -84394,12 +84421,12 @@ Search endpoints (contacts/search, conversations/search) use POST with a query o
84394
84421
  });
84395
84422
 
84396
84423
  // ../connectors/src/connectors/intercom-oauth/setup.ts
84397
- var requestToolName10 = `intercom-oauth_${requestTool41.name}`;
84424
+ var requestToolName11 = `intercom-oauth_${requestTool41.name}`;
84398
84425
  var intercomOauthOnboarding = new ConnectorOnboarding({
84399
84426
  connectionSetupInstructions: {
84400
84427
  en: `Follow these steps to set up the Intercom connection.
84401
84428
 
84402
- 1. Call \`${requestToolName10}\` to verify the connection:
84429
+ 1. Call \`${requestToolName11}\` to verify the connection:
84403
84430
  - \`method\`: \`"GET"\`
84404
84431
  - \`path\`: \`"/me"\`
84405
84432
  2. If an error is returned, ask the user to check the OAuth connection settings
@@ -84409,7 +84436,7 @@ var intercomOauthOnboarding = new ConnectorOnboarding({
84409
84436
  - Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`,
84410
84437
  ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Intercom\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
84411
84438
 
84412
- 1. \`${requestToolName10}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u63A5\u7D9A\u3092\u78BA\u8A8D\u3059\u308B:
84439
+ 1. \`${requestToolName11}\` \u3092\u547C\u3073\u51FA\u3057\u3066\u3001\u63A5\u7D9A\u3092\u78BA\u8A8D\u3059\u308B:
84413
84440
  - \`method\`: \`"GET"\`
84414
84441
  - \`path\`: \`"/me"\`
84415
84442
  2. \u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u3001\u30E6\u30FC\u30B6\u30FC\u306BOAuth\u63A5\u7D9A\u306E\u8A2D\u5B9A\u3092\u78BA\u8A8D\u3059\u308B\u3088\u3046\u4F1D\u3048\u308B
@@ -85893,7 +85920,7 @@ var parameters61 = {
85893
85920
  organizationSlug: new ParameterDefinition({
85894
85921
  slug: "organization-slug",
85895
85922
  name: "Sentry Organization Slug",
85896
- description: "The slug of your Sentry organization (e.g., 'my-org'). Found in your Sentry URL: https://sentry.io/organizations/{slug}/",
85923
+ description: "The slug of your Sentry organization (e.g., 'my-org'). Found in your Sentry URL: https://{slug}.sentry.io/",
85897
85924
  envVarBaseKey: "SENTRY_ORGANIZATION_SLUG",
85898
85925
  type: "text",
85899
85926
  secret: false,
@@ -86599,11 +86626,11 @@ var influxdbOnboarding = new ConnectorOnboarding({
86599
86626
 
86600
86627
  #### Confirm the Database (or Bucket) Name
86601
86628
  - InfluxDB 3: use the database name
86602
- - InfluxDB 2: use the bucket name (buckets act as databases in the v1/v3 compatibility endpoints)
86629
+ - InfluxDB 2 (includes InfluxDB Cloud on \`*.cloud2.influxdata.com\`): use the bucket name (buckets act as databases in the v1/v3 compatibility endpoints)
86603
86630
 
86604
- #### Organization (InfluxDB 2 only)
86605
- - If you are on InfluxDB 2, set the Organization parameter to the org that owns the bucket
86606
- - For InfluxDB 3 Cloud you can leave Organization blank`,
86631
+ #### Organization
86632
+ - InfluxDB 2: set the Organization parameter to the org that owns the bucket (required for Flux queries and writes)
86633
+ - InfluxDB 3 Cloud Serverless: you can leave Organization blank when only using SQL`,
86607
86634
  ja: `#### API \u30C8\u30FC\u30AF\u30F3\u306E\u767A\u884C
86608
86635
  1. InfluxDB Cloud / OSS \u306B\u30B5\u30A4\u30F3\u30A4\u30F3
86609
86636
  2. Load Data \u2192 API Tokens \u2192 Generate API Token
@@ -86612,19 +86639,37 @@ var influxdbOnboarding = new ConnectorOnboarding({
86612
86639
 
86613
86640
  #### Database (\u307E\u305F\u306F Bucket) \u540D\u306E\u78BA\u8A8D
86614
86641
  - InfluxDB 3: database \u540D\u3092\u4F7F\u7528
86615
- - InfluxDB 2: bucket \u540D\u3092\u4F7F\u7528\uFF08v1/v3 \u4E92\u63DB\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3067\u306F bucket \u304C database \u3068\u3057\u3066\u6271\u308F\u308C\u308B\uFF09
86642
+ - InfluxDB 2\uFF08\`*.cloud2.influxdata.com\` \u306E InfluxDB Cloud \u3092\u542B\u3080\uFF09: bucket \u540D\u3092\u4F7F\u7528\uFF08v1/v3 \u4E92\u63DB\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3067\u306F bucket \u304C database \u3068\u3057\u3066\u6271\u308F\u308C\u308B\uFF09
86616
86643
 
86617
- #### Organization\uFF08InfluxDB 2 \u306E\u307F\uFF09
86618
- - InfluxDB 2 \u306E\u5834\u5408\u3001bucket \u3092\u4FDD\u6709\u3059\u308B\u7D44\u7E54\u540D\u3092 Organization \u30D1\u30E9\u30E1\u30FC\u30BF\u306B\u8A2D\u5B9A
86619
- - InfluxDB 3 Cloud \u306E\u5834\u5408\u306F\u7A7A\u306E\u307E\u307E\u3067\u554F\u984C\u306A\u3044`
86644
+ #### Organization
86645
+ - InfluxDB 2: bucket \u3092\u4FDD\u6709\u3059\u308B\u7D44\u7E54\u540D\u3092 Organization \u30D1\u30E9\u30E1\u30FC\u30BF\u306B\u8A2D\u5B9A\uFF08Flux \u30AF\u30A8\u30EA\u3068\u66F8\u304D\u8FBC\u307F\u306B\u306F\u5FC5\u9808\uFF09
86646
+ - InfluxDB 3 Cloud Serverless: SQL \u306E\u307F\u3092\u4F7F\u3046\u5834\u5408\u306F\u7A7A\u306E\u307E\u307E\u3067\u554F\u984C\u306A\u3044`
86620
86647
  },
86621
86648
  dataOverviewInstructions: {
86622
- en: `1. For InfluxDB 3: call influxdb_request with POST /api/v3/query_sql, body { "db": "<database>", "q": "SHOW TABLES" } to list measurements
86623
- 2. For InfluxDB 3: inspect a sample measurement with POST /api/v3/query_sql, body { "db": "<database>", "q": "SELECT * FROM <measurement> ORDER BY time DESC LIMIT 5" }
86624
- 3. For InfluxDB 2: call influxdb_request with POST /api/v2/query?org=<org>, contentType 'application/vnd.flux', body 'buckets()' to list buckets, then 'from(bucket:"<bucket>") |> range(start: -1h) |> limit(n:5)' to inspect data`,
86625
- ja: `1. InfluxDB 3 \u306E\u5834\u5408: influxdb_request \u3067 POST /api/v3/query_sql\u3001body { "db": "<database>", "q": "SHOW TABLES" } \u3092\u5B9F\u884C\u3057 measurement \u4E00\u89A7\u3092\u53D6\u5F97
86626
- 2. InfluxDB 3 \u306E\u5834\u5408: POST /api/v3/query_sql\u3001body { "db": "<database>", "q": "SELECT * FROM <measurement> ORDER BY time DESC LIMIT 5" } \u3067\u4EE3\u8868\u7684\u306A measurement \u306E\u69CB\u9020\u3092\u78BA\u8A8D
86627
- 3. InfluxDB 2 \u306E\u5834\u5408: POST /api/v2/query?org=<org>\u3001contentType 'application/vnd.flux'\u3001body 'buckets()' \u3067 bucket \u4E00\u89A7\u3092\u53D6\u5F97\u3057\u3001\u7D9A\u3044\u3066 'from(bucket:"<bucket>") |> range(start: -1h) |> limit(n:5)' \u3067\u30C7\u30FC\u30BF\u3092\u78BA\u8A8D`
86649
+ en: `The instance may be either InfluxDB 3 (supports SQL) or InfluxDB 2 (Flux only; includes InfluxDB Cloud on '*.cloud2.influxdata.com'). Detect the variant first, then pick the matching endpoints.
86650
+
86651
+ 1. Probe for InfluxDB 3: call influxdb_request with POST /api/v3/query_sql, body { "db": "<database>", "q": "SELECT 1" }
86652
+ - 200 with JSON rows \u2192 InfluxDB 3. Continue with SQL.
86653
+ - 405 Method Not Allowed, or an HTML body like "<html>...405 Not Allowed..." \u2192 InfluxDB 2. Fall back to Flux (step 3).
86654
+ 2. InfluxDB 3 data overview:
86655
+ a. POST /api/v3/query_sql, body { "db": "<database>", "q": "SHOW TABLES" } to list measurements
86656
+ b. POST /api/v3/query_sql, body { "db": "<database>", "q": "SELECT * FROM <measurement> ORDER BY time DESC LIMIT 5" } to inspect a sample
86657
+ 3. InfluxDB 2 data overview (Organization parameter required):
86658
+ a. POST /api/v2/query?org=<org>, contentType 'application/vnd.flux', body 'buckets()' to list buckets
86659
+ b. POST /api/v2/query?org=<org>, contentType 'application/vnd.flux', body 'from(bucket:"<bucket>") |> range(start: -1h) |> limit(n:5)' to inspect data
86660
+ - If the Organization parameter was not provided but v3 probing failed, ask the user to set it using updateConnectionParameters before continuing.`,
86661
+ ja: `\u63A5\u7D9A\u5148\u306F InfluxDB 3\uFF08SQL \u5BFE\u5FDC\uFF09\u3068 InfluxDB 2\uFF08Flux \u306E\u307F\u3002\`*.cloud2.influxdata.com\` \u306E InfluxDB Cloud \u3092\u542B\u3080\uFF09\u306E\u3069\u3061\u3089\u306E\u53EF\u80FD\u6027\u3082\u3042\u308A\u307E\u3059\u3002\u307E\u305A\u30D0\u30EA\u30A2\u30F3\u30C8\u3092\u5224\u5225\u3057\u3001\u305D\u308C\u306B\u5408\u3046\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002
86662
+
86663
+ 1. InfluxDB 3 \u306E\u5224\u5225: influxdb_request \u3067 POST /api/v3/query_sql\u3001body { "db": "<database>", "q": "SELECT 1" } \u3092\u5B9F\u884C
86664
+ - 200 + JSON \u884C\u304C\u8FD4\u308B \u2192 InfluxDB 3\u3002\u305D\u306E\u307E\u307E SQL \u3067\u7D9A\u884C\u3002
86665
+ - 405 Method Not Allowed\u3001\u307E\u305F\u306F "<html>...405 Not Allowed..." \u306E\u3088\u3046\u306A HTML \u672C\u6587\u304C\u8FD4\u308B \u2192 InfluxDB 2\u3002Flux \u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\uFF08\u624B\u9806 3\uFF09\u3002
86666
+ 2. InfluxDB 3 \u306E\u5834\u5408\u306E\u30C7\u30FC\u30BF\u6982\u8981:
86667
+ a. POST /api/v3/query_sql\u3001body { "db": "<database>", "q": "SHOW TABLES" } \u3067 measurement \u4E00\u89A7\u3092\u53D6\u5F97
86668
+ b. POST /api/v3/query_sql\u3001body { "db": "<database>", "q": "SELECT * FROM <measurement> ORDER BY time DESC LIMIT 5" } \u3067\u4EE3\u8868\u7684\u306A measurement \u3092\u78BA\u8A8D
86669
+ 3. InfluxDB 2 \u306E\u5834\u5408\u306E\u30C7\u30FC\u30BF\u6982\u8981\uFF08Organization \u30D1\u30E9\u30E1\u30FC\u30BF\u5FC5\u9808\uFF09:
86670
+ a. POST /api/v2/query?org=<org>\u3001contentType 'application/vnd.flux'\u3001body 'buckets()' \u3067 bucket \u4E00\u89A7\u3092\u53D6\u5F97
86671
+ b. POST /api/v2/query?org=<org>\u3001contentType 'application/vnd.flux'\u3001body 'from(bucket:"<bucket>") |> range(start: -1h) |> limit(n:5)' \u3067\u30C7\u30FC\u30BF\u3092\u78BA\u8A8D
86672
+ - Organization \u30D1\u30E9\u30E1\u30FC\u30BF\u304C\u672A\u8A2D\u5B9A\u3067 v3 \u5224\u5225\u3082\u5931\u6557\u3057\u305F\u5834\u5408\u306F\u3001updateConnectionParameters \u3067\u30E6\u30FC\u30B6\u30FC\u306B\u8A2D\u5B9A\u3092\u4FC3\u3057\u3066\u304B\u3089\u7D9A\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002`
86628
86673
  }
86629
86674
  });
86630
86675
 
@@ -86633,7 +86678,7 @@ var parameters63 = {
86633
86678
  url: new ParameterDefinition({
86634
86679
  slug: "url",
86635
86680
  name: "InfluxDB URL",
86636
- description: "The base URL of your InfluxDB instance (e.g., 'https://us-east-1-1.aws.cloud2.influxdata.com' for InfluxDB Cloud). Do not include a trailing slash.",
86681
+ description: "The base URL of your InfluxDB instance. Do not include a trailing slash. Works with both InfluxDB 2 (e.g., InfluxDB Cloud on '*.cloud2.influxdata.com', OSS 2.x) and InfluxDB 3 (Cloud Serverless, Enterprise, OSS 3.x).",
86637
86682
  envVarBaseKey: "INFLUXDB_URL",
86638
86683
  type: "text",
86639
86684
  secret: false,
@@ -86660,7 +86705,7 @@ var parameters63 = {
86660
86705
  org: new ParameterDefinition({
86661
86706
  slug: "org",
86662
86707
  name: "Organization",
86663
- description: "The InfluxDB organization name. Required for InfluxDB 2.x Flux queries and writes; optional for InfluxDB 3.",
86708
+ description: "The InfluxDB organization name. Required for InfluxDB 2 Flux queries and writes (including InfluxDB Cloud on '*.cloud2.influxdata.com'). Optional for InfluxDB 3 when only using SQL.",
86664
86709
  envVarBaseKey: "INFLUXDB_ORG",
86665
86710
  type: "text",
86666
86711
  secret: false,
@@ -86752,10 +86797,17 @@ For read-only data exploration prefer SQL (InfluxDB 3) or InfluxQL queries \u201
86752
86797
  }
86753
86798
  if (!response.ok) {
86754
86799
  let errorMessage = `HTTP ${response.status} ${response.statusText}`;
86800
+ const bodyText = typeof data === "string" ? data : void 0;
86801
+ const isHtml = resContentType.includes("text/html") || bodyText !== void 0 && bodyText.trimStart().startsWith("<");
86755
86802
  if (data && typeof data === "object" && !Array.isArray(data) && typeof data.message === "string") {
86756
86803
  errorMessage = data.message;
86757
- } else if (typeof data === "string" && data) {
86758
- errorMessage = data;
86804
+ } else if (bodyText) {
86805
+ errorMessage = isHtml ? bodyText.replace(/\s+/g, " ").slice(0, 200) : bodyText;
86806
+ }
86807
+ const hitsV3Path = path5.includes("/api/v3/");
86808
+ const looksLikeMissingV3 = hitsV3Path && (response.status === 405 || response.status === 404 || isHtml);
86809
+ if (looksLikeMissingV3) {
86810
+ 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'.";
86759
86811
  }
86760
86812
  return { success: false, error: errorMessage };
86761
86813
  }
@@ -86777,14 +86829,22 @@ var influxdbConnector = new ConnectorPlugin({
86777
86829
  authType: AUTH_TYPES.API_KEY,
86778
86830
  name: "InfluxDB",
86779
86831
  description: "Connect to InfluxDB (Cloud or OSS) to query time-series data with SQL, InfluxQL, or Flux and to write line protocol.",
86780
- iconUrl: "https://upload.wikimedia.org/wikipedia/commons/b/b2/Influxdb_logo.svg",
86832
+ iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/J1JauVRNmahSVTVrpPfQK/18350d8d3f2dc3be25e8e36ee52914a0/influxdb.png",
86781
86833
  parameters: parameters63,
86782
86834
  releaseFlag: { dev1: true, dev2: false, prod: false },
86783
86835
  onboarding: influxdbOnboarding,
86784
86836
  systemPrompt: {
86785
- en: `### Tools
86837
+ en: `### Variant Detection
86838
+
86839
+ The configured instance may be **InfluxDB 3** (supports SQL via \`/api/v3/query_sql\`) or **InfluxDB 2** (Flux only; includes InfluxDB Cloud on \`*.cloud2.influxdata.com\`). Always probe first, then use the matching endpoints:
86786
86840
 
86787
- - \`influxdb_request\`: The only way to call the InfluxDB HTTP API. Use it to run SQL / InfluxQL / Flux queries, write line protocol, and inspect buckets / databases. Authentication (\`Authorization: Token {token}\`) and the instance URL are configured automatically. For InfluxDB 3 prefer SQL (\`POST /api/v3/query_sql\`) \u2014 it returns JSON rows that are directly usable. For InfluxDB 2 use Flux (\`POST /api/v2/query?org={org}\`) \u2014 the response is annotated CSV. Writes use \`POST /api/v3/write_lp?db={db}\` (v3) or \`POST /api/v2/write?org={org}&bucket={bucket}\` (v2) with a line-protocol body and \`contentType\` set to \`text/plain; charset=utf-8\`.
86841
+ 1. Call \`influxdb_request\` POST \`/api/v3/query_sql\` with body \`{ "db": "<database>", "q": "SELECT 1" }\`
86842
+ 2. 200 + JSON rows \u2192 InfluxDB 3. Use SQL endpoints.
86843
+ 3. 405 Method Not Allowed or HTML body (e.g. \`<html>...405 Not Allowed...</html>\`) \u2192 InfluxDB 2. Use Flux via \`/api/v2/query?org={org}\`. Require the \`org\` parameter; if missing, ask the user via \`updateConnectionParameters\`.
86844
+
86845
+ ### Tools
86846
+
86847
+ - \`influxdb_request\`: The only way to call the InfluxDB HTTP API. Use it to run SQL / InfluxQL / Flux queries, write line protocol, and inspect buckets / databases. Authentication (\`Authorization: Token {token}\`) and the instance URL are configured automatically. On InfluxDB 3 prefer SQL (\`POST /api/v3/query_sql\`) \u2014 it returns JSON rows that are directly usable. On InfluxDB 2 use Flux (\`POST /api/v2/query?org={org}\`) \u2014 the response is annotated CSV. Writes use \`POST /api/v3/write_lp?db={db}\` (v3) or \`POST /api/v2/write?org={org}&bucket={bucket}\` (v2) with a line-protocol body and \`contentType\` set to \`text/plain; charset=utf-8\`.
86788
86848
 
86789
86849
  ### Business Logic
86790
86850
 
@@ -86845,7 +86905,15 @@ export default async function handler(c: Context) {
86845
86905
  - Time filtering uses standard SQL \`time\` column comparisons (\`time >= now() - INTERVAL '...' \`)
86846
86906
  - Aggregates: \`AVG\`, \`SUM\`, \`MIN\`, \`MAX\`, \`COUNT\`; bucket time with \`date_bin('5 minutes', time)\`
86847
86907
  - List measurements: \`SHOW TABLES\`; list columns: \`SHOW COLUMNS FROM <measurement>\``,
86848
- ja: `### \u30C4\u30FC\u30EB
86908
+ ja: `### \u30D0\u30EA\u30A2\u30F3\u30C8\u5224\u5225
86909
+
86910
+ \u63A5\u7D9A\u5148\u306F **InfluxDB 3**\uFF08\`/api/v3/query_sql\` \u306E SQL \u5BFE\u5FDC\uFF09\u3068 **InfluxDB 2**\uFF08Flux \u306E\u307F\u3002\`*.cloud2.influxdata.com\` \u306E InfluxDB Cloud \u3092\u542B\u3080\uFF09\u306E\u3069\u3061\u3089\u306E\u53EF\u80FD\u6027\u3082\u3042\u308A\u307E\u3059\u3002\u5FC5\u305A\u6700\u521D\u306B\u30D7\u30ED\u30FC\u30D6\u3057\u3066\u304B\u3089\u3001\u5BFE\u5FDC\u3059\u308B\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044:
86911
+
86912
+ 1. \`influxdb_request\` \u3067 POST \`/api/v3/query_sql\`\u3001body \`{ "db": "<database>", "q": "SELECT 1" }\` \u3092\u547C\u3073\u51FA\u3059
86913
+ 2. 200 + JSON \u884C \u2192 InfluxDB 3\u3002SQL \u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3092\u4F7F\u7528\u3002
86914
+ 3. 405 Method Not Allowed\u3001\u307E\u305F\u306F HTML \u672C\u6587\uFF08\u4F8B: \`<html>...405 Not Allowed...</html>\`\uFF09\u2192 InfluxDB 2\u3002\`/api/v2/query?org={org}\` \u304B\u3089 Flux \u3092\u4F7F\u7528\u3002\`org\` \u30D1\u30E9\u30E1\u30FC\u30BF\u5FC5\u9808\u3002\u672A\u8A2D\u5B9A\u306A\u3089 \`updateConnectionParameters\` \u3067\u30E6\u30FC\u30B6\u30FC\u306B\u8A2D\u5B9A\u3092\u4F9D\u983C\u3059\u308B\u3002
86915
+
86916
+ ### \u30C4\u30FC\u30EB
86849
86917
 
86850
86918
  - \`influxdb_request\`: InfluxDB HTTP API \u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002SQL / InfluxQL / Flux \u30AF\u30A8\u30EA\u306E\u5B9F\u884C\u3001line protocol \u66F8\u304D\u8FBC\u307F\u3001bucket / database \u306E\u78BA\u8A8D\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08\`Authorization: Token {token}\`\uFF09\u3068 instance URL \u306F\u81EA\u52D5\u3067\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002InfluxDB 3 \u3067\u306F SQL (\`POST /api/v3/query_sql\`) \u304C JSON \u884C\u3092\u8FD4\u3059\u305F\u3081\u6700\u3082\u6271\u3044\u3084\u3059\u3044\u3067\u3059\u3002InfluxDB 2 \u3067\u306F Flux (\`POST /api/v2/query?org={org}\`) \u3092\u4F7F\u7528\u3057\u3001\u30EC\u30B9\u30DD\u30F3\u30B9\u306F\u6CE8\u91C8\u4ED8\u304D CSV \u3067\u3059\u3002\u66F8\u304D\u8FBC\u307F\u306F \`POST /api/v3/write_lp?db={db}\` (v3) \u307E\u305F\u306F \`POST /api/v2/write?org={org}&bucket={bucket}\` (v2) \u306B line protocol \u3092\u9001\u308A\u307E\u3059\uFF08\`contentType\` \u306F \`text/plain; charset=utf-8\`\uFF09\u3002
86851
86919
 
@@ -86909,7 +86977,47 @@ export default async function handler(c: Context) {
86909
86977
  - \u96C6\u8A08: \`AVG\`, \`SUM\`, \`MIN\`, \`MAX\`, \`COUNT\`\u3002\u6642\u9593\u30D0\u30B1\u30C3\u30C8: \`date_bin('5 minutes', time)\`
86910
86978
  - measurement \u4E00\u89A7: \`SHOW TABLES\`\u3001\u5217\u4E00\u89A7: \`SHOW COLUMNS FROM <measurement>\``
86911
86979
  },
86912
- tools: tools63
86980
+ tools: tools63,
86981
+ async checkConnection(params) {
86982
+ const url = (params.url ?? "").replace(/\/$/, "");
86983
+ const token = params.token;
86984
+ if (!url) {
86985
+ return { success: false, error: "InfluxDB URL is not configured" };
86986
+ }
86987
+ if (!token) {
86988
+ return { success: false, error: "API Token is not configured" };
86989
+ }
86990
+ try {
86991
+ const res = await fetch(`${url}/api/v2/orgs`, {
86992
+ method: "GET",
86993
+ headers: {
86994
+ Authorization: `Token ${token}`,
86995
+ Accept: "application/json"
86996
+ }
86997
+ });
86998
+ if (res.status === 401 || res.status === 403) {
86999
+ return {
87000
+ success: false,
87001
+ error: `Authentication failed (HTTP ${res.status}). Check the API token and its permissions.`
87002
+ };
87003
+ }
87004
+ if (!res.ok) {
87005
+ const body = await res.text().catch(() => res.statusText);
87006
+ const snippet = body.replace(/\s+/g, " ").slice(0, 200);
87007
+ return {
87008
+ success: false,
87009
+ error: `Connection check failed: HTTP ${res.status} ${res.statusText} \u2014 ${snippet}`
87010
+ };
87011
+ }
87012
+ return { success: true };
87013
+ } catch (error2) {
87014
+ const message = error2 instanceof Error ? error2.message : String(error2);
87015
+ return {
87016
+ success: false,
87017
+ error: `Failed to reach InfluxDB at ${url}: ${message}`
87018
+ };
87019
+ }
87020
+ }
86913
87021
  });
86914
87022
 
86915
87023
  // ../connectors/src/connectors/registry.ts