@squadbase/vite-server 0.1.3-dev.16 → 0.1.3-dev.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/cli/index.js +10906 -26320
  2. package/dist/connectors/airtable-oauth.js +27 -1
  3. package/dist/connectors/airtable.js +27 -1
  4. package/dist/connectors/amplitude.js +27 -1
  5. package/dist/connectors/anthropic.js +27 -1
  6. package/dist/connectors/asana.js +27 -1
  7. package/dist/connectors/attio.js +27 -1
  8. package/dist/connectors/backlog-api-key.js +27 -1
  9. package/dist/connectors/customerio.js +27 -1
  10. package/dist/connectors/dbt.js +27 -1
  11. package/dist/connectors/gamma.js +27 -1
  12. package/dist/connectors/gemini.js +27 -1
  13. package/dist/connectors/gmail-oauth.js +49 -3
  14. package/dist/connectors/gmail.js +36 -10
  15. package/dist/connectors/google-ads.js +56 -12
  16. package/dist/connectors/google-analytics-oauth.js +45 -3
  17. package/dist/connectors/google-analytics.js +33 -7
  18. package/dist/connectors/google-calendar-oauth.js +45 -3
  19. package/dist/connectors/google-calendar.js +45 -15
  20. package/dist/connectors/google-docs.js +58 -12
  21. package/dist/connectors/google-drive.js +69 -11
  22. package/dist/connectors/google-sheets.js +63 -11
  23. package/dist/connectors/google-slides.js +65 -13
  24. package/dist/connectors/grafana.js +27 -1
  25. package/dist/connectors/hubspot-oauth.js +27 -1
  26. package/dist/connectors/hubspot.js +27 -1
  27. package/dist/connectors/intercom-oauth.js +27 -1
  28. package/dist/connectors/intercom.js +27 -1
  29. package/dist/connectors/jira-api-key.js +27 -1
  30. package/dist/connectors/kintone-api-token.js +35 -9
  31. package/dist/connectors/kintone.js +27 -1
  32. package/dist/connectors/linkedin-ads.js +27 -1
  33. package/dist/connectors/mailchimp-oauth.js +27 -1
  34. package/dist/connectors/mailchimp.js +27 -1
  35. package/dist/connectors/mixpanel.js +27 -1
  36. package/dist/connectors/notion-oauth.js +27 -1
  37. package/dist/connectors/notion.js +27 -1
  38. package/dist/connectors/openai.js +27 -1
  39. package/dist/connectors/sentry.js +27 -1
  40. package/dist/connectors/shopify-oauth.js +27 -1
  41. package/dist/connectors/shopify.js +27 -1
  42. package/dist/connectors/stripe-api-key.js +27 -1
  43. package/dist/connectors/stripe-oauth.js +27 -1
  44. package/dist/connectors/wix-store.js +27 -1
  45. package/dist/connectors/zendesk-oauth.js +27 -1
  46. package/dist/connectors/zendesk.js +27 -1
  47. package/dist/index.js +302 -98
  48. package/dist/main.js +302 -98
  49. package/dist/vite-plugin.js +302 -98
  50. package/package.json +3 -1
@@ -250,7 +250,33 @@ var ConnectorPlugin = class _ConnectorPlugin {
250
250
  return result;
251
251
  }
252
252
  static deriveKey(slug, authType) {
253
- return authType ? `${slug}-${authType}` : slug;
253
+ if (authType) return `${slug}-${authType}`;
254
+ const LEGACY_NULL_AUTH_TYPE_MAP = {
255
+ // user-password
256
+ "postgresql": "user-password",
257
+ "mysql": "user-password",
258
+ "clickhouse": "user-password",
259
+ "kintone": "user-password",
260
+ "squadbase-db": "user-password",
261
+ // service-account
262
+ "snowflake": "service-account",
263
+ "bigquery": "service-account",
264
+ "google-analytics": "service-account",
265
+ "google-calendar": "service-account",
266
+ "aws-athena": "service-account",
267
+ "redshift": "service-account",
268
+ // api-key
269
+ "databricks": "api-key",
270
+ "dbt": "api-key",
271
+ "airtable": "api-key",
272
+ "openai": "api-key",
273
+ "gemini": "api-key",
274
+ "anthropic": "api-key",
275
+ "wix-store": "api-key"
276
+ };
277
+ const fallbackAuthType = LEGACY_NULL_AUTH_TYPE_MAP[slug];
278
+ if (fallbackAuthType) return `${slug}-${fallbackAuthType}`;
279
+ return slug;
254
280
  }
255
281
  };
256
282
 
@@ -267,10 +293,10 @@ var AUTH_TYPES = {
267
293
  // ../connectors/src/connectors/google-drive/setup.ts
268
294
  var googleDriveOnboarding = new ConnectorOnboarding({
269
295
  dataOverviewInstructions: {
270
- en: `1. Call google-drive_request with GET /files?pageSize=20&fields=files(id,name,mimeType,modifiedTime)&orderBy=modifiedTime desc to list recent files
271
- 2. Call google-drive_request with GET /about?fields=user,storageQuota to get account info and storage usage`,
272
- ja: `1. google-drive_request \u3067 GET /files?pageSize=20&fields=files(id,name,mimeType,modifiedTime)&orderBy=modifiedTime desc \u3092\u547C\u3073\u51FA\u3057\u3001\u6700\u8FD1\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u4E00\u89A7\u8868\u793A
273
- 2. google-drive_request \u3067 GET /about?fields=user,storageQuota \u3092\u547C\u3073\u51FA\u3057\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3068\u30B9\u30C8\u30EC\u30FC\u30B8\u4F7F\u7528\u91CF\u3092\u53D6\u5F97`
296
+ en: `1. Call google-drive-oauth_request with GET /files?pageSize=20&fields=files(id,name,mimeType,modifiedTime)&orderBy=modifiedTime desc to list recent files
297
+ 2. Call google-drive-oauth_request with GET /about?fields=user,storageQuota to get account info and storage usage`,
298
+ ja: `1. google-drive-oauth_request \u3067 GET /files?pageSize=20&fields=files(id,name,mimeType,modifiedTime)&orderBy=modifiedTime desc \u3092\u547C\u3073\u51FA\u3057\u3001\u6700\u8FD1\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u4E00\u89A7\u8868\u793A
299
+ 2. google-drive-oauth_request \u3067 GET /about?fields=user,storageQuota \u3092\u547C\u3073\u51FA\u3057\u3001\u30A2\u30AB\u30A6\u30F3\u30C8\u60C5\u5831\u3068\u30B9\u30C8\u30EC\u30FC\u30B8\u4F7F\u7528\u91CF\u3092\u53D6\u5F97`
274
300
  }
275
301
  });
276
302
 
@@ -414,9 +440,11 @@ var googleDriveConnector = new ConnectorPlugin({
414
440
  ]
415
441
  },
416
442
  systemPrompt: {
417
- en: `### Tools
443
+ en: `### Tools (setup-time only)
444
+
445
+ - \`google-drive-oauth_request\`: Send authenticated requests to the Google Drive API v3 during setup / data overview. Supports GET, POST, and PATCH methods. Authentication is configured automatically via OAuth.
418
446
 
419
- - \`google-drive_request\`: Send authenticated requests to the Google Drive API v3. Supports GET, POST, and PATCH methods. Authentication is configured automatically via OAuth.
447
+ > **Important**: The \`google-drive-oauth_request\` tool is only available at setup time. Inside server-logic handlers, use the SDK (\`connection(id).listFiles\`, 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.
420
448
 
421
449
  ### Google Drive API Reference
422
450
 
@@ -483,7 +511,21 @@ var googleDriveConnector = new ConnectorPlugin({
483
511
 
484
512
  ### Business Logic
485
513
 
486
- 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.
514
+ 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.
515
+
516
+ SDK surface (client created via \`connection(connectionId)\`):
517
+ - \`client.request(path, init?)\` \u2014 low-level authenticated fetch (\`path\` is appended to \`https://www.googleapis.com/drive/v3\`).
518
+ - \`client.listFiles(options?)\` \u2014 list files with optional \`query\`, \`pageSize\`, \`pageToken\`, \`orderBy\`, \`fields\`.
519
+ - \`client.getFile(fileId, fields?)\` \u2014 get file metadata.
520
+ - \`client.createFile(options)\` \u2014 create a file or folder (metadata only).
521
+ - \`client.updateFile(fileId, metadata, addParents?, removeParents?)\` \u2014 rename / move / update.
522
+ - \`client.copyFile(fileId, name, parents?)\` \u2014 copy a file.
523
+ - \`client.downloadFile(fileId)\` \u2014 download binary content (returns a \`Response\`).
524
+ - \`client.exportFile(fileId, mimeType)\` \u2014 export a Google Workspace file to another format.
525
+ - \`client.shareFile(fileId, type, role, emailAddress)\` \u2014 add a permission.
526
+ - \`client.listPermissions(fileId)\` \u2014 list permissions on a file.
527
+
528
+ 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.
487
529
 
488
530
  #### Example
489
531
 
@@ -534,9 +576,11 @@ const copy = await drive.copyFile("fileId123", "Backup Copy");
534
576
  // Move a file to a different folder
535
577
  await drive.updateFile("fileId123", {}, "newFolderId", "oldFolderId");
536
578
  \`\`\``,
537
- ja: `### \u30C4\u30FC\u30EB
579
+ ja: `### \u30C4\u30FC\u30EB\uFF08\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\uFF09
580
+
581
+ - \`google-drive-oauth_request\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3084\u30C7\u30FC\u30BF\u6982\u8981\u628A\u63E1\u6642\u306B Google Drive API v3 \u3078\u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002GET, POST, PATCH \u30E1\u30BD\u30C3\u30C9\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002OAuth \u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
538
582
 
539
- - \`google-drive_request\`: Google Drive API v3\u3078\u306E\u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002GET, POST, PATCH\u30E1\u30BD\u30C3\u30C9\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002OAuth\u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
583
+ > **\u91CD\u8981**: \`google-drive-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).listFiles\` \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
540
584
 
541
585
  ### Google Drive API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
542
586
 
@@ -603,7 +647,21 @@ await drive.updateFile("fileId123", {}, "newFolderId", "oldFolderId");
603
647
 
604
648
  ### Business Logic
605
649
 
606
- \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\u30BFSDK\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
650
+ \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
651
+
652
+ SDK\uFF08\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\uFF09:
653
+ - \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304D fetch\uFF08\`path\` \u306F \`https://www.googleapis.com/drive/v3\` \u306B\u8FFD\u52A0\u3055\u308C\u307E\u3059\uFF09\u3002
654
+ - \`client.listFiles(options?)\` \u2014 \`query\`, \`pageSize\`, \`pageToken\`, \`orderBy\`, \`fields\` \u30AA\u30D7\u30B7\u30E7\u30F3\u4ED8\u304D\u3067\u30D5\u30A1\u30A4\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\u3002
655
+ - \`client.getFile(fileId, fields?)\` \u2014 \u30D5\u30A1\u30A4\u30EB\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3002
656
+ - \`client.createFile(options)\` \u2014 \u30D5\u30A1\u30A4\u30EB\u307E\u305F\u306F\u30D5\u30A9\u30EB\u30C0\u3092\u4F5C\u6210\uFF08\u30E1\u30BF\u30C7\u30FC\u30BF\u306E\u307F\uFF09\u3002
657
+ - \`client.updateFile(fileId, metadata, addParents?, removeParents?)\` \u2014 \u540D\u524D\u5909\u66F4\u30FB\u79FB\u52D5\u30FB\u66F4\u65B0\u3002
658
+ - \`client.copyFile(fileId, name, parents?)\` \u2014 \u30D5\u30A1\u30A4\u30EB\u3092\u30B3\u30D4\u30FC\u3002
659
+ - \`client.downloadFile(fileId)\` \u2014 \u30D0\u30A4\u30CA\u30EA\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\uFF08\`Response\` \u3092\u8FD4\u3059\uFF09\u3002
660
+ - \`client.exportFile(fileId, mimeType)\` \u2014 Google Workspace \u30D5\u30A1\u30A4\u30EB\u3092\u5225\u5F62\u5F0F\u306B\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3002
661
+ - \`client.shareFile(fileId, type, role, emailAddress)\` \u2014 \u30D1\u30FC\u30DF\u30C3\u30B7\u30E7\u30F3\u3092\u8FFD\u52A0\u3002
662
+ - \`client.listPermissions(fileId)\` \u2014 \u30D5\u30A1\u30A4\u30EB\u306E\u30D1\u30FC\u30DF\u30C3\u30B7\u30E7\u30F3\u4E00\u89A7\u3092\u53D6\u5F97\u3002
663
+
664
+ \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
607
665
 
608
666
  #### Example
609
667
 
@@ -209,7 +209,33 @@ var ConnectorPlugin = class _ConnectorPlugin {
209
209
  return result;
210
210
  }
211
211
  static deriveKey(slug, authType) {
212
- return authType ? `${slug}-${authType}` : slug;
212
+ if (authType) return `${slug}-${authType}`;
213
+ const LEGACY_NULL_AUTH_TYPE_MAP = {
214
+ // user-password
215
+ "postgresql": "user-password",
216
+ "mysql": "user-password",
217
+ "clickhouse": "user-password",
218
+ "kintone": "user-password",
219
+ "squadbase-db": "user-password",
220
+ // service-account
221
+ "snowflake": "service-account",
222
+ "bigquery": "service-account",
223
+ "google-analytics": "service-account",
224
+ "google-calendar": "service-account",
225
+ "aws-athena": "service-account",
226
+ "redshift": "service-account",
227
+ // api-key
228
+ "databricks": "api-key",
229
+ "dbt": "api-key",
230
+ "airtable": "api-key",
231
+ "openai": "api-key",
232
+ "gemini": "api-key",
233
+ "anthropic": "api-key",
234
+ "wix-store": "api-key"
235
+ };
236
+ const fallbackAuthType = LEGACY_NULL_AUTH_TYPE_MAP[slug];
237
+ if (fallbackAuthType) return `${slug}-${fallbackAuthType}`;
238
+ return slug;
213
239
  }
214
240
  };
215
241
 
@@ -226,10 +252,10 @@ var AUTH_TYPES = {
226
252
  // ../connectors/src/connectors/google-sheets/setup.ts
227
253
  var googleSheetsOnboarding = new ConnectorOnboarding({
228
254
  dataOverviewInstructions: {
229
- en: `1. Create a new spreadsheet with google-sheets_request (POST with body { properties: { title: "..." } }) or use an existing spreadsheet ID.
230
- 2. Call google-sheets_request with GET /{spreadsheetId} to fetch spreadsheet metadata (sheet names and properties).`,
231
- ja: `1. google-sheets_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
232
- 2. google-sheets_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`
255
+ en: `1. Create a new spreadsheet with google-sheets-oauth_request (POST with body { properties: { title: "..." } }) or use an existing spreadsheet ID.
256
+ 2. Call google-sheets-oauth_request with GET /{spreadsheetId} to fetch spreadsheet metadata (sheet names and properties).`,
257
+ 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
258
+ 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`
233
259
  }
234
260
  });
235
261
 
@@ -372,9 +398,11 @@ var googleSheetsConnector = new ConnectorPlugin({
372
398
  ]
373
399
  },
374
400
  systemPrompt: {
375
- en: `### Tools
401
+ en: `### Tools (setup-time only)
402
+
403
+ - \`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.
376
404
 
377
- - \`google-sheets_request\`: The way to call the Google Sheets API. 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.
405
+ > **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.
378
406
 
379
407
  ### Google Sheets API Reference
380
408
 
@@ -406,7 +434,18 @@ var googleSheetsConnector = new ConnectorPlugin({
406
434
 
407
435
  ### Business Logic
408
436
 
409
- 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.
437
+ 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.
438
+
439
+ SDK surface (client created via \`connection(connectionId)\`):
440
+ - \`client.request(path, init?)\` \u2014 low-level authenticated fetch (\`path\` is appended to \`https://sheets.googleapis.com/v4/spreadsheets\`).
441
+ - \`client.getSpreadsheet(spreadsheetId)\` \u2014 fetch spreadsheet metadata.
442
+ - \`client.getValues(spreadsheetId, range)\` \u2014 read a range (A1 notation).
443
+ - \`client.batchGetValues(spreadsheetId, ranges)\` \u2014 read multiple ranges.
444
+ - \`client.updateValues(spreadsheetId, range, values)\` \u2014 write values to a range.
445
+ - \`client.appendValues(spreadsheetId, range, values)\` \u2014 append rows after the last row.
446
+ - \`client.createSpreadsheet(title, sheetNames?)\` \u2014 create a new spreadsheet.
447
+
448
+ 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.
410
449
 
411
450
  #### Example
412
451
 
@@ -433,9 +472,11 @@ await sheets.updateValues(spreadsheetId, "Sheet1!A1:B2", [["Name", "Score"], ["A
433
472
  // Append rows
434
473
  await sheets.appendValues(spreadsheetId, "Sheet1!A1", [["Bob", "95"], ["Charlie", "88"]]);
435
474
  \`\`\``,
436
- ja: `### \u30C4\u30FC\u30EB
475
+ ja: `### \u30C4\u30FC\u30EB\uFF08\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\uFF09
437
476
 
438
- - \`google-sheets_request\`: Google Sheets API\u3092\u547C\u3073\u51FA\u3059\u624B\u6BB5\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
477
+ - \`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
478
+
479
+ > **\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
439
480
 
440
481
  ### Google Sheets API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
441
482
 
@@ -467,7 +508,18 @@ await sheets.appendValues(spreadsheetId, "Sheet1!A1", [["Bob", "95"], ["Charlie"
467
508
 
468
509
  ### Business Logic
469
510
 
470
- \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\u30BFSDK\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
511
+ \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
512
+
513
+ SDK\uFF08\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\uFF09:
514
+ - \`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
515
+ - \`client.getSpreadsheet(spreadsheetId)\` \u2014 \u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3002
516
+ - \`client.getValues(spreadsheetId, range)\` \u2014 \u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97\uFF08A1 \u8868\u8A18\uFF09\u3002
517
+ - \`client.batchGetValues(spreadsheetId, ranges)\` \u2014 \u8907\u6570\u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97\u3002
518
+ - \`client.updateValues(spreadsheetId, range, values)\` \u2014 \u7BC4\u56F2\u306B\u5024\u3092\u66F8\u304D\u8FBC\u307F\u3002
519
+ - \`client.appendValues(spreadsheetId, range, values)\` \u2014 \u6700\u7D42\u884C\u306E\u5F8C\u306B\u884C\u3092\u8FFD\u52A0\u3002
520
+ - \`client.createSpreadsheet(title, sheetNames?)\` \u2014 \u65B0\u3057\u3044\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u3092\u4F5C\u6210\u3002
521
+
522
+ \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
471
523
 
472
524
  #### Example
473
525
 
@@ -173,7 +173,33 @@ var ConnectorPlugin = class _ConnectorPlugin {
173
173
  return result;
174
174
  }
175
175
  static deriveKey(slug, authType) {
176
- return authType ? `${slug}-${authType}` : slug;
176
+ if (authType) return `${slug}-${authType}`;
177
+ const LEGACY_NULL_AUTH_TYPE_MAP = {
178
+ // user-password
179
+ "postgresql": "user-password",
180
+ "mysql": "user-password",
181
+ "clickhouse": "user-password",
182
+ "kintone": "user-password",
183
+ "squadbase-db": "user-password",
184
+ // service-account
185
+ "snowflake": "service-account",
186
+ "bigquery": "service-account",
187
+ "google-analytics": "service-account",
188
+ "google-calendar": "service-account",
189
+ "aws-athena": "service-account",
190
+ "redshift": "service-account",
191
+ // api-key
192
+ "databricks": "api-key",
193
+ "dbt": "api-key",
194
+ "airtable": "api-key",
195
+ "openai": "api-key",
196
+ "gemini": "api-key",
197
+ "anthropic": "api-key",
198
+ "wix-store": "api-key"
199
+ };
200
+ const fallbackAuthType = LEGACY_NULL_AUTH_TYPE_MAP[slug];
201
+ if (fallbackAuthType) return `${slug}-${fallbackAuthType}`;
202
+ return slug;
177
203
  }
178
204
  };
179
205
 
@@ -190,10 +216,10 @@ var AUTH_TYPES = {
190
216
  // ../connectors/src/connectors/google-slides/setup.ts
191
217
  var googleSlidesOnboarding = new ConnectorOnboarding({
192
218
  dataOverviewInstructions: {
193
- en: `1. Create a new presentation with google-slides_request (POST with body { title: "..." }) or use an existing presentation ID.
194
- 2. Call google-slides_request with GET /{presentationId} to fetch presentation metadata (title, slide count, layout info).`,
195
- ja: `1. google-slides_request \u3092 POST\uFF08Body: { title: "..." }\uFF09\u3067\u547C\u3073\u51FA\u3057\u3066\u65B0\u3057\u3044\u30D7\u30EC\u30BC\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3\u3092\u4F5C\u6210\u3059\u308B\u304B\u3001\u65E2\u5B58\u306E\u30D7\u30EC\u30BC\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3ID\u3092\u5229\u7528\u3057\u307E\u3059\u3002
196
- 2. google-slides_request \u3067 GET /{presentationId} \u3092\u547C\u3073\u51FA\u3057\u3001\u30D7\u30EC\u30BC\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\uFF08\u30BF\u30A4\u30C8\u30EB\u3001\u30B9\u30E9\u30A4\u30C9\u6570\u3001\u30EC\u30A4\u30A2\u30A6\u30C8\u60C5\u5831\uFF09\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002`
219
+ en: `1. Create a new presentation with google-slides-oauth_request (POST with body { title: "..." }) or use an existing presentation ID.
220
+ 2. Call google-slides-oauth_request with GET /{presentationId} to fetch presentation metadata (title, slide count, layout info).`,
221
+ ja: `1. google-slides-oauth_request \u3092 POST\uFF08Body: { title: "..." }\uFF09\u3067\u547C\u3073\u51FA\u3057\u3066\u65B0\u3057\u3044\u30D7\u30EC\u30BC\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3\u3092\u4F5C\u6210\u3059\u308B\u304B\u3001\u65E2\u5B58\u306E\u30D7\u30EC\u30BC\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3ID\u3092\u5229\u7528\u3057\u307E\u3059\u3002
222
+ 2. google-slides-oauth_request \u3067 GET /{presentationId} \u3092\u547C\u3073\u51FA\u3057\u3001\u30D7\u30EC\u30BC\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\uFF08\u30BF\u30A4\u30C8\u30EB\u3001\u30B9\u30E9\u30A4\u30C9\u6570\u3001\u30EC\u30A4\u30A2\u30A6\u30C8\u60C5\u5831\uFF09\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002`
197
223
  }
198
224
  });
199
225
 
@@ -336,9 +362,11 @@ var googleSlidesConnector = new ConnectorPlugin({
336
362
  ]
337
363
  },
338
364
  systemPrompt: {
339
- en: `### Tools
365
+ en: `### Tools (setup-time only)
366
+
367
+ - \`google-slides-oauth_request\`: Call the Google Slides API directly during setup / data overview. Supports read and write operations. Use it to get presentation metadata, slide content, create new presentations, and modify slides. Authentication is configured automatically via OAuth.
340
368
 
341
- - \`google-slides_request\`: The way to call the Google Slides API. Supports read and write operations. Use it to get presentation metadata, slide content, create new presentations, and modify slides. Authentication is configured automatically via OAuth.
369
+ > **Important**: The \`google-slides-oauth_request\` tool is only available at setup time. Inside server-logic handlers, use the SDK (\`connection(id).createPresentation\`, 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.
342
370
 
343
371
  ### Google Slides API Reference
344
372
 
@@ -375,7 +403,14 @@ var googleSlidesConnector = new ConnectorPlugin({
375
403
 
376
404
  ### Business Logic
377
405
 
378
- 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.
406
+ 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 import from \`INTERNAL_SQUADBASE_*\` env vars \u2014 the SDK takes care of OAuth.
407
+
408
+ SDK surface (client created via \`connection(connectionId)\`):
409
+ - \`client.request(path, init?)\` \u2014 low-level authenticated fetch (returns a standard \`Response\`). \`path\` is appended to \`https://slides.googleapis.com/v1/presentations\`.
410
+ - \`client.getPresentation(presentationId)\` \u2014 fetch presentation metadata (title, slides, layouts, masters).
411
+ - \`client.getPage(presentationId, pageObjectId)\` \u2014 fetch one slide page with its elements.
412
+ - \`client.createPresentation(title)\` \u2014 create a new presentation.
413
+ - \`client.batchUpdate(presentationId, requests)\` \u2014 apply one or more requests (createSlide / insertText / createShape / etc.).
379
414
 
380
415
  #### Example
381
416
 
@@ -401,10 +436,16 @@ await slides.batchUpdate(presentationId, [
401
436
  { createSlide: { insertionIndex: 1, slideLayoutReference: { predefinedLayout: "TITLE_AND_BODY" } } },
402
437
  { insertText: { objectId: "someShapeId", text: "Hello, World!" } },
403
438
  ]);
404
- \`\`\``,
405
- ja: `### \u30C4\u30FC\u30EB
439
+ \`\`\`
440
+
441
+ #### Troubleshooting
442
+
443
+ If a handler test fails with \`Connection proxy is not configured\`, retry \u2014 this usually means the sandbox is still initializing. Do NOT abandon the SDK and construct OAuth proxy URLs manually.`,
444
+ ja: `### \u30C4\u30FC\u30EB\uFF08\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306E\u307F\uFF09
406
445
 
407
- - \`google-slides_request\`: Google Slides API\u3092\u547C\u3073\u51FA\u3059\u624B\u6BB5\u3067\u3059\u3002\u8AAD\u307F\u53D6\u308A\u3068\u66F8\u304D\u8FBC\u307F\u306E\u4E21\u65B9\u3092\u30B5\u30DD\u30FC\u30C8\u3057\u307E\u3059\u3002\u30D7\u30EC\u30BC\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u30FB\u30B9\u30E9\u30A4\u30C9\u5185\u5BB9\u306E\u53D6\u5F97\u3001\u65B0\u3057\u3044\u30D7\u30EC\u30BC\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3\u306E\u4F5C\u6210\u3001\u30B9\u30E9\u30A4\u30C9\u306E\u5909\u66F4\u306A\u3069\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002OAuth\u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
446
+ - \`google-slides-oauth_request\`: \u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3084\u30C7\u30FC\u30BF\u6982\u8981\u628A\u63E1\u6642\u306B Google Slides API \u3092\u76F4\u63A5\u53E9\u304F\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\u30D7\u30EC\u30BC\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u30FB\u30B9\u30E9\u30A4\u30C9\u5185\u5BB9\u306E\u53D6\u5F97\u3001\u65B0\u3057\u3044\u30D7\u30EC\u30BC\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3\u306E\u4F5C\u6210\u3001\u30B9\u30E9\u30A4\u30C9\u306E\u5909\u66F4\u306A\u3069\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002OAuth \u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
447
+
448
+ > **\u91CD\u8981**: \`google-slides-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).createPresentation\` \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
408
449
 
409
450
  ### Google Slides API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
410
451
 
@@ -441,7 +482,14 @@ await slides.batchUpdate(presentationId, [
441
482
 
442
483
  ### Business Logic
443
484
 
444
- \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\u30BFSDK\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
485
+ \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
486
+
487
+ SDK\uFF08\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\uFF09:
488
+ - \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304D fetch\uFF08\u6A19\u6E96 \`Response\` \u3092\u8FD4\u3059\uFF09\u3002\`path\` \u306F \`https://slides.googleapis.com/v1/presentations\` \u306B\u8FFD\u52A0\u3055\u308C\u307E\u3059\u3002
489
+ - \`client.getPresentation(presentationId)\` \u2014 \u30D7\u30EC\u30BC\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3002
490
+ - \`client.getPage(presentationId, pageObjectId)\` \u2014 \u7279\u5B9A\u306E\u30B9\u30E9\u30A4\u30C9\u30DA\u30FC\u30B8\u3068\u305D\u306E\u8981\u7D20\u3092\u53D6\u5F97\u3002
491
+ - \`client.createPresentation(title)\` \u2014 \u65B0\u3057\u3044\u30D7\u30EC\u30BC\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3\u3092\u4F5C\u6210\u3002
492
+ - \`client.batchUpdate(presentationId, requests)\` \u2014 createSlide / insertText / createShape \u306A\u3069\u306E\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u307E\u3068\u3081\u3066\u9069\u7528\u3002
445
493
 
446
494
  #### Example
447
495
 
@@ -467,7 +515,11 @@ await slides.batchUpdate(presentationId, [
467
515
  { createSlide: { insertionIndex: 1, slideLayoutReference: { predefinedLayout: "TITLE_AND_BODY" } } },
468
516
  { insertText: { objectId: "someShapeId", text: "Hello, World!" } },
469
517
  ]);
470
- \`\`\``
518
+ \`\`\`
519
+
520
+ #### \u30C8\u30E9\u30D6\u30EB\u30B7\u30E5\u30FC\u30C6\u30A3\u30F3\u30B0
521
+
522
+ \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`
471
523
  },
472
524
  tools
473
525
  });
@@ -270,7 +270,33 @@ var ConnectorPlugin = class _ConnectorPlugin {
270
270
  return result;
271
271
  }
272
272
  static deriveKey(slug, authType) {
273
- return authType ? `${slug}-${authType}` : slug;
273
+ if (authType) return `${slug}-${authType}`;
274
+ const LEGACY_NULL_AUTH_TYPE_MAP = {
275
+ // user-password
276
+ "postgresql": "user-password",
277
+ "mysql": "user-password",
278
+ "clickhouse": "user-password",
279
+ "kintone": "user-password",
280
+ "squadbase-db": "user-password",
281
+ // service-account
282
+ "snowflake": "service-account",
283
+ "bigquery": "service-account",
284
+ "google-analytics": "service-account",
285
+ "google-calendar": "service-account",
286
+ "aws-athena": "service-account",
287
+ "redshift": "service-account",
288
+ // api-key
289
+ "databricks": "api-key",
290
+ "dbt": "api-key",
291
+ "airtable": "api-key",
292
+ "openai": "api-key",
293
+ "gemini": "api-key",
294
+ "anthropic": "api-key",
295
+ "wix-store": "api-key"
296
+ };
297
+ const fallbackAuthType = LEGACY_NULL_AUTH_TYPE_MAP[slug];
298
+ if (fallbackAuthType) return `${slug}-${fallbackAuthType}`;
299
+ return slug;
274
300
  }
275
301
  };
276
302
 
@@ -115,7 +115,33 @@ var ConnectorPlugin = class _ConnectorPlugin {
115
115
  return result;
116
116
  }
117
117
  static deriveKey(slug, authType) {
118
- return authType ? `${slug}-${authType}` : slug;
118
+ if (authType) return `${slug}-${authType}`;
119
+ const LEGACY_NULL_AUTH_TYPE_MAP = {
120
+ // user-password
121
+ "postgresql": "user-password",
122
+ "mysql": "user-password",
123
+ "clickhouse": "user-password",
124
+ "kintone": "user-password",
125
+ "squadbase-db": "user-password",
126
+ // service-account
127
+ "snowflake": "service-account",
128
+ "bigquery": "service-account",
129
+ "google-analytics": "service-account",
130
+ "google-calendar": "service-account",
131
+ "aws-athena": "service-account",
132
+ "redshift": "service-account",
133
+ // api-key
134
+ "databricks": "api-key",
135
+ "dbt": "api-key",
136
+ "airtable": "api-key",
137
+ "openai": "api-key",
138
+ "gemini": "api-key",
139
+ "anthropic": "api-key",
140
+ "wix-store": "api-key"
141
+ };
142
+ const fallbackAuthType = LEGACY_NULL_AUTH_TYPE_MAP[slug];
143
+ if (fallbackAuthType) return `${slug}-${fallbackAuthType}`;
144
+ return slug;
119
145
  }
120
146
  };
121
147
 
@@ -244,7 +244,33 @@ var ConnectorPlugin = class _ConnectorPlugin {
244
244
  return result;
245
245
  }
246
246
  static deriveKey(slug, authType) {
247
- return authType ? `${slug}-${authType}` : slug;
247
+ if (authType) return `${slug}-${authType}`;
248
+ const LEGACY_NULL_AUTH_TYPE_MAP = {
249
+ // user-password
250
+ "postgresql": "user-password",
251
+ "mysql": "user-password",
252
+ "clickhouse": "user-password",
253
+ "kintone": "user-password",
254
+ "squadbase-db": "user-password",
255
+ // service-account
256
+ "snowflake": "service-account",
257
+ "bigquery": "service-account",
258
+ "google-analytics": "service-account",
259
+ "google-calendar": "service-account",
260
+ "aws-athena": "service-account",
261
+ "redshift": "service-account",
262
+ // api-key
263
+ "databricks": "api-key",
264
+ "dbt": "api-key",
265
+ "airtable": "api-key",
266
+ "openai": "api-key",
267
+ "gemini": "api-key",
268
+ "anthropic": "api-key",
269
+ "wix-store": "api-key"
270
+ };
271
+ const fallbackAuthType = LEGACY_NULL_AUTH_TYPE_MAP[slug];
272
+ if (fallbackAuthType) return `${slug}-${fallbackAuthType}`;
273
+ return slug;
248
274
  }
249
275
  };
250
276
 
@@ -115,7 +115,33 @@ var ConnectorPlugin = class _ConnectorPlugin {
115
115
  return result;
116
116
  }
117
117
  static deriveKey(slug, authType) {
118
- return authType ? `${slug}-${authType}` : slug;
118
+ if (authType) return `${slug}-${authType}`;
119
+ const LEGACY_NULL_AUTH_TYPE_MAP = {
120
+ // user-password
121
+ "postgresql": "user-password",
122
+ "mysql": "user-password",
123
+ "clickhouse": "user-password",
124
+ "kintone": "user-password",
125
+ "squadbase-db": "user-password",
126
+ // service-account
127
+ "snowflake": "service-account",
128
+ "bigquery": "service-account",
129
+ "google-analytics": "service-account",
130
+ "google-calendar": "service-account",
131
+ "aws-athena": "service-account",
132
+ "redshift": "service-account",
133
+ // api-key
134
+ "databricks": "api-key",
135
+ "dbt": "api-key",
136
+ "airtable": "api-key",
137
+ "openai": "api-key",
138
+ "gemini": "api-key",
139
+ "anthropic": "api-key",
140
+ "wix-store": "api-key"
141
+ };
142
+ const fallbackAuthType = LEGACY_NULL_AUTH_TYPE_MAP[slug];
143
+ if (fallbackAuthType) return `${slug}-${fallbackAuthType}`;
144
+ return slug;
119
145
  }
120
146
  };
121
147
 
@@ -262,7 +262,33 @@ var ConnectorPlugin = class _ConnectorPlugin {
262
262
  return result;
263
263
  }
264
264
  static deriveKey(slug, authType) {
265
- return authType ? `${slug}-${authType}` : slug;
265
+ if (authType) return `${slug}-${authType}`;
266
+ const LEGACY_NULL_AUTH_TYPE_MAP = {
267
+ // user-password
268
+ "postgresql": "user-password",
269
+ "mysql": "user-password",
270
+ "clickhouse": "user-password",
271
+ "kintone": "user-password",
272
+ "squadbase-db": "user-password",
273
+ // service-account
274
+ "snowflake": "service-account",
275
+ "bigquery": "service-account",
276
+ "google-analytics": "service-account",
277
+ "google-calendar": "service-account",
278
+ "aws-athena": "service-account",
279
+ "redshift": "service-account",
280
+ // api-key
281
+ "databricks": "api-key",
282
+ "dbt": "api-key",
283
+ "airtable": "api-key",
284
+ "openai": "api-key",
285
+ "gemini": "api-key",
286
+ "anthropic": "api-key",
287
+ "wix-store": "api-key"
288
+ };
289
+ const fallbackAuthType = LEGACY_NULL_AUTH_TYPE_MAP[slug];
290
+ if (fallbackAuthType) return `${slug}-${fallbackAuthType}`;
291
+ return slug;
266
292
  }
267
293
  };
268
294
 
@@ -211,7 +211,33 @@ var ConnectorPlugin = class _ConnectorPlugin {
211
211
  return result;
212
212
  }
213
213
  static deriveKey(slug, authType) {
214
- return authType ? `${slug}-${authType}` : slug;
214
+ if (authType) return `${slug}-${authType}`;
215
+ const LEGACY_NULL_AUTH_TYPE_MAP = {
216
+ // user-password
217
+ "postgresql": "user-password",
218
+ "mysql": "user-password",
219
+ "clickhouse": "user-password",
220
+ "kintone": "user-password",
221
+ "squadbase-db": "user-password",
222
+ // service-account
223
+ "snowflake": "service-account",
224
+ "bigquery": "service-account",
225
+ "google-analytics": "service-account",
226
+ "google-calendar": "service-account",
227
+ "aws-athena": "service-account",
228
+ "redshift": "service-account",
229
+ // api-key
230
+ "databricks": "api-key",
231
+ "dbt": "api-key",
232
+ "airtable": "api-key",
233
+ "openai": "api-key",
234
+ "gemini": "api-key",
235
+ "anthropic": "api-key",
236
+ "wix-store": "api-key"
237
+ };
238
+ const fallbackAuthType = LEGACY_NULL_AUTH_TYPE_MAP[slug];
239
+ if (fallbackAuthType) return `${slug}-${fallbackAuthType}`;
240
+ return slug;
215
241
  }
216
242
  };
217
243