@squadbase/vite-server 0.1.7-dev.3 → 0.1.7-dev.5
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 +161 -190
- package/dist/connectors/google-sheets.js +183 -138
- package/dist/connectors/grafana.js +1 -1
- package/dist/connectors/influxdb.js +1 -1
- package/dist/connectors/salesforce.js +54 -107
- package/dist/index.js +161 -190
- package/dist/main.js +161 -190
- package/dist/vite-plugin.js +161 -190
- package/package.json +1 -1
package/dist/vite-plugin.js
CHANGED
|
@@ -72672,21 +72672,6 @@ await drive.updateFile("fileId123", {}, "newFolderId", "oldFolderId");
|
|
|
72672
72672
|
|
|
72673
72673
|
// ../connectors/src/connectors/google-sheets/tools/request.ts
|
|
72674
72674
|
import { z as z27 } from "zod";
|
|
72675
|
-
|
|
72676
|
-
// ../connectors/src/connectors/google-sheets/parameters.ts
|
|
72677
|
-
var parameters18 = {
|
|
72678
|
-
spreadsheetId: new ParameterDefinition({
|
|
72679
|
-
slug: "spreadsheet-id",
|
|
72680
|
-
name: "Google Sheets Spreadsheet ID",
|
|
72681
|
-
description: "The spreadsheet ID from the Google Sheets URL (the segment between /d/ and /edit in https://docs.google.com/spreadsheets/d/{spreadsheetId}/edit). Collected during the setup flow.",
|
|
72682
|
-
envVarBaseKey: "GOOGLE_SHEETS_SPREADSHEET_ID",
|
|
72683
|
-
type: "text",
|
|
72684
|
-
secret: false,
|
|
72685
|
-
required: true
|
|
72686
|
-
})
|
|
72687
|
-
};
|
|
72688
|
-
|
|
72689
|
-
// ../connectors/src/connectors/google-sheets/tools/request.ts
|
|
72690
72675
|
var SHEETS_BASE_URL = "https://sheets.googleapis.com/v4/spreadsheets";
|
|
72691
72676
|
var REQUEST_TIMEOUT_MS17 = 6e4;
|
|
72692
72677
|
var cachedToken13 = null;
|
|
@@ -72725,11 +72710,16 @@ var inputSchema27 = z27.object({
|
|
|
72725
72710
|
"Brief description of what you intend to accomplish with this tool call"
|
|
72726
72711
|
),
|
|
72727
72712
|
connectionId: z27.string().describe("ID of the Google Sheets connection to use"),
|
|
72728
|
-
method: z27.enum(["GET"]).describe(
|
|
72713
|
+
method: z27.enum(["GET", "POST", "PUT"]).describe(
|
|
72714
|
+
"HTTP method. GET for reads, PUT for values.update, POST for values.append / values:batchUpdate / values:batchGet / values:clear / values:batchClear."
|
|
72715
|
+
),
|
|
72729
72716
|
path: z27.string().describe(
|
|
72730
|
-
"API path appended to https://sheets.googleapis.com/v4/spreadsheets (e.g., '/
|
|
72717
|
+
"API path appended to https://sheets.googleapis.com/v4/spreadsheets. The caller must provide the target spreadsheetId explicitly in the path (e.g., '/1AbCxyz...', '/1AbCxyz.../values/Sheet1!A1:D10')."
|
|
72731
72718
|
),
|
|
72732
|
-
queryParams: z27.record(z27.string(), z27.string()).optional().describe("Query parameters to append to the URL")
|
|
72719
|
+
queryParams: z27.record(z27.string(), z27.string()).optional().describe("Query parameters to append to the URL"),
|
|
72720
|
+
body: z27.unknown().optional().describe(
|
|
72721
|
+
"Request body for POST/PUT. Will be JSON-serialized. Omit for GET."
|
|
72722
|
+
)
|
|
72733
72723
|
});
|
|
72734
72724
|
var outputSchema27 = z27.discriminatedUnion("success", [
|
|
72735
72725
|
z27.object({
|
|
@@ -72744,12 +72734,13 @@ var outputSchema27 = z27.discriminatedUnion("success", [
|
|
|
72744
72734
|
]);
|
|
72745
72735
|
var requestTool9 = new ConnectorTool({
|
|
72746
72736
|
name: "request",
|
|
72747
|
-
description: `Send authenticated
|
|
72748
|
-
|
|
72737
|
+
description: `Send authenticated requests to the Google Sheets API v4.
|
|
72738
|
+
Supports GET (read) and POST/PUT (write: update/append/batchUpdate/clear).
|
|
72739
|
+
The caller must include the target spreadsheetId in the path explicitly.
|
|
72749
72740
|
Authentication is handled automatically via OAuth proxy.`,
|
|
72750
72741
|
inputSchema: inputSchema27,
|
|
72751
72742
|
outputSchema: outputSchema27,
|
|
72752
|
-
async execute({ connectionId, method, path: path4, queryParams }, connections, config) {
|
|
72743
|
+
async execute({ connectionId, method, path: path4, queryParams, body }, connections, config) {
|
|
72753
72744
|
const connection = connections.find((c6) => c6.id === connectionId);
|
|
72754
72745
|
if (!connection) {
|
|
72755
72746
|
return {
|
|
@@ -72761,15 +72752,7 @@ Authentication is handled automatically via OAuth proxy.`,
|
|
|
72761
72752
|
`[connector-request] google-sheets/${connection.name}: ${method} ${path4}`
|
|
72762
72753
|
);
|
|
72763
72754
|
try {
|
|
72764
|
-
|
|
72765
|
-
if (!spreadsheetId) {
|
|
72766
|
-
return {
|
|
72767
|
-
success: false,
|
|
72768
|
-
error: `Spreadsheet ID is not configured for connection "${connection.name}". Ask the user for a Google Sheets URL and save it with updateConnectionParameters (parameterSlug: "spreadsheet-id") before calling this tool.`
|
|
72769
|
-
};
|
|
72770
|
-
}
|
|
72771
|
-
const resolvedPath = path4.replace(/\{spreadsheetId\}/g, spreadsheetId);
|
|
72772
|
-
let url = `${SHEETS_BASE_URL}${resolvedPath === "" || resolvedPath.startsWith("/") ? "" : "/"}${resolvedPath}`;
|
|
72755
|
+
let url = `${SHEETS_BASE_URL}${path4 === "" || path4.startsWith("/") ? "" : "/"}${path4}`;
|
|
72773
72756
|
if (queryParams) {
|
|
72774
72757
|
const searchParams = new URLSearchParams(queryParams);
|
|
72775
72758
|
url += `?${searchParams.toString()}`;
|
|
@@ -72779,16 +72762,17 @@ Authentication is handled automatically via OAuth proxy.`,
|
|
|
72779
72762
|
const controller = new AbortController();
|
|
72780
72763
|
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS17);
|
|
72781
72764
|
try {
|
|
72765
|
+
const proxyBody = { url, method };
|
|
72766
|
+
if (body !== void 0 && method !== "GET") {
|
|
72767
|
+
proxyBody.body = body;
|
|
72768
|
+
}
|
|
72782
72769
|
const response = await fetch(proxyUrl, {
|
|
72783
72770
|
method: "POST",
|
|
72784
72771
|
headers: {
|
|
72785
72772
|
"Content-Type": "application/json",
|
|
72786
72773
|
Authorization: `Bearer ${token}`
|
|
72787
72774
|
},
|
|
72788
|
-
body: JSON.stringify(
|
|
72789
|
-
url,
|
|
72790
|
-
method
|
|
72791
|
-
}),
|
|
72775
|
+
body: JSON.stringify(proxyBody),
|
|
72792
72776
|
signal: controller.signal
|
|
72793
72777
|
});
|
|
72794
72778
|
const data = await response.json();
|
|
@@ -72811,66 +72795,73 @@ Authentication is handled automatically via OAuth proxy.`,
|
|
|
72811
72795
|
var requestToolName = `google-sheets-oauth_${requestTool9.name}`;
|
|
72812
72796
|
var googleSheetsOnboarding = new ConnectorOnboarding({
|
|
72813
72797
|
connectionSetupInstructions: {
|
|
72814
|
-
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\
|
|
72798
|
+
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\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306F\u8AAD\u307F\u66F8\u304D\u53EF\u80FD\u306A\u30B9\u30B3\u30FC\u30D7 (\`spreadsheets\`) \u3067\u63A5\u7D9A\u3055\u308C\u3001OAuth\u8A8D\u8A3C\u3057\u305FGoogle\u30A2\u30AB\u30A6\u30F3\u30C8\u304C\u6A29\u9650\u3092\u6301\u3064\u4EFB\u610F\u306E\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306B\u5BFE\u3057\u3066\u8AAD\u307F\u66F8\u304D\u3067\u304D\u307E\u3059\u3002
|
|
72815
72799
|
|
|
72816
|
-
1. \`askUserQuestion\` \u3067\
|
|
72800
|
+
1. \`askUserQuestion\` \u3067\u64CD\u4F5C\u5BFE\u8C61\u306E\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8URL\u3092\u30D2\u30A2\u30EA\u30F3\u30B0\u3059\u308B:
|
|
72817
72801
|
- \`type\`: \`"freeText"\`
|
|
72818
|
-
- \`question\`: \u300C\
|
|
72802
|
+
- \`question\`: \u300C\u64CD\u4F5C\u3057\u305F\u3044Google Sheets\u306EURL\u3092\u8CBC\u308A\u4ED8\u3051\u3066\u304F\u3060\u3055\u3044\uFF08\u8AAD\u307F\u53D6\u308A\u30FB\u7DE8\u96C6\u3069\u3061\u3089\u3082\u53EF\u80FD\u3067\u3059\uFF09\u300D
|
|
72819
72803
|
- \`placeholder\`: \`"https://docs.google.com/spreadsheets/d/.../edit"\`
|
|
72820
72804
|
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
|
|
72821
|
-
3. \
|
|
72822
|
-
- \`parameterSlug\`: \`"spreadsheet-id"\`
|
|
72823
|
-
- \`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
|
|
72824
|
-
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:
|
|
72805
|
+
3. \`${requestToolName}\` \u3067\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u6027\u3092\u78BA\u8A8D\u3059\u308B:
|
|
72825
72806
|
- \`method\`: \`"GET"\`
|
|
72826
|
-
- \`path\`: \`"
|
|
72827
|
-
|
|
72828
|
-
a. \u30E6\u30FC\u30B6\u30FC\u306B\u539F\u56E0\u306E\u53EF\u80FD\u6027\u3092\u4F1D\u3048\u308B\
|
|
72829
|
-
b. \`askUserQuestion\` \u3067\u3082\u3046\u4E00\u5EA6URL\u3092\u805E\u304D\u76F4\
|
|
72830
|
-
c. \
|
|
72831
|
-
d. \u6210\u529F\u3059\u308B\u307E\u3067\uFF08\u307E\u305F\u306F\u30E6\u30FC\u30B6\u30FC\u304C\u4E2D\u65AD\u3059\u308B\u307E\u3067\uFF09\u3053\u306E\u30EB\u30FC\u30D7\u3092\u7E70\u308A\u8FD4\u3059\u3002\u540C\u3058ID\u304C\u518D\u5EA6\u5931\u6557\u3059\u308B\u5834\u5408\u306F\u5171\u6709\u8A2D\u5B9A\u306E\u554F\u984C\u306A\u306E\u3067\u30E6\u30FC\u30B6\u30FC\u306B\u305D\u306E\u65E8\u3092\u4F1D\u3048\u3066\u5224\u65AD\u3092\u4EF0\u3050
|
|
72807
|
+
- \`path\`: \`"/<\u62BD\u51FA\u3057\u305FspreadsheetId>"\`
|
|
72808
|
+
4. **\u691C\u8A3C\u5931\u6557\u6642\u306E\u518D\u30D2\u30A2\u30EA\u30F3\u30B0**: \u30B9\u30C6\u30C3\u30D73\u304C \`success: false\` \u3092\u8FD4\u3057\u305F\u5834\u5408\uFF08404/403/\u898B\u3064\u304B\u3089\u306A\u3044\u7B49\uFF09\u3001\u4EE5\u4E0B\u306E\u624B\u9806\u3067\u518D\u8A66\u884C\u3059\u308B:
|
|
72809
|
+
a. \u30E6\u30FC\u30B6\u30FC\u306B\u539F\u56E0\u306E\u53EF\u80FD\u6027\u3092\u4F1D\u3048\u308B\uFF08URL\u304C\u9593\u9055\u3063\u3066\u3044\u308B\u3001OAuth\u9023\u643A\u3057\u305FGoogle\u30A2\u30AB\u30A6\u30F3\u30C8\u306B\u30A2\u30AF\u30BB\u30B9\u6A29\u9650\u304C\u306A\u3044\u3001\u30D7\u30E9\u30A4\u30D9\u30FC\u30C8\u30B7\u30FC\u30C8\u3067\u5225\u30A2\u30AB\u30A6\u30F3\u30C8\u3068\u5171\u6709\u3055\u308C\u3066\u3044\u308B \u7B49\uFF09
|
|
72810
|
+
b. \`askUserQuestion\` \u3067\u3082\u3046\u4E00\u5EA6URL\u3092\u805E\u304D\u76F4\u3057\u3001\u518D\u5EA6 \`${requestToolName}\` \u3067\u691C\u8A3C
|
|
72811
|
+
c. \u6210\u529F\u3059\u308B\u307E\u3067\uFF08\u307E\u305F\u306F\u30E6\u30FC\u30B6\u30FC\u304C\u4E2D\u65AD\u3059\u308B\u307E\u3067\uFF09\u3053\u306E\u30EB\u30FC\u30D7\u3092\u7E70\u308A\u8FD4\u3059
|
|
72832
72812
|
|
|
72833
72813
|
#### \u5236\u7D04
|
|
72834
|
-
- **\
|
|
72814
|
+
- **\u63A5\u7D9A\u8A2D\u5B9A\u4E2D\u306F\u5927\u91CF\u306E\u30BB\u30EB\u5024\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
|
|
72815
|
+
- **\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u3092\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u30D1\u30E9\u30E1\u30FC\u30BF\u3068\u3057\u3066\u4FDD\u5B58\u3057\u306A\u3044**\u3002\u30CF\u30F3\u30C9\u30E9\u5074\u306E\u30B3\u30FC\u30C9\uFF08\`server-logic\`\uFF09\u306B\u5BFE\u8C61\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u3092\u76F4\u63A5\u6E21\u3059\u8A2D\u8A08\u306B\u306A\u3063\u3066\u3044\u308B\u305F\u3081\u3001\`updateConnectionParameters\` \u306F\u547C\u3070\u306A\u3044\u3053\u3068
|
|
72835
72816
|
- \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`,
|
|
72836
|
-
en: `Follow these steps to set up the Google Sheets (OAuth) connection.
|
|
72817
|
+
en: `Follow these steps to set up the Google Sheets (OAuth) connection. This connector uses the read/write \`spreadsheets\` scope, so it can read and edit any spreadsheet the authenticated Google account has access to.
|
|
72837
72818
|
|
|
72838
|
-
1. Call \`askUserQuestion\` to ask for the spreadsheet URL to
|
|
72819
|
+
1. Call \`askUserQuestion\` to ask for the spreadsheet URL the user wants to work with:
|
|
72839
72820
|
- \`type\`: \`"freeText"\`
|
|
72840
|
-
- \`question\`: "Please paste the URL of the Google Sheet you want to
|
|
72821
|
+
- \`question\`: "Please paste the URL of the Google Sheet you want to work with (both read and edit are supported)."
|
|
72841
72822
|
- \`placeholder\`: \`"https://docs.google.com/spreadsheets/d/.../edit"\`
|
|
72842
72823
|
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.
|
|
72843
|
-
3.
|
|
72844
|
-
- \`parameterSlug\`: \`"spreadsheet-id"\`
|
|
72845
|
-
- \`options\`: \`[{ value: <extracted ID>, label: <same value> }]\` (a single option is auto-selected)
|
|
72846
|
-
4. Verify access by calling \`${requestToolName}\`:
|
|
72824
|
+
3. Verify accessibility by calling \`${requestToolName}\`:
|
|
72847
72825
|
- \`method\`: \`"GET"\`
|
|
72848
|
-
- \`path\`: \`"
|
|
72849
|
-
|
|
72850
|
-
a. Tell the user the likely causes (wrong URL, OAuth-connected Google account lacks
|
|
72851
|
-
b. Call \`askUserQuestion\` to re-ask for the URL
|
|
72852
|
-
c.
|
|
72853
|
-
d. Repeat until verification succeeds (or the user aborts). If the same ID keeps failing, it is a sharing/permissions issue \u2014 inform the user and ask how to proceed
|
|
72826
|
+
- \`path\`: \`"/<extracted spreadsheetId>"\`
|
|
72827
|
+
4. **Retry on verification failure**: If step 3 returns \`success: false\` (404/403/not found or any other error):
|
|
72828
|
+
a. Tell the user the likely causes (wrong URL, OAuth-connected Google account lacks access, private sheet shared with a different account, etc.)
|
|
72829
|
+
b. Call \`askUserQuestion\` again to re-ask for the URL and re-verify with \`${requestToolName}\`
|
|
72830
|
+
c. Repeat until verification succeeds (or the user aborts)
|
|
72854
72831
|
|
|
72855
72832
|
#### Constraints
|
|
72856
|
-
- **Do NOT
|
|
72857
|
-
-
|
|
72833
|
+
- **Do NOT fetch large amounts of cell data during setup**. Only the metadata request specified above is allowed.
|
|
72834
|
+
- **Do NOT persist the spreadsheet ID as a connection parameter.** The handler-side code (\`server-logic\`) is designed to receive the target spreadsheet ID directly, so do NOT call \`updateConnectionParameters\`.
|
|
72835
|
+
- Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently.`
|
|
72858
72836
|
},
|
|
72859
72837
|
dataOverviewInstructions: {
|
|
72860
|
-
en: `1. Call ${requestToolName} with GET
|
|
72861
|
-
2. For each sheet of interest, call ${requestToolName} with GET
|
|
72862
|
-
ja: `1. ${requestToolName} \u3067 GET
|
|
72863
|
-
2. \u4E3B\u8981\u306A\u30B7\u30FC\u30C8\u306B\u3064\u3044\u3066 ${requestToolName} \u3067 GET
|
|
72838
|
+
en: `1. Call ${requestToolName} with GET /<spreadsheetId> to fetch spreadsheet metadata (sheet names, grid properties)
|
|
72839
|
+
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`,
|
|
72840
|
+
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
|
|
72841
|
+
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`
|
|
72864
72842
|
}
|
|
72865
72843
|
});
|
|
72866
72844
|
|
|
72845
|
+
// ../connectors/src/connectors/google-sheets/parameters.ts
|
|
72846
|
+
var parameters18 = {
|
|
72847
|
+
spreadsheetId: new ParameterDefinition({
|
|
72848
|
+
slug: "spreadsheet-id",
|
|
72849
|
+
name: "Google Sheets Spreadsheet ID",
|
|
72850
|
+
description: "The spreadsheet ID from the Google Sheets URL (the segment between /d/ and /edit in https://docs.google.com/spreadsheets/d/{spreadsheetId}/edit). Collected during the setup flow.",
|
|
72851
|
+
envVarBaseKey: "GOOGLE_SHEETS_SPREADSHEET_ID",
|
|
72852
|
+
type: "text",
|
|
72853
|
+
secret: false,
|
|
72854
|
+
required: false
|
|
72855
|
+
})
|
|
72856
|
+
};
|
|
72857
|
+
|
|
72867
72858
|
// ../connectors/src/connectors/google-sheets/index.ts
|
|
72868
72859
|
var tools18 = { request: requestTool9 };
|
|
72869
72860
|
var googleSheetsConnector = new ConnectorPlugin({
|
|
72870
72861
|
slug: "google-sheets",
|
|
72871
72862
|
authType: AUTH_TYPES.OAUTH,
|
|
72872
72863
|
name: "Google Sheets",
|
|
72873
|
-
description: "Connect to
|
|
72864
|
+
description: "Connect to Google Sheets for read/write access via OAuth. Any spreadsheet the authenticated Google account can access is supported \u2014 the target spreadsheetId is passed per call.",
|
|
72874
72865
|
iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/1UPQuggyiZmbb26CuaSr2h/032770e8739b183fa00b7625f024e536/google-sheets.svg",
|
|
72875
72866
|
parameters: parameters18,
|
|
72876
72867
|
releaseFlag: { dev1: true, dev2: false, prod: false },
|
|
@@ -72879,25 +72870,33 @@ var googleSheetsConnector = new ConnectorPlugin({
|
|
|
72879
72870
|
allowlist: [
|
|
72880
72871
|
{
|
|
72881
72872
|
host: "sheets.googleapis.com",
|
|
72882
|
-
methods: ["GET"]
|
|
72873
|
+
methods: ["GET", "POST", "PUT"]
|
|
72883
72874
|
}
|
|
72884
72875
|
]
|
|
72885
72876
|
},
|
|
72886
72877
|
systemPrompt: {
|
|
72887
72878
|
en: `### Tools (setup-time only)
|
|
72888
72879
|
|
|
72889
|
-
- \`google-sheets-oauth_request\`: Call the Google Sheets API during setup / data overview.
|
|
72880
|
+
- \`google-sheets-oauth_request\`: Call the Google Sheets API during setup / data overview. Supports GET, POST, and PUT. The caller must include the target spreadsheetId in the path explicitly (e.g., \`/1AbCxyz...\`, \`/1AbCxyz.../values/Sheet1!A1:D10\`). Authentication is configured automatically via OAuth.
|
|
72890
72881
|
|
|
72891
|
-
> **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.
|
|
72882
|
+
> **Important**: The \`google-sheets-oauth_request\` tool is only available at setup time. Inside server-logic handlers, use the SDK (\`connection(id).getValues(spreadsheetId, range)\`, 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.
|
|
72892
72883
|
|
|
72893
|
-
> **Connection scope**:
|
|
72884
|
+
> **Connection scope**: The OAuth scope is \`spreadsheets\` (read/write). A connection is NOT bound to a single spreadsheet \u2014 the target spreadsheetId is passed per call. The spreadsheetId is NOT stored as a connection parameter or environment variable; pass it explicitly from the caller (e.g., as a query param or request input to the handler).
|
|
72894
72885
|
|
|
72895
|
-
### Google Sheets API Reference
|
|
72886
|
+
### Google Sheets API Reference
|
|
72896
72887
|
|
|
72888
|
+
Reads:
|
|
72897
72889
|
- GET \`/{spreadsheetId}\` \u2014 Get spreadsheet metadata (title, sheets, properties)
|
|
72898
72890
|
- GET \`/{spreadsheetId}/values/{range}\` \u2014 Get cell values for a range
|
|
72899
72891
|
- GET \`/{spreadsheetId}/values:batchGet?ranges={range1}&ranges={range2}\` \u2014 Get values for multiple ranges
|
|
72900
72892
|
|
|
72893
|
+
Writes:
|
|
72894
|
+
- PUT \`/{spreadsheetId}/values/{range}?valueInputOption=USER_ENTERED\` \u2014 Overwrite a range (body: \`{ range, majorDimension, values }\`)
|
|
72895
|
+
- POST \`/{spreadsheetId}/values/{range}:append?valueInputOption=USER_ENTERED\` \u2014 Append rows after the existing data
|
|
72896
|
+
- POST \`/{spreadsheetId}/values/{range}:clear\` \u2014 Clear values in a range
|
|
72897
|
+
- POST \`/{spreadsheetId}/values:batchUpdate\` \u2014 Batch update / batch clear
|
|
72898
|
+
- POST \`/{spreadsheetId}:batchUpdate\` \u2014 Structural edits (addSheet, deleteSheet, updateCells, formatting, \u2026)
|
|
72899
|
+
|
|
72901
72900
|
### Range Notation (A1 notation)
|
|
72902
72901
|
- \`Sheet1!A1:D10\` \u2014 Specific range on Sheet1
|
|
72903
72902
|
- \`Sheet1!A:A\` \u2014 Entire column A on Sheet1
|
|
@@ -72907,20 +72906,24 @@ var googleSheetsConnector = new ConnectorPlugin({
|
|
|
72907
72906
|
|
|
72908
72907
|
### Tips
|
|
72909
72908
|
- To explore a spreadsheet, first get metadata to see available sheet names
|
|
72909
|
+
- Use \`valueInputOption=USER_ENTERED\` to parse formulas/dates like the UI; use \`RAW\` to store inputs literally
|
|
72910
72910
|
- Use \`valueRenderOption=FORMATTED_VALUE\` query param to get display values
|
|
72911
72911
|
- Use \`valueRenderOption=UNFORMATTED_VALUE\` for raw numeric values
|
|
72912
72912
|
- Use \`majorDimension=COLUMNS\` to get data organized by columns instead of rows
|
|
72913
72913
|
|
|
72914
72914
|
### Business Logic
|
|
72915
72915
|
|
|
72916
|
-
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
|
|
72916
|
+
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 target spreadsheetId is NOT stored on the connection \u2014 the handler caller must pass it (as part of the request input).
|
|
72917
72917
|
|
|
72918
72918
|
SDK surface (client created via \`connection(connectionId)\`):
|
|
72919
|
-
- \`client.
|
|
72920
|
-
- \`client.
|
|
72921
|
-
- \`client.
|
|
72922
|
-
- \`client.
|
|
72923
|
-
- \`client.
|
|
72919
|
+
- \`client.request(path, init?)\` \u2014 low-level authenticated fetch (\`path\` is appended to \`https://sheets.googleapis.com/v4/spreadsheets\`; the caller must include the target spreadsheetId).
|
|
72920
|
+
- \`client.getSpreadsheet(spreadsheetId)\` \u2014 fetch spreadsheet metadata.
|
|
72921
|
+
- \`client.getValues(spreadsheetId, range)\` \u2014 read a range (A1 notation).
|
|
72922
|
+
- \`client.batchGetValues(spreadsheetId, ranges)\` \u2014 read multiple ranges.
|
|
72923
|
+
- \`client.updateValues(spreadsheetId, range, values, valueInputOption?)\` \u2014 overwrite a range (requires write scope).
|
|
72924
|
+
- \`client.appendValues(spreadsheetId, range, values, valueInputOption?)\` \u2014 append rows (requires write scope).
|
|
72925
|
+
- \`client.clearValues(spreadsheetId, range)\` \u2014 clear a range (requires write scope).
|
|
72926
|
+
- \`client.batchUpdate(spreadsheetId, requests)\` \u2014 structural edits (requires write scope).
|
|
72924
72927
|
|
|
72925
72928
|
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.
|
|
72926
72929
|
|
|
@@ -72930,32 +72933,44 @@ If a handler test fails with \`Connection proxy is not configured\`, retry \u201
|
|
|
72930
72933
|
import { connection } from "@squadbase/vite-server/connectors/google-sheets";
|
|
72931
72934
|
|
|
72932
72935
|
const sheets = connection("<connectionId>");
|
|
72936
|
+
const spreadsheetId = "<passed from request input>";
|
|
72933
72937
|
|
|
72934
|
-
//
|
|
72935
|
-
const metadata = await sheets.getSpreadsheet();
|
|
72936
|
-
|
|
72938
|
+
// Read: metadata and values
|
|
72939
|
+
const metadata = await sheets.getSpreadsheet(spreadsheetId);
|
|
72940
|
+
const values = await sheets.getValues(spreadsheetId, "Sheet1!A1:D10");
|
|
72937
72941
|
|
|
72938
|
-
//
|
|
72939
|
-
|
|
72940
|
-
|
|
72942
|
+
// Write: overwrite, append, clear
|
|
72943
|
+
await sheets.updateValues(spreadsheetId, "Sheet1!A1:B2", [["name", "age"], ["Alice", 30]]);
|
|
72944
|
+
await sheets.appendValues(spreadsheetId, "Sheet1!A:B", [["Bob", 25]]);
|
|
72945
|
+
await sheets.clearValues(spreadsheetId, "Sheet1!A1:B10");
|
|
72941
72946
|
|
|
72942
|
-
//
|
|
72943
|
-
|
|
72947
|
+
// Structural edits (add a sheet)
|
|
72948
|
+
await sheets.batchUpdate(spreadsheetId, [
|
|
72949
|
+
{ addSheet: { properties: { title: "NewSheet" } } },
|
|
72950
|
+
]);
|
|
72944
72951
|
\`\`\``,
|
|
72945
72952
|
ja: `### \u30C4\u30FC\u30EB\uFF08\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\uFF09
|
|
72946
72953
|
|
|
72947
|
-
- \`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\
|
|
72954
|
+
- \`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\u3002GET / POST / PUT \u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002\u547C\u3073\u51FA\u3057\u5074\u304C\u30D1\u30B9\u306B\u5BFE\u8C61\u306E spreadsheetId \u3092\u660E\u793A\u7684\u306B\u542B\u3081\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\uFF08\u4F8B: \`/1AbCxyz...\`\u3001\`/1AbCxyz.../values/Sheet1!A1:D10\`\uFF09\u3002OAuth \u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
|
|
72948
72955
|
|
|
72949
|
-
> **\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
|
|
72956
|
+
> **\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(spreadsheetId, range)\` \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
|
|
72950
72957
|
|
|
72951
|
-
> **\u63A5\u7D9A\u30B9\u30B3\u30FC\u30D7**: \
|
|
72958
|
+
> **\u63A5\u7D9A\u30B9\u30B3\u30FC\u30D7**: OAuth \u30B9\u30B3\u30FC\u30D7\u306F \`spreadsheets\`\uFF08\u8AAD\u307F\u66F8\u304D\u53EF\u80FD\uFF09\u3067\u3059\u3002\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306F\u5358\u4E00\u306E\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306B\u7D10\u3065\u304D\u307E\u305B\u3093 \u2014 \u5BFE\u8C61\u306E spreadsheetId \u306F\u547C\u3073\u51FA\u3057\u3054\u3068\u306B\u6E21\u3057\u307E\u3059\u3002spreadsheetId \u306F\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u30D1\u30E9\u30E1\u30FC\u30BF\u3084\u74B0\u5883\u5909\u6570\u3068\u3057\u3066\u4FDD\u5B58\u3055\u308C\u306A\u3044\u305F\u3081\u3001\u30CF\u30F3\u30C9\u30E9\u306E\u547C\u3073\u51FA\u3057\u5143\uFF08\u30EA\u30AF\u30A8\u30B9\u30C8\u5165\u529B\u306A\u3069\uFF09\u304B\u3089\u660E\u793A\u7684\u306B\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
72952
72959
|
|
|
72953
|
-
### Google Sheets API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
72960
|
+
### Google Sheets API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
72954
72961
|
|
|
72962
|
+
\u8AAD\u307F\u53D6\u308A:
|
|
72955
72963
|
- 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
|
|
72956
72964
|
- GET \`/{spreadsheetId}/values/{range}\` \u2014 \u7BC4\u56F2\u306E\u30BB\u30EB\u5024\u3092\u53D6\u5F97
|
|
72957
72965
|
- GET \`/{spreadsheetId}/values:batchGet?ranges={range1}&ranges={range2}\` \u2014 \u8907\u6570\u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97
|
|
72958
72966
|
|
|
72967
|
+
\u66F8\u304D\u8FBC\u307F:
|
|
72968
|
+
- PUT \`/{spreadsheetId}/values/{range}?valueInputOption=USER_ENTERED\` \u2014 \u7BC4\u56F2\u3092\u4E0A\u66F8\u304D\uFF08body: \`{ range, majorDimension, values }\`\uFF09
|
|
72969
|
+
- POST \`/{spreadsheetId}/values/{range}:append?valueInputOption=USER_ENTERED\` \u2014 \u65E2\u5B58\u30C7\u30FC\u30BF\u306E\u5F8C\u308D\u306B\u884C\u3092\u8FFD\u8A18
|
|
72970
|
+
- POST \`/{spreadsheetId}/values/{range}:clear\` \u2014 \u7BC4\u56F2\u306E\u5024\u3092\u30AF\u30EA\u30A2
|
|
72971
|
+
- POST \`/{spreadsheetId}/values:batchUpdate\` \u2014 \u30D0\u30C3\u30C1\u66F4\u65B0 / \u30D0\u30C3\u30C1\u30AF\u30EA\u30A2
|
|
72972
|
+
- POST \`/{spreadsheetId}:batchUpdate\` \u2014 \u69CB\u9020\u5909\u66F4\uFF08addSheet, deleteSheet, updateCells, \u66F8\u5F0F\u8A2D\u5B9A \u7B49\uFF09
|
|
72973
|
+
|
|
72959
72974
|
### \u7BC4\u56F2\u306E\u8868\u8A18\u6CD5\uFF08A1\u8868\u8A18\u6CD5\uFF09
|
|
72960
72975
|
- \`Sheet1!A1:D10\` \u2014 Sheet1\u4E0A\u306E\u7279\u5B9A\u7BC4\u56F2
|
|
72961
72976
|
- \`Sheet1!A:A\` \u2014 Sheet1\u306EA\u5217\u5168\u4F53
|
|
@@ -72965,20 +72980,24 @@ const batch = await sheets.batchGetValues(["Sheet1!A:A", "Sheet2!B2:C100"]);
|
|
|
72965
72980
|
|
|
72966
72981
|
### \u30D2\u30F3\u30C8
|
|
72967
72982
|
- \u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u3092\u63A2\u7D22\u3059\u308B\u306B\u306F\u3001\u307E\u305A\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3057\u3066\u5229\u7528\u53EF\u80FD\u306A\u30B7\u30FC\u30C8\u540D\u3092\u78BA\u8A8D\u3057\u307E\u3059
|
|
72983
|
+
- \u6570\u5F0F\u3084\u65E5\u4ED8\u3092 UI \u3068\u540C\u3058\u3088\u3046\u306B\u89E3\u91C8\u3055\u305B\u308B\u306B\u306F \`valueInputOption=USER_ENTERED\`\u3001\u305D\u306E\u307E\u307E\u6587\u5B57\u5217\u3068\u3057\u3066\u4FDD\u5B58\u3059\u308B\u306B\u306F \`RAW\` \u3092\u4F7F\u3044\u307E\u3059
|
|
72968
72984
|
- \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
|
|
72969
72985
|
- \u751F\u306E\u6570\u5024\u3092\u53D6\u5F97\u3059\u308B\u306B\u306F \`valueRenderOption=UNFORMATTED_VALUE\` \u3092\u4F7F\u7528\u3057\u307E\u3059
|
|
72970
72986
|
- \u5217\u3054\u3068\u306B\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3059\u308B\u306B\u306F \`majorDimension=COLUMNS\` \u3092\u4F7F\u7528\u3057\u307E\u3059
|
|
72971
72987
|
|
|
72972
72988
|
### Business Logic
|
|
72973
72989
|
|
|
72974
|
-
\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\
|
|
72990
|
+
\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\u5BFE\u8C61 spreadsheetId \u306F\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306B\u4FDD\u5B58\u3055\u308C\u306A\u3044\u305F\u3081\u3001\u30CF\u30F3\u30C9\u30E9\u306E\u547C\u3073\u51FA\u3057\u5143\uFF08\u30EA\u30AF\u30A8\u30B9\u30C8\u5165\u529B\u306A\u3069\uFF09\u304B\u3089\u6E21\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
72975
72991
|
|
|
72976
72992
|
SDK\uFF08\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\uFF09:
|
|
72977
|
-
- \`client.
|
|
72978
|
-
- \`client.
|
|
72979
|
-
- \`client.
|
|
72980
|
-
- \`client.
|
|
72981
|
-
- \`client.
|
|
72993
|
+
- \`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\u547C\u3073\u51FA\u3057\u5074\u304C spreadsheetId \u3092\u542B\u3081\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\uFF09\u3002
|
|
72994
|
+
- \`client.getSpreadsheet(spreadsheetId)\` \u2014 \u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3002
|
|
72995
|
+
- \`client.getValues(spreadsheetId, range)\` \u2014 \u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97\uFF08A1 \u8868\u8A18\uFF09\u3002
|
|
72996
|
+
- \`client.batchGetValues(spreadsheetId, ranges)\` \u2014 \u8907\u6570\u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97\u3002
|
|
72997
|
+
- \`client.updateValues(spreadsheetId, range, values, valueInputOption?)\` \u2014 \u7BC4\u56F2\u3092\u4E0A\u66F8\u304D\uFF08\u66F8\u304D\u8FBC\u307F\u30B9\u30B3\u30FC\u30D7\u304C\u5FC5\u8981\uFF09\u3002
|
|
72998
|
+
- \`client.appendValues(spreadsheetId, range, values, valueInputOption?)\` \u2014 \u884C\u3092\u8FFD\u8A18\uFF08\u66F8\u304D\u8FBC\u307F\u30B9\u30B3\u30FC\u30D7\u304C\u5FC5\u8981\uFF09\u3002
|
|
72999
|
+
- \`client.clearValues(spreadsheetId, range)\` \u2014 \u7BC4\u56F2\u306E\u5024\u3092\u30AF\u30EA\u30A2\uFF08\u66F8\u304D\u8FBC\u307F\u30B9\u30B3\u30FC\u30D7\u304C\u5FC5\u8981\uFF09\u3002
|
|
73000
|
+
- \`client.batchUpdate(spreadsheetId, requests)\` \u2014 \u69CB\u9020\u5909\u66F4\uFF08\u66F8\u304D\u8FBC\u307F\u30B9\u30B3\u30FC\u30D7\u304C\u5FC5\u8981\uFF09\u3002
|
|
72982
73001
|
|
|
72983
73002
|
\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
|
|
72984
73003
|
|
|
@@ -72988,17 +73007,21 @@ SDK\uFF08\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9
|
|
|
72988
73007
|
import { connection } from "@squadbase/vite-server/connectors/google-sheets";
|
|
72989
73008
|
|
|
72990
73009
|
const sheets = connection("<connectionId>");
|
|
73010
|
+
const spreadsheetId = "<\u30EA\u30AF\u30A8\u30B9\u30C8\u5165\u529B\u304B\u3089\u53D7\u3051\u53D6\u308B>";
|
|
72991
73011
|
|
|
72992
|
-
// \
|
|
72993
|
-
const metadata = await sheets.getSpreadsheet();
|
|
72994
|
-
|
|
73012
|
+
// \u8AAD\u307F\u53D6\u308A: \u30E1\u30BF\u30C7\u30FC\u30BF\u3068\u5024
|
|
73013
|
+
const metadata = await sheets.getSpreadsheet(spreadsheetId);
|
|
73014
|
+
const values = await sheets.getValues(spreadsheetId, "Sheet1!A1:D10");
|
|
72995
73015
|
|
|
72996
|
-
// \
|
|
72997
|
-
|
|
72998
|
-
|
|
73016
|
+
// \u66F8\u304D\u8FBC\u307F: \u4E0A\u66F8\u304D\u30FB\u8FFD\u8A18\u30FB\u30AF\u30EA\u30A2
|
|
73017
|
+
await sheets.updateValues(spreadsheetId, "Sheet1!A1:B2", [["name", "age"], ["Alice", 30]]);
|
|
73018
|
+
await sheets.appendValues(spreadsheetId, "Sheet1!A:B", [["Bob", 25]]);
|
|
73019
|
+
await sheets.clearValues(spreadsheetId, "Sheet1!A1:B10");
|
|
72999
73020
|
|
|
73000
|
-
// \
|
|
73001
|
-
|
|
73021
|
+
// \u69CB\u9020\u5909\u66F4\uFF08\u30B7\u30FC\u30C8\u3092\u8FFD\u52A0\uFF09
|
|
73022
|
+
await sheets.batchUpdate(spreadsheetId, [
|
|
73023
|
+
{ addSheet: { properties: { title: "NewSheet" } } },
|
|
73024
|
+
]);
|
|
73002
73025
|
\`\`\``
|
|
73003
73026
|
},
|
|
73004
73027
|
tools: tools18
|
|
@@ -85008,7 +85031,7 @@ var grafanaConnector = new ConnectorPlugin({
|
|
|
85008
85031
|
description: "Connect to Grafana for monitoring dashboards, datasource queries, and alerting.",
|
|
85009
85032
|
iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/3nGaPhV94lXQsHcCtv4mXz/0559d42f83066e8ba79e78410806750c/grafana-icon.webp",
|
|
85010
85033
|
parameters: parameters58,
|
|
85011
|
-
releaseFlag: { dev1: true, dev2:
|
|
85034
|
+
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
85012
85035
|
onboarding: grafanaOnboarding,
|
|
85013
85036
|
systemPrompt: {
|
|
85014
85037
|
en: `### Tools
|
|
@@ -86177,42 +86200,6 @@ await sentry.updateIssue("12345", { status: "resolved" });
|
|
|
86177
86200
|
|
|
86178
86201
|
// ../connectors/src/connectors/salesforce/setup.ts
|
|
86179
86202
|
var salesforceOnboarding = new ConnectorOnboarding({
|
|
86180
|
-
connectionSetupInstructions: {
|
|
86181
|
-
en: `#### Create a Connected App in Salesforce
|
|
86182
|
-
1. In Salesforce Setup, go to App Manager \u2192 New Connected App
|
|
86183
|
-
2. Under API (Enable OAuth Settings), check "Enable OAuth Settings"
|
|
86184
|
-
3. Add OAuth scopes: "Manage user data via APIs (api)" and "Perform requests at any time (refresh_token, offline_access)"
|
|
86185
|
-
4. Save and note the Consumer Key (client_id) and Consumer Secret (client_secret)
|
|
86186
|
-
|
|
86187
|
-
#### Allow Username-Password Flow
|
|
86188
|
-
1. Go to Setup \u2192 Identity \u2192 OAuth and OpenID Connect Settings
|
|
86189
|
-
2. Enable "Allow OAuth Username-Password Flows"
|
|
86190
|
-
|
|
86191
|
-
#### Reset your Security Token
|
|
86192
|
-
1. Go to Settings \u2192 My Personal Information \u2192 Reset My Security Token
|
|
86193
|
-
2. Salesforce emails you a new security token \u2014 append it to your password when entering the Password parameter (password + securityToken)
|
|
86194
|
-
|
|
86195
|
-
#### Sandbox vs Production
|
|
86196
|
-
- Leave Use Sandbox as "false" (or empty) to connect to production (login.salesforce.com)
|
|
86197
|
-
- Set Use Sandbox to "true" to connect to a sandbox (test.salesforce.com)`,
|
|
86198
|
-
ja: `#### Salesforce \u3067 Connected App \u3092\u4F5C\u6210
|
|
86199
|
-
1. Setup \u2192 App Manager \u2192 New Connected App
|
|
86200
|
-
2. API (Enable OAuth Settings) \u30BB\u30AF\u30B7\u30E7\u30F3\u3067 "Enable OAuth Settings" \u3092\u6709\u52B9\u5316
|
|
86201
|
-
3. OAuth \u30B9\u30B3\u30FC\u30D7\u306B "Manage user data via APIs (api)" \u3068 "Perform requests at any time (refresh_token, offline_access)" \u3092\u8FFD\u52A0
|
|
86202
|
-
4. \u4FDD\u5B58\u5F8C\u3001Consumer Key (client_id) \u3068 Consumer Secret (client_secret) \u3092\u63A7\u3048\u308B
|
|
86203
|
-
|
|
86204
|
-
#### Username-Password Flow \u3092\u8A31\u53EF
|
|
86205
|
-
1. Setup \u2192 Identity \u2192 OAuth and OpenID Connect Settings
|
|
86206
|
-
2. "Allow OAuth Username-Password Flows" \u3092\u6709\u52B9\u5316
|
|
86207
|
-
|
|
86208
|
-
#### Security Token \u306E\u767A\u884C
|
|
86209
|
-
1. \u500B\u4EBA\u8A2D\u5B9A \u2192 My Personal Information \u2192 Reset My Security Token
|
|
86210
|
-
2. Salesforce \u304B\u3089\u9001\u3089\u308C\u308B\u30BB\u30AD\u30E5\u30EA\u30C6\u30A3\u30C8\u30FC\u30AF\u30F3\u3092\u30D1\u30B9\u30EF\u30FC\u30C9\u306B\u9023\u7D50\u3057\u3066\u5165\u529B\uFF08password + securityToken\uFF09
|
|
86211
|
-
|
|
86212
|
-
#### Sandbox / Production
|
|
86213
|
-
- \u672C\u756A (login.salesforce.com) \u306E\u5834\u5408: Use Sandbox \u3092 "false" \u307E\u305F\u306F\u672A\u5165\u529B
|
|
86214
|
-
- Sandbox (test.salesforce.com) \u306E\u5834\u5408: Use Sandbox \u3092 "true" \u306B\u8A2D\u5B9A`
|
|
86215
|
-
},
|
|
86216
86203
|
dataOverviewInstructions: {
|
|
86217
86204
|
en: `1. Call salesforce_request with GET /services/data/v60.0/sobjects/ to list available sObjects (standard + custom)
|
|
86218
86205
|
2. Call salesforce_request with GET /services/data/v60.0/sobjects/Account/describe to inspect Account fields; repeat for Contact, Opportunity, Lead as needed
|
|
@@ -86225,28 +86212,19 @@ var salesforceOnboarding = new ConnectorOnboarding({
|
|
|
86225
86212
|
|
|
86226
86213
|
// ../connectors/src/connectors/salesforce/parameters.ts
|
|
86227
86214
|
var parameters62 = {
|
|
86228
|
-
|
|
86229
|
-
slug: "
|
|
86230
|
-
name: "
|
|
86231
|
-
description: "Your Salesforce
|
|
86232
|
-
envVarBaseKey: "
|
|
86215
|
+
instanceUrl: new ParameterDefinition({
|
|
86216
|
+
slug: "instance-url",
|
|
86217
|
+
name: "Instance URL",
|
|
86218
|
+
description: "Your Salesforce org's My Domain URL (e.g., https://yourorg.my.salesforce.com). Find it under Setup \u2192 Company Settings \u2192 My Domain \u2192 Current My Domain URL.",
|
|
86219
|
+
envVarBaseKey: "SALESFORCE_INSTANCE_URL",
|
|
86233
86220
|
type: "text",
|
|
86234
86221
|
secret: false,
|
|
86235
86222
|
required: true
|
|
86236
86223
|
}),
|
|
86237
|
-
password: new ParameterDefinition({
|
|
86238
|
-
slug: "password",
|
|
86239
|
-
name: "Password",
|
|
86240
|
-
description: "Your Salesforce account password concatenated with your security token (password + securityToken). The security token is emailed to you when you reset it from Settings \u2192 My Personal Information \u2192 Reset My Security Token.",
|
|
86241
|
-
envVarBaseKey: "SALESFORCE_PASSWORD",
|
|
86242
|
-
type: "text",
|
|
86243
|
-
secret: true,
|
|
86244
|
-
required: true
|
|
86245
|
-
}),
|
|
86246
86224
|
clientId: new ParameterDefinition({
|
|
86247
86225
|
slug: "client-id",
|
|
86248
86226
|
name: "Consumer Key",
|
|
86249
|
-
description: "The Consumer Key (client_id) of your
|
|
86227
|
+
description: "The Consumer Key (client_id) of your External Client App (or Connected App). The app must enable the OAuth 2.0 Client Credentials Flow and bind a Run-As user with API access.",
|
|
86250
86228
|
envVarBaseKey: "SALESFORCE_CLIENT_ID",
|
|
86251
86229
|
type: "text",
|
|
86252
86230
|
secret: false,
|
|
@@ -86255,20 +86233,11 @@ var parameters62 = {
|
|
|
86255
86233
|
clientSecret: new ParameterDefinition({
|
|
86256
86234
|
slug: "client-secret",
|
|
86257
86235
|
name: "Consumer Secret",
|
|
86258
|
-
description: "The Consumer Secret (client_secret) of your
|
|
86236
|
+
description: "The Consumer Secret (client_secret) of your External Client App (or Connected App).",
|
|
86259
86237
|
envVarBaseKey: "SALESFORCE_CLIENT_SECRET",
|
|
86260
86238
|
type: "text",
|
|
86261
86239
|
secret: true,
|
|
86262
86240
|
required: true
|
|
86263
|
-
}),
|
|
86264
|
-
isSandbox: new ParameterDefinition({
|
|
86265
|
-
slug: "is-sandbox",
|
|
86266
|
-
name: "Use Sandbox",
|
|
86267
|
-
description: 'Set to "true" to authenticate against a Salesforce sandbox (test.salesforce.com) instead of production (login.salesforce.com). Defaults to "false".',
|
|
86268
|
-
envVarBaseKey: "SALESFORCE_IS_SANDBOX",
|
|
86269
|
-
type: "text",
|
|
86270
|
-
secret: false,
|
|
86271
|
-
required: false
|
|
86272
86241
|
})
|
|
86273
86242
|
};
|
|
86274
86243
|
|
|
@@ -86299,10 +86268,17 @@ var outputSchema75 = z77.discriminatedUnion("success", [
|
|
|
86299
86268
|
error: z77.string()
|
|
86300
86269
|
})
|
|
86301
86270
|
]);
|
|
86271
|
+
function normalizeInstanceUrl(raw) {
|
|
86272
|
+
const trimmed = raw.trim().replace(/\/+$/, "");
|
|
86273
|
+
if (!/^https?:\/\//i.test(trimmed)) {
|
|
86274
|
+
return `https://${trimmed}`;
|
|
86275
|
+
}
|
|
86276
|
+
return trimmed;
|
|
86277
|
+
}
|
|
86302
86278
|
var requestTool47 = new ConnectorTool({
|
|
86303
86279
|
name: "request",
|
|
86304
86280
|
description: `Send authenticated requests to the Salesforce REST API.
|
|
86305
|
-
Authentication is handled automatically using the OAuth 2.0
|
|
86281
|
+
Authentication is handled automatically using the OAuth 2.0 Client Credentials Flow (External Client App or Connected App Consumer Key + Secret). An access token is obtained on each request, so the tool user only provides the API path.
|
|
86306
86282
|
Use this tool for all Salesforce interactions: describing sObjects, running SOQL queries (GET /services/data/vXX.X/query?q=...), reading/creating/updating standard (Account, Contact, Opportunity, Lead, Case) and custom objects.
|
|
86307
86283
|
Prefer SOQL via the /query endpoint for filtered, joined, or aggregated reads rather than paginating /sobjects/{Type} endpoints.`,
|
|
86308
86284
|
inputSchema: inputSchema75,
|
|
@@ -86319,20 +86295,16 @@ Prefer SOQL via the /query endpoint for filtered, joined, or aggregated reads ra
|
|
|
86319
86295
|
`[connector-request] salesforce/${connection.name}: ${method} ${path4}`
|
|
86320
86296
|
);
|
|
86321
86297
|
try {
|
|
86322
|
-
const
|
|
86323
|
-
const password = parameters62.password.getValue(connection);
|
|
86298
|
+
const instanceUrlParam = parameters62.instanceUrl.getValue(connection);
|
|
86324
86299
|
const clientId = parameters62.clientId.getValue(connection);
|
|
86325
86300
|
const clientSecret = parameters62.clientSecret.getValue(connection);
|
|
86326
|
-
const
|
|
86327
|
-
const loginHost = isSandbox ? "https://test.salesforce.com" : "https://login.salesforce.com";
|
|
86301
|
+
const instanceUrl = normalizeInstanceUrl(instanceUrlParam);
|
|
86328
86302
|
const tokenBody = new URLSearchParams({
|
|
86329
|
-
grant_type: "
|
|
86303
|
+
grant_type: "client_credentials",
|
|
86330
86304
|
client_id: clientId,
|
|
86331
|
-
client_secret: clientSecret
|
|
86332
|
-
username,
|
|
86333
|
-
password
|
|
86305
|
+
client_secret: clientSecret
|
|
86334
86306
|
});
|
|
86335
|
-
const tokenRes = await fetch(`${
|
|
86307
|
+
const tokenRes = await fetch(`${instanceUrl}/services/oauth2/token`, {
|
|
86336
86308
|
method: "POST",
|
|
86337
86309
|
headers: {
|
|
86338
86310
|
"Content-Type": "application/x-www-form-urlencoded"
|
|
@@ -86347,13 +86319,14 @@ Prefer SOQL via the /query endpoint for filtered, joined, or aggregated reads ra
|
|
|
86347
86319
|
};
|
|
86348
86320
|
}
|
|
86349
86321
|
const tokenJson = await tokenRes.json();
|
|
86350
|
-
if (!tokenJson.access_token
|
|
86322
|
+
if (!tokenJson.access_token) {
|
|
86351
86323
|
return {
|
|
86352
86324
|
success: false,
|
|
86353
|
-
error: "access_token
|
|
86325
|
+
error: "access_token not found in token response"
|
|
86354
86326
|
};
|
|
86355
86327
|
}
|
|
86356
|
-
const
|
|
86328
|
+
const resolvedInstanceUrl = tokenJson.instance_url ?? instanceUrl;
|
|
86329
|
+
const url = `${resolvedInstanceUrl}${path4.startsWith("/") ? "" : "/"}${path4}`;
|
|
86357
86330
|
const controller = new AbortController();
|
|
86358
86331
|
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS59);
|
|
86359
86332
|
try {
|
|
@@ -86402,7 +86375,7 @@ Prefer SOQL via the /query endpoint for filtered, joined, or aggregated reads ra
|
|
|
86402
86375
|
var tools62 = { request: requestTool47 };
|
|
86403
86376
|
var salesforceConnector = new ConnectorPlugin({
|
|
86404
86377
|
slug: "salesforce",
|
|
86405
|
-
authType: AUTH_TYPES.
|
|
86378
|
+
authType: AUTH_TYPES.API_KEY,
|
|
86406
86379
|
name: "Salesforce",
|
|
86407
86380
|
description: "Connect to Salesforce CRM for accounts, contacts, opportunities, leads, cases, and custom objects via SOQL and the REST API.",
|
|
86408
86381
|
iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/6vZlbrUKhxXIiuvWJlb8YB/bbc5e08b88de46c8ed338a74c7d0abb3/salesforce-icon.png",
|
|
@@ -86412,7 +86385,7 @@ var salesforceConnector = new ConnectorPlugin({
|
|
|
86412
86385
|
systemPrompt: {
|
|
86413
86386
|
en: `### Tools
|
|
86414
86387
|
|
|
86415
|
-
- \`salesforce_request\`: The only way to call the Salesforce REST API. Use it to run SOQL queries, describe sObjects, and read/create/update/delete standard (Account, Contact, Opportunity, Lead, Case) and custom objects. Authentication (OAuth 2.0
|
|
86388
|
+
- \`salesforce_request\`: The only way to call the Salesforce REST API. Use it to run SOQL queries, describe sObjects, and read/create/update/delete standard (Account, Contact, Opportunity, Lead, Case) and custom objects. Authentication (OAuth 2.0 Client Credentials Flow against the External Client App / Connected App) is configured automatically \u2014 an access token is resolved on each request against the configured org instance URL. Prefer SOQL via \`GET /services/data/v60.0/query?q=...\` over paginating \`/sobjects/{Type}\` endpoints for filtered or joined reads.
|
|
86416
86389
|
|
|
86417
86390
|
### Business Logic
|
|
86418
86391
|
|
|
@@ -86458,9 +86431,8 @@ export default async function handler(c: Context) {
|
|
|
86458
86431
|
|
|
86459
86432
|
### Salesforce REST API Reference
|
|
86460
86433
|
|
|
86461
|
-
-
|
|
86462
|
-
-
|
|
86463
|
-
- Base path after login: \`{instance_url}/services/data/v60.0\`
|
|
86434
|
+
- Token endpoint: \`POST {instance_url}/services/oauth2/token\` (grant_type=client_credentials + client_id/secret)
|
|
86435
|
+
- Base path: \`{instance_url}/services/data/v60.0\` where instance_url is the org's My Domain URL
|
|
86464
86436
|
- Authentication: Bearer token (handled automatically per request)
|
|
86465
86437
|
- Pagination (SOQL): follow \`nextRecordsUrl\` from the response (absolute path starting with \`/services/data/v60.0/query/...\`)
|
|
86466
86438
|
|
|
@@ -86484,7 +86456,7 @@ export default async function handler(c: Context) {
|
|
|
86484
86456
|
- Parent-to-child subquery: \`SELECT Id, Name, (SELECT Id, Email FROM Contacts) FROM Account\``,
|
|
86485
86457
|
ja: `### \u30C4\u30FC\u30EB
|
|
86486
86458
|
|
|
86487
|
-
- \`salesforce_request\`: Salesforce REST API \u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002SOQL \u30AF\u30A8\u30EA\u306E\u5B9F\u884C\u3001sObject \u306E describe\u3001\u6A19\u6E96\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\uFF08Account, Contact, Opportunity, Lead, Case\uFF09\u3084\u30AB\u30B9\u30BF\u30E0\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u8AAD\u307F\u66F8\u304D\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\
|
|
86459
|
+
- \`salesforce_request\`: Salesforce REST API \u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002SOQL \u30AF\u30A8\u30EA\u306E\u5B9F\u884C\u3001sObject \u306E describe\u3001\u6A19\u6E96\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\uFF08Account, Contact, Opportunity, Lead, Case\uFF09\u3084\u30AB\u30B9\u30BF\u30E0\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u8AAD\u307F\u66F8\u304D\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08External Client App / Connected App + OAuth 2.0 Client Credentials Flow\uFF09\u306F\u81EA\u52D5\u3067\u884C\u308F\u308C\u3001\u8A2D\u5B9A\u3055\u308C\u305F\u7D44\u7E54\u306E instance URL \u306B\u5BFE\u3057\u3066\u30EA\u30AF\u30A8\u30B9\u30C8\u3054\u3068\u306B\u30A2\u30AF\u30BB\u30B9\u30C8\u30FC\u30AF\u30F3\u304C\u89E3\u6C7A\u3055\u308C\u307E\u3059\u3002\u30D5\u30A3\u30EB\u30BF\u3084\u7D50\u5408\u306E\u3042\u308B\u8AAD\u307F\u53D6\u308A\u3067\u306F \`/sobjects/{Type}\` \u3092\u30DA\u30FC\u30B8\u30F3\u30B0\u3059\u308B\u306E\u3067\u306F\u306A\u304F\u3001\`GET /services/data/v60.0/query?q=...\` \u306E SOQL \u3092\u512A\u5148\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
86488
86460
|
|
|
86489
86461
|
### Business Logic
|
|
86490
86462
|
|
|
@@ -86530,9 +86502,8 @@ export default async function handler(c: Context) {
|
|
|
86530
86502
|
|
|
86531
86503
|
### Salesforce REST API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
86532
86504
|
|
|
86533
|
-
- \
|
|
86534
|
-
- \
|
|
86535
|
-
- \u30ED\u30B0\u30A4\u30F3\u5F8C\u306E\u30D9\u30FC\u30B9\u30D1\u30B9: \`{instance_url}/services/data/v60.0\`
|
|
86505
|
+
- \u30C8\u30FC\u30AF\u30F3\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8: \`POST {instance_url}/services/oauth2/token\`\uFF08grant_type=client_credentials + client_id/secret\uFF09
|
|
86506
|
+
- \u30D9\u30FC\u30B9\u30D1\u30B9: \`{instance_url}/services/data/v60.0\`\uFF08instance_url \u306F\u7D44\u7E54\u306E My Domain URL\uFF09
|
|
86536
86507
|
- \u8A8D\u8A3C: Bearer \u30C8\u30FC\u30AF\u30F3\uFF08\u30EA\u30AF\u30A8\u30B9\u30C8\u3054\u3068\u306B\u81EA\u52D5\u8A2D\u5B9A\uFF09
|
|
86537
86508
|
- \u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\uFF08SOQL\uFF09: \u30EC\u30B9\u30DD\u30F3\u30B9\u306E \`nextRecordsUrl\`\uFF08\`/services/data/v60.0/query/...\` \u304B\u3089\u59CB\u307E\u308B\u7D76\u5BFE\u30D1\u30B9\uFF09\u3092\u8FBF\u308B
|
|
86538
86509
|
|
|
@@ -86774,7 +86745,7 @@ var influxdbConnector = new ConnectorPlugin({
|
|
|
86774
86745
|
description: "Connect to InfluxDB (Cloud or OSS) to query time-series data with SQL, InfluxQL, or Flux and to write line protocol.",
|
|
86775
86746
|
iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/J1JauVRNmahSVTVrpPfQK/18350d8d3f2dc3be25e8e36ee52914a0/influxdb.png",
|
|
86776
86747
|
parameters: parameters63,
|
|
86777
|
-
releaseFlag: { dev1: true, dev2:
|
|
86748
|
+
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
86778
86749
|
onboarding: influxdbOnboarding,
|
|
86779
86750
|
systemPrompt: {
|
|
86780
86751
|
en: `### Variant Detection
|