@squadbase/vite-server 0.1.17-dev.24af54e → 0.1.17-dev.423ee34

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 (77) hide show
  1. package/dist/cli/index.js +4873 -1073
  2. package/dist/connectors/airtable-oauth.js +78 -11
  3. package/dist/connectors/airtable.js +74 -11
  4. package/dist/connectors/amplitude.js +38 -11
  5. package/dist/connectors/anthropic.js +4 -2
  6. package/dist/connectors/asana.js +67 -13
  7. package/dist/connectors/attio.js +60 -16
  8. package/dist/connectors/aws-billing.js +38 -11
  9. package/dist/connectors/azure-sql.js +64 -13
  10. package/dist/connectors/backlog-api-key.js +70 -18
  11. package/dist/connectors/clickup.js +80 -13
  12. package/dist/connectors/cosmosdb.js +42 -15
  13. package/dist/connectors/customerio.js +39 -12
  14. package/dist/connectors/dbt.js +716 -28
  15. package/dist/connectors/freshdesk.js +112 -11
  16. package/dist/connectors/freshsales.js +38 -11
  17. package/dist/connectors/freshservice.js +38 -11
  18. package/dist/connectors/gamma.js +47 -20
  19. package/dist/connectors/gemini.js +4 -2
  20. package/dist/connectors/github.js +42 -15
  21. package/dist/connectors/gmail-oauth.js +38 -13
  22. package/dist/connectors/gmail.js +34 -7
  23. package/dist/connectors/google-ads.js +38 -11
  24. package/dist/connectors/google-analytics-oauth.js +182 -28
  25. package/dist/connectors/google-analytics.js +653 -104
  26. package/dist/connectors/google-audit-log.js +34 -7
  27. package/dist/connectors/google-calendar-oauth.js +91 -18
  28. package/dist/connectors/google-calendar.js +91 -14
  29. package/dist/connectors/google-docs.js +38 -13
  30. package/dist/connectors/google-drive.js +60 -13
  31. package/dist/connectors/google-search-console-oauth.js +156 -20
  32. package/dist/connectors/google-sheets.js +36 -9
  33. package/dist/connectors/google-slides.js +38 -13
  34. package/dist/connectors/grafana.js +75 -13
  35. package/dist/connectors/hubspot-oauth.js +69 -12
  36. package/dist/connectors/hubspot.js +55 -12
  37. package/dist/connectors/influxdb.js +38 -11
  38. package/dist/connectors/intercom-oauth.js +100 -15
  39. package/dist/connectors/intercom.js +42 -15
  40. package/dist/connectors/jdbc.js +36 -9
  41. package/dist/connectors/jira-api-key.js +98 -14
  42. package/dist/connectors/kintone-api-token.js +96 -21
  43. package/dist/connectors/kintone.js +84 -14
  44. package/dist/connectors/linear.js +84 -15
  45. package/dist/connectors/linkedin-ads.js +71 -17
  46. package/dist/connectors/mailchimp-oauth.js +36 -9
  47. package/dist/connectors/mailchimp.js +36 -9
  48. package/dist/connectors/meta-ads-oauth.js +63 -17
  49. package/dist/connectors/meta-ads.js +65 -17
  50. package/dist/connectors/mixpanel.js +38 -11
  51. package/dist/connectors/monday.js +39 -12
  52. package/dist/connectors/mongodb.js +38 -11
  53. package/dist/connectors/notion-oauth.js +88 -14
  54. package/dist/connectors/notion.js +90 -14
  55. package/dist/connectors/openai.js +4 -2
  56. package/dist/connectors/oracle.js +78 -20
  57. package/dist/connectors/outlook-oauth.js +48 -23
  58. package/dist/connectors/powerbi-oauth.js +321 -49
  59. package/dist/connectors/salesforce.js +72 -12
  60. package/dist/connectors/semrush.js +374 -52
  61. package/dist/connectors/sentry.js +66 -13
  62. package/dist/connectors/shopify-oauth.js +71 -13
  63. package/dist/connectors/shopify.js +38 -11
  64. package/dist/connectors/sqlserver.js +64 -13
  65. package/dist/connectors/stripe-api-key.js +96 -18
  66. package/dist/connectors/stripe-oauth.js +98 -22
  67. package/dist/connectors/supabase.js +55 -11
  68. package/dist/connectors/tableau.js +262 -92
  69. package/dist/connectors/tiktok-ads.js +67 -19
  70. package/dist/connectors/wix-store.js +38 -11
  71. package/dist/connectors/zendesk-oauth.js +83 -15
  72. package/dist/connectors/zendesk.js +42 -15
  73. package/dist/index.d.ts +1 -0
  74. package/dist/index.js +4902 -1077
  75. package/dist/main.js +4891 -1071
  76. package/dist/vite-plugin.js +4871 -1071
  77. package/package.json +1 -1
@@ -16,6 +16,7 @@ var init_parameter_definition = __esm({
16
16
  type;
17
17
  secret;
18
18
  required;
19
+ isDeprecated;
19
20
  constructor(config) {
20
21
  this.slug = config.slug;
21
22
  this.name = config.name;
@@ -24,6 +25,7 @@ var init_parameter_definition = __esm({
24
25
  this.type = config.type;
25
26
  this.secret = config.secret;
26
27
  this.required = config.required;
28
+ this.isDeprecated = config.isDeprecated ?? false;
27
29
  }
28
30
  /**
29
31
  * Get the parameter value from a ConnectorConnectionObject.
@@ -253,7 +255,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
253
255
  /**
254
256
  * Create tools for connections that belong to this connector.
255
257
  * Filters connections by connectorKey internally.
256
- * Returns tools keyed as `${connectorKey}_${toolName}`.
258
+ * Returns tools keyed as `connector_${connectorKey}_${toolName}`.
257
259
  */
258
260
  createTools(connections, config, opts) {
259
261
  const myConnections = connections.filter(
@@ -263,7 +265,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
263
265
  for (const t of Object.values(this.tools)) {
264
266
  const tool = t.createTool(myConnections, config);
265
267
  const originalToModelOutput = tool.toModelOutput;
266
- result[`${this.connectorKey}_${t.name}`] = {
268
+ result[`connector_${this.connectorKey}_${t.name}`] = {
267
269
  ...tool,
268
270
  toModelOutput: async (options) => {
269
271
  if (!originalToModelOutput) {
@@ -319,19 +321,34 @@ async function runSetupFlow(flow, params, ctx, config) {
319
321
  };
320
322
  let state = flow.initialState();
321
323
  let answerIdx = 0;
324
+ const pendingParameterUpdates = [];
322
325
  for (const step of flow.steps) {
323
326
  const ans = ctx.answers[answerIdx];
324
327
  if (ans && ans.questionSlug === step.slug) {
325
328
  state = step.applyAnswer(state, ans.answer);
329
+ if (step.toParameterUpdates) {
330
+ pendingParameterUpdates.push(...step.toParameterUpdates(state));
331
+ }
326
332
  answerIdx += 1;
327
333
  continue;
328
334
  }
335
+ const resolvedAllowFreeText = step.allowFreeText !== void 0 ? step.allowFreeText : true;
329
336
  if (step.type === "text") {
337
+ if (step.fetchOptions) {
338
+ const options2 = await step.fetchOptions(state, runtime);
339
+ if (options2.length === 0) {
340
+ continue;
341
+ }
342
+ }
330
343
  return {
331
344
  type: "nextQuestion",
332
345
  questionSlug: step.slug,
333
346
  question: step.question[ctx.language],
334
- questionType: "text"
347
+ questionType: "text",
348
+ allowFreeText: resolvedAllowFreeText,
349
+ ...pendingParameterUpdates.length > 0 && {
350
+ parameterUpdates: pendingParameterUpdates
351
+ }
335
352
  };
336
353
  }
337
354
  const options = step.fetchOptions ? await step.fetchOptions(state, runtime) : [];
@@ -343,11 +360,21 @@ async function runSetupFlow(flow, params, ctx, config) {
343
360
  questionSlug: step.slug,
344
361
  question: step.question[ctx.language],
345
362
  questionType: step.type,
346
- options
363
+ options,
364
+ allowFreeText: resolvedAllowFreeText,
365
+ ...pendingParameterUpdates.length > 0 && {
366
+ parameterUpdates: pendingParameterUpdates
367
+ }
347
368
  };
348
369
  }
349
370
  const dataInvestigationResult = await flow.finalize(state, runtime);
350
- return { type: "fulfilled", dataInvestigationResult };
371
+ return {
372
+ type: "fulfilled",
373
+ dataInvestigationResult,
374
+ ...pendingParameterUpdates.length > 0 && {
375
+ parameterUpdates: pendingParameterUpdates
376
+ }
377
+ };
351
378
  }
352
379
  async function resolveSetupSelection(params) {
353
380
  const { selected, allSentinel, fetchAll, limit } = params;
@@ -638,15 +665,16 @@ var googleAnalyticsOauthOnboarding = new ConnectorOnboarding({
638
665
  - Write only 1 sentence between tool calls, then immediately call the next tool. Skip unnecessary explanations and proceed efficiently`
639
666
  },
640
667
  dataOverviewInstructions: {
641
- en: `1. Call google-analytics-oauth_request with GET properties/{propertyId}/metadata to list available dimensions and metrics
642
- 2. Call google-analytics-oauth_request with POST properties/{propertyId}:runReport using a small date range and basic metrics to verify data availability`,
643
- ja: `1. google-analytics-oauth_request \u3067 GET properties/{propertyId}/metadata \u3092\u547C\u3073\u51FA\u3057\u3001\u5229\u7528\u53EF\u80FD\u306A\u30C7\u30A3\u30E1\u30F3\u30B7\u30E7\u30F3\u3068\u30E1\u30C8\u30EA\u30AF\u30B9\u306E\u4E00\u89A7\u3092\u53D6\u5F97
644
- 2. google-analytics-oauth_request \u3067 POST properties/{propertyId}:runReport \u3092\u77ED\u3044\u671F\u9593\u3068\u57FA\u672C\u30E1\u30C8\u30EA\u30AF\u30B9\u3067\u547C\u3073\u51FA\u3057\u3001\u30C7\u30FC\u30BF\u306E\u53EF\u7528\u6027\u3092\u78BA\u8A8D`
668
+ en: `1. Call connector_google-analytics-oauth_request with GET properties/{propertyId}/metadata to list available dimensions and metrics
669
+ 2. Call connector_google-analytics-oauth_request with POST properties/{propertyId}:runReport using a small date range and basic metrics to verify data availability`,
670
+ ja: `1. connector_google-analytics-oauth_request \u3067 GET properties/{propertyId}/metadata \u3092\u547C\u3073\u51FA\u3057\u3001\u5229\u7528\u53EF\u80FD\u306A\u30C7\u30A3\u30E1\u30F3\u30B7\u30E7\u30F3\u3068\u30E1\u30C8\u30EA\u30AF\u30B9\u306E\u4E00\u89A7\u3092\u53D6\u5F97
671
+ 2. connector_google-analytics-oauth_request \u3067 POST properties/{propertyId}:runReport \u3092\u77ED\u3044\u671F\u9593\u3068\u57FA\u672C\u30E1\u30C8\u30EA\u30AF\u30B9\u3067\u547C\u3073\u51FA\u3057\u3001\u30C7\u30FC\u30BF\u306E\u53EF\u7528\u6027\u3092\u78BA\u8A8D`
645
672
  }
646
673
  });
647
674
 
648
675
  // ../connectors/src/connectors/google-analytics-oauth/setup-flow.ts
649
676
  var ADMIN_BASE_URL3 = "https://analyticsadmin.googleapis.com/v1beta";
677
+ var DATA_BASE_URL = "https://analyticsdata.googleapis.com/v1beta";
650
678
  var ALL_PROPERTIES = "__ALL_PROPERTIES__";
651
679
  var GOOGLE_ANALYTICS_OAUTH_SETUP_MAX_PROPERTIES = 20;
652
680
  async function listAccountSummaries(proxyFetch) {
@@ -677,6 +705,44 @@ async function getProperty(proxyFetch, propertyId) {
677
705
  if (!res.ok) return null;
678
706
  return await res.json();
679
707
  }
708
+ async function getMetadata(proxyFetch, propertyId) {
709
+ try {
710
+ const res = await proxyFetch(
711
+ `${DATA_BASE_URL}/properties/${propertyId}/metadata`,
712
+ { method: "GET" }
713
+ );
714
+ if (!res.ok) return { dimensions: [], metrics: [] };
715
+ const data = await res.json();
716
+ return {
717
+ dimensions: data.dimensions ?? [],
718
+ metrics: data.metrics ?? []
719
+ };
720
+ } catch {
721
+ return { dimensions: [], metrics: [] };
722
+ }
723
+ }
724
+ async function runSampleReport(proxyFetch, propertyId, dimensions, metrics, limit) {
725
+ try {
726
+ const res = await proxyFetch(
727
+ `${DATA_BASE_URL}/properties/${propertyId}:runReport`,
728
+ {
729
+ method: "POST",
730
+ headers: { "Content-Type": "application/json" },
731
+ body: JSON.stringify({
732
+ dateRanges: [{ startDate: "28daysAgo", endDate: "today" }],
733
+ dimensions: dimensions.map((name) => ({ name })),
734
+ metrics: metrics.map((name) => ({ name })),
735
+ limit
736
+ })
737
+ }
738
+ );
739
+ if (!res.ok) return [];
740
+ const data = await res.json();
741
+ return data.rows ?? [];
742
+ } catch {
743
+ return [];
744
+ }
745
+ }
680
746
  var googleAnalyticsOauthSetupFlow = {
681
747
  initialState: () => ({}),
682
748
  steps: [
@@ -760,23 +826,111 @@ var googleAnalyticsOauthSetupFlow = {
760
826
  sections.push("_No properties selected._", "");
761
827
  return sections.join("\n");
762
828
  }
763
- sections.push(
764
- "| Property ID | Display Name | Time Zone | Currency | Industry |"
765
- );
766
- sections.push(
767
- "|-------------|--------------|-----------|----------|----------|"
768
- );
769
829
  for (const propertyId of targetPropertyIds) {
770
830
  const prop = await getProperty(rt.config.proxyFetch, propertyId);
771
- const displayName = (prop?.displayName ?? "-").replace(/\|/g, "\\|");
772
- const timeZone = prop?.timeZone ?? "-";
773
- const currency = prop?.currencyCode ?? "-";
774
- const industry = (prop?.industryCategory ?? "-").replace(/\|/g, "\\|");
775
- sections.push(
776
- `| ${propertyId} | ${displayName} | ${timeZone} | ${currency} | ${industry} |`
831
+ const displayName = prop?.displayName ?? propertyId;
832
+ sections.push(`### Property: ${displayName} (${propertyId})`, "");
833
+ if (prop?.timeZone || prop?.currencyCode || prop?.industryCategory) {
834
+ const details = [];
835
+ if (prop.timeZone) details.push(`Time Zone: ${prop.timeZone}`);
836
+ if (prop.currencyCode) details.push(`Currency: ${prop.currencyCode}`);
837
+ if (prop.industryCategory)
838
+ details.push(`Industry: ${prop.industryCategory}`);
839
+ sections.push(details.join(" | "), "");
840
+ }
841
+ const metadata = await getMetadata(rt.config.proxyFetch, propertyId);
842
+ if (metadata.dimensions.length > 0) {
843
+ const categories = /* @__PURE__ */ new Map();
844
+ for (const d of metadata.dimensions) {
845
+ const cat = d.category || "Other";
846
+ if (!categories.has(cat)) categories.set(cat, []);
847
+ categories.get(cat).push(d.uiName ?? d.apiName ?? "");
848
+ }
849
+ sections.push("#### Available Dimensions", "");
850
+ for (const [cat, dims] of categories) {
851
+ sections.push(
852
+ `- **${cat}**: ${dims.slice(0, 10).join(", ")}${dims.length > 10 ? ` \u2026+${dims.length - 10}` : ""}`
853
+ );
854
+ }
855
+ sections.push("");
856
+ }
857
+ if (metadata.metrics.length > 0) {
858
+ const categories = /* @__PURE__ */ new Map();
859
+ for (const m of metadata.metrics) {
860
+ const cat = m.category || "Other";
861
+ if (!categories.has(cat)) categories.set(cat, []);
862
+ categories.get(cat).push(m.uiName ?? m.apiName ?? "");
863
+ }
864
+ sections.push("#### Available Metrics", "");
865
+ for (const [cat, mets] of categories) {
866
+ sections.push(
867
+ `- **${cat}**: ${mets.slice(0, 10).join(", ")}${mets.length > 10 ? ` \u2026+${mets.length - 10}` : ""}`
868
+ );
869
+ }
870
+ sections.push("");
871
+ }
872
+ const trafficRows = await runSampleReport(
873
+ rt.config.proxyFetch,
874
+ propertyId,
875
+ ["date"],
876
+ ["sessions", "activeUsers", "screenPageViews"],
877
+ 7
878
+ );
879
+ if (trafficRows.length > 0) {
880
+ sections.push("#### Traffic Summary (last 28 days, by date)", "");
881
+ sections.push("| Date | Sessions | Active Users | Page Views |");
882
+ sections.push("|------|----------|-------------|------------|");
883
+ for (const row of trafficRows) {
884
+ const d = row.dimensionValues?.[0]?.value ?? "";
885
+ const s = row.metricValues?.[0]?.value ?? "0";
886
+ const u = row.metricValues?.[1]?.value ?? "0";
887
+ const p = row.metricValues?.[2]?.value ?? "0";
888
+ sections.push(`| ${d} | ${s} | ${u} | ${p} |`);
889
+ }
890
+ sections.push("");
891
+ }
892
+ const channelRows = await runSampleReport(
893
+ rt.config.proxyFetch,
894
+ propertyId,
895
+ ["sessionDefaultChannelGroup"],
896
+ ["sessions", "activeUsers"],
897
+ 10
777
898
  );
899
+ if (channelRows.length > 0) {
900
+ sections.push("#### Top Channels (last 28 days)", "");
901
+ sections.push("| Channel | Sessions | Active Users |");
902
+ sections.push("|---------|----------|-------------|");
903
+ for (const row of channelRows) {
904
+ const ch = row.dimensionValues?.[0]?.value ?? "";
905
+ const s = row.metricValues?.[0]?.value ?? "0";
906
+ const u = row.metricValues?.[1]?.value ?? "0";
907
+ sections.push(`| ${ch} | ${s} | ${u} |`);
908
+ }
909
+ sections.push("");
910
+ }
911
+ const pageRows = await runSampleReport(
912
+ rt.config.proxyFetch,
913
+ propertyId,
914
+ ["pagePath"],
915
+ ["screenPageViews", "activeUsers"],
916
+ 10
917
+ );
918
+ if (pageRows.length > 0) {
919
+ sections.push("#### Top Pages (last 28 days)", "");
920
+ sections.push("| Page Path | Page Views | Active Users |");
921
+ sections.push("|-----------|------------|-------------|");
922
+ for (const row of pageRows) {
923
+ const pg = (row.dimensionValues?.[0]?.value ?? "").replace(
924
+ /\|/g,
925
+ "\\|"
926
+ );
927
+ const v = row.metricValues?.[0]?.value ?? "0";
928
+ const u = row.metricValues?.[1]?.value ?? "0";
929
+ sections.push(`| ${pg} | ${v} | ${u} |`);
930
+ }
931
+ sections.push("");
932
+ }
778
933
  }
779
- sections.push("");
780
934
  return sections.join("\n");
781
935
  }
782
936
  };
@@ -929,9 +1083,9 @@ var googleAnalyticsOauthConnector = new ConnectorPlugin({
929
1083
  systemPrompt: {
930
1084
  en: `### Tools
931
1085
 
932
- - \`google-analytics-oauth_request\`: Send authenticated requests to the GA4 Data API. Use it for running reports, getting metadata, and realtime reports. The {propertyId} placeholder in paths is automatically replaced. Authentication is configured automatically via OAuth.
933
- - \`google-analytics-oauth_listAccounts\`: List accessible Google Analytics accounts. Use during setup to discover available accounts.
934
- - \`google-analytics-oauth_listProperties\`: List GA4 properties for a given account. Use during setup to select the target property.
1086
+ - \`connector_google-analytics-oauth_request\`: Send authenticated requests to the GA4 Data API. Use it for running reports, getting metadata, and realtime reports. The {propertyId} placeholder in paths is automatically replaced. Authentication is configured automatically via OAuth.
1087
+ - \`connector_google-analytics-oauth_listAccounts\`: List accessible Google Analytics accounts. Use during setup to discover available accounts.
1088
+ - \`connector_google-analytics-oauth_listProperties\`: List GA4 properties for a given account. Use during setup to select the target property.
935
1089
 
936
1090
  ### GA4 Data API Reference
937
1091
 
@@ -1001,9 +1155,9 @@ const realtime = await ga.runRealtimeReport({
1001
1155
  \`\`\``,
1002
1156
  ja: `### \u30C4\u30FC\u30EB
1003
1157
 
1004
- - \`google-analytics-oauth_request\`: GA4 Data API\u3078\u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002\u30EC\u30DD\u30FC\u30C8\u306E\u5B9F\u884C\u3001\u30E1\u30BF\u30C7\u30FC\u30BF\u306E\u53D6\u5F97\u3001\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u30EC\u30DD\u30FC\u30C8\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u30D1\u30B9\u5185\u306E{propertyId}\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u306F\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059\u3002OAuth\u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
1005
- - \`google-analytics-oauth_listAccounts\`: \u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306AGoogle Analytics\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306B\u5229\u7528\u53EF\u80FD\u306A\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u78BA\u8A8D\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002
1006
- - \`google-analytics-oauth_listProperties\`: \u6307\u5B9A\u30A2\u30AB\u30A6\u30F3\u30C8\u306EGA4\u30D7\u30ED\u30D1\u30C6\u30A3\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306B\u30BF\u30FC\u30B2\u30C3\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u9078\u629E\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002
1158
+ - \`connector_google-analytics-oauth_request\`: GA4 Data API\u3078\u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002\u30EC\u30DD\u30FC\u30C8\u306E\u5B9F\u884C\u3001\u30E1\u30BF\u30C7\u30FC\u30BF\u306E\u53D6\u5F97\u3001\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u30EC\u30DD\u30FC\u30C8\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u30D1\u30B9\u5185\u306E{propertyId}\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u306F\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059\u3002OAuth\u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
1159
+ - \`connector_google-analytics-oauth_listAccounts\`: \u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306AGoogle Analytics\u30A2\u30AB\u30A6\u30F3\u30C8\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306B\u5229\u7528\u53EF\u80FD\u306A\u30A2\u30AB\u30A6\u30F3\u30C8\u3092\u78BA\u8A8D\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002
1160
+ - \`connector_google-analytics-oauth_listProperties\`: \u6307\u5B9A\u30A2\u30AB\u30A6\u30F3\u30C8\u306EGA4\u30D7\u30ED\u30D1\u30C6\u30A3\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u6642\u306B\u30BF\u30FC\u30B2\u30C3\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u9078\u629E\u3059\u308B\u305F\u3081\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002
1007
1161
 
1008
1162
  ### GA4 Data API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
1009
1163