@squadbase/vite-server 0.1.2-dev.6 → 0.1.3-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +1962 -857
- package/dist/connectors/airtable-oauth.js +12 -4
- package/dist/connectors/airtable.js +93 -75
- package/dist/connectors/amplitude.js +335 -32
- package/dist/connectors/anthropic.js +30 -14
- package/dist/connectors/attio.js +304 -36
- package/dist/connectors/dbt.js +129 -83
- package/dist/connectors/gemini.js +20 -8
- package/dist/connectors/google-ads-oauth.js +14 -8
- package/dist/connectors/google-analytics-oauth.js +16 -8
- package/dist/connectors/google-analytics.js +107 -91
- package/dist/connectors/google-sheets-oauth.js +12 -4
- package/dist/connectors/hubspot-oauth.js +12 -4
- package/dist/connectors/hubspot.d.ts +5 -0
- package/dist/connectors/hubspot.js +541 -0
- package/dist/connectors/kintone-api-token.js +16 -20
- package/dist/connectors/kintone.js +109 -83
- package/dist/connectors/openai.js +28 -12
- package/dist/connectors/shopify-oauth.js +12 -4
- package/dist/connectors/shopify.js +500 -80
- package/dist/connectors/stripe-oauth.js +12 -4
- package/dist/connectors/wix-store.js +122 -86
- package/dist/index.js +1954 -849
- package/dist/main.js +1954 -849
- package/dist/vite-plugin.js +1954 -849
- package/package.json +5 -1
package/dist/cli/index.js
CHANGED
|
@@ -7215,8 +7215,8 @@ var init_body = __esm({
|
|
|
7215
7215
|
const ct = this.headers.get("content-type");
|
|
7216
7216
|
if (ct.startsWith("application/x-www-form-urlencoded")) {
|
|
7217
7217
|
const formData = new FormData2();
|
|
7218
|
-
const
|
|
7219
|
-
for (const [name, value] of
|
|
7218
|
+
const parameters34 = new URLSearchParams(await this.text());
|
|
7219
|
+
for (const [name, value] of parameters34) {
|
|
7220
7220
|
formData.append(name, value);
|
|
7221
7221
|
}
|
|
7222
7222
|
return formData;
|
|
@@ -10164,11 +10164,11 @@ var require_bignumber = __commonJS({
|
|
|
10164
10164
|
return n > 0 || n === i2 ? i2 : i2 - 1;
|
|
10165
10165
|
}
|
|
10166
10166
|
function coeffToString(a) {
|
|
10167
|
-
var s2,
|
|
10167
|
+
var s2, z37, i2 = 1, j = a.length, r2 = a[0] + "";
|
|
10168
10168
|
for (; i2 < j; ) {
|
|
10169
10169
|
s2 = a[i2++] + "";
|
|
10170
|
-
|
|
10171
|
-
for (;
|
|
10170
|
+
z37 = LOG_BASE - s2.length;
|
|
10171
|
+
for (; z37--; s2 = "0" + s2) ;
|
|
10172
10172
|
r2 += s2;
|
|
10173
10173
|
}
|
|
10174
10174
|
for (j = r2.length; r2.charCodeAt(--j) === 48; ) ;
|
|
@@ -10201,15 +10201,15 @@ var require_bignumber = __commonJS({
|
|
|
10201
10201
|
function toExponential(str, e2) {
|
|
10202
10202
|
return (str.length > 1 ? str.charAt(0) + "." + str.slice(1) : str) + (e2 < 0 ? "e" : "e+") + e2;
|
|
10203
10203
|
}
|
|
10204
|
-
function toFixedPoint(str, e2,
|
|
10204
|
+
function toFixedPoint(str, e2, z37) {
|
|
10205
10205
|
var len, zs;
|
|
10206
10206
|
if (e2 < 0) {
|
|
10207
|
-
for (zs =
|
|
10207
|
+
for (zs = z37 + "."; ++e2; zs += z37) ;
|
|
10208
10208
|
str = zs + str;
|
|
10209
10209
|
} else {
|
|
10210
10210
|
len = str.length;
|
|
10211
10211
|
if (++e2 > len) {
|
|
10212
|
-
for (zs =
|
|
10212
|
+
for (zs = z37, e2 -= len; --e2; zs += z37) ;
|
|
10213
10213
|
str += zs;
|
|
10214
10214
|
} else if (e2 < len) {
|
|
10215
10215
|
str = str.slice(0, e2) + "." + str.slice(e2);
|
|
@@ -18796,30 +18796,38 @@ var snowflakeConnector = new ConnectorPlugin({
|
|
|
18796
18796
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
18797
18797
|
onboarding: snowflakeOnboarding,
|
|
18798
18798
|
systemPrompt: {
|
|
18799
|
-
en: `###
|
|
18799
|
+
en: `### Tools
|
|
18800
|
+
|
|
18801
|
+
- \`snowflake_executeQuery\`: Executes a Snowflake SQL query and returns rows. Use this for schema exploration (\`SHOW DATABASES\`, \`SHOW SCHEMAS\`, \`SHOW TABLES\`, \`DESCRIBE TABLE\`) and for sampling data. See the SQL Reference below for syntax notes.
|
|
18802
|
+
|
|
18803
|
+
### Business Logic
|
|
18804
|
+
|
|
18805
|
+
The business logic type for this connector is "sql".
|
|
18806
|
+
|
|
18807
|
+
### SQL Reference
|
|
18800
18808
|
- Use fully qualified names DB.SCHEMA.TABLE for table references
|
|
18801
18809
|
- Schema exploration commands:
|
|
18802
18810
|
- List databases: \`SHOW DATABASES\`
|
|
18803
18811
|
- List schemas: \`SHOW SCHEMAS IN DATABASE db_name\`
|
|
18804
18812
|
- List tables: \`SHOW TABLES IN SCHEMA db_name.schema_name\`
|
|
18805
18813
|
- List columns: \`DESCRIBE TABLE db_name.schema_name.table_name\`
|
|
18806
|
-
- INFORMATION_SCHEMA is also available: \`SELECT * FROM db_name.INFORMATION_SCHEMA.TABLES
|
|
18814
|
+
- INFORMATION_SCHEMA is also available: \`SELECT * FROM db_name.INFORMATION_SCHEMA.TABLES\``,
|
|
18815
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
18816
|
+
|
|
18817
|
+
- \`snowflake_executeQuery\`: Snowflake SQL\u30AF\u30A8\u30EA\u3092\u5B9F\u884C\u3057\u3001\u884C\u30C7\u30FC\u30BF\u3092\u8FD4\u3057\u307E\u3059\u3002\u30B9\u30AD\u30FC\u30DE\u63A2\u7D22 (\`SHOW DATABASES\`, \`SHOW SCHEMAS\`, \`SHOW TABLES\`, \`DESCRIBE TABLE\`) \u3084\u30C7\u30FC\u30BF\u306E\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u306B\u4F7F\u3044\u307E\u3059\u3002\u69CB\u6587\u306E\u6CE8\u610F\u70B9\u306F\u4E0B\u90E8\u306E\u300CSQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u300D\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
18807
18818
|
|
|
18808
18819
|
### Business Logic
|
|
18809
18820
|
|
|
18810
|
-
|
|
18811
|
-
|
|
18821
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002
|
|
18822
|
+
|
|
18823
|
+
### SQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
18812
18824
|
- \u30C6\u30FC\u30D6\u30EB\u53C2\u7167\u306B\u306F\u5B8C\u5168\u4FEE\u98FE\u540D DB.SCHEMA.TABLE \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
|
|
18813
18825
|
- \u30B9\u30AD\u30FC\u30DE\u63A2\u7D22\u30B3\u30DE\u30F3\u30C9:
|
|
18814
18826
|
- \u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u4E00\u89A7: \`SHOW DATABASES\`
|
|
18815
18827
|
- \u30B9\u30AD\u30FC\u30DE\u4E00\u89A7: \`SHOW SCHEMAS IN DATABASE db_name\`
|
|
18816
18828
|
- \u30C6\u30FC\u30D6\u30EB\u4E00\u89A7: \`SHOW TABLES IN SCHEMA db_name.schema_name\`
|
|
18817
18829
|
- \u30AB\u30E9\u30E0\u4E00\u89A7: \`DESCRIBE TABLE db_name.schema_name.table_name\`
|
|
18818
|
-
- INFORMATION_SCHEMA \u3082\u5229\u7528\u53EF\u80FD: \`SELECT * FROM db_name.INFORMATION_SCHEMA.TABLES
|
|
18819
|
-
|
|
18820
|
-
### Business Logic
|
|
18821
|
-
|
|
18822
|
-
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002SQL\u30AF\u30A8\u30EA\u3092\u4F7F\u7528\u3057\u3066\u30C7\u30FC\u30BF\u53D6\u5F97\u30ED\u30B8\u30C3\u30AF\u3092\u5B9A\u7FA9\u3057\u3066\u304F\u3060\u3055\u3044\u3002`
|
|
18830
|
+
- INFORMATION_SCHEMA \u3082\u5229\u7528\u53EF\u80FD: \`SELECT * FROM db_name.INFORMATION_SCHEMA.TABLES\``
|
|
18823
18831
|
},
|
|
18824
18832
|
tools,
|
|
18825
18833
|
async checkConnection(params, _config) {
|
|
@@ -19071,30 +19079,38 @@ var snowflakePatConnector = new ConnectorPlugin({
|
|
|
19071
19079
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
19072
19080
|
onboarding: snowflakeOnboarding,
|
|
19073
19081
|
systemPrompt: {
|
|
19074
|
-
en: `###
|
|
19082
|
+
en: `### Tools
|
|
19083
|
+
|
|
19084
|
+
- \`snowflake-pat_executeQuery\`: Executes a Snowflake SQL query (authenticated via PAT) and returns rows. Use this for schema exploration (\`SHOW DATABASES\`, \`SHOW SCHEMAS\`, \`SHOW TABLES\`, \`DESCRIBE TABLE\`) and for sampling data. See the SQL Reference below for syntax notes.
|
|
19085
|
+
|
|
19086
|
+
### Business Logic
|
|
19087
|
+
|
|
19088
|
+
The business logic type for this connector is "sql".
|
|
19089
|
+
|
|
19090
|
+
### SQL Reference
|
|
19075
19091
|
- Use fully qualified names DB.SCHEMA.TABLE for table references
|
|
19076
19092
|
- Schema exploration commands:
|
|
19077
19093
|
- List databases: \`SHOW DATABASES\`
|
|
19078
19094
|
- List schemas: \`SHOW SCHEMAS IN DATABASE db_name\`
|
|
19079
19095
|
- List tables: \`SHOW TABLES IN SCHEMA db_name.schema_name\`
|
|
19080
19096
|
- List columns: \`DESCRIBE TABLE db_name.schema_name.table_name\`
|
|
19081
|
-
- INFORMATION_SCHEMA is also available: \`SELECT * FROM db_name.INFORMATION_SCHEMA.TABLES
|
|
19097
|
+
- INFORMATION_SCHEMA is also available: \`SELECT * FROM db_name.INFORMATION_SCHEMA.TABLES\``,
|
|
19098
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
19099
|
+
|
|
19100
|
+
- \`snowflake-pat_executeQuery\`: Snowflake SQL\u30AF\u30A8\u30EA (PAT\u8A8D\u8A3C) \u3092\u5B9F\u884C\u3057\u3001\u884C\u30C7\u30FC\u30BF\u3092\u8FD4\u3057\u307E\u3059\u3002\u30B9\u30AD\u30FC\u30DE\u63A2\u7D22 (\`SHOW DATABASES\`, \`SHOW SCHEMAS\`, \`SHOW TABLES\`, \`DESCRIBE TABLE\`) \u3084\u30C7\u30FC\u30BF\u306E\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u306B\u4F7F\u3044\u307E\u3059\u3002\u69CB\u6587\u306E\u6CE8\u610F\u70B9\u306F\u4E0B\u90E8\u306E\u300CSQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u300D\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
19082
19101
|
|
|
19083
19102
|
### Business Logic
|
|
19084
19103
|
|
|
19085
|
-
|
|
19086
|
-
|
|
19104
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002
|
|
19105
|
+
|
|
19106
|
+
### SQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
19087
19107
|
- \u30C6\u30FC\u30D6\u30EB\u53C2\u7167\u306B\u306F\u5B8C\u5168\u4FEE\u98FE\u540D DB.SCHEMA.TABLE \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
|
|
19088
19108
|
- \u30B9\u30AD\u30FC\u30DE\u63A2\u7D22\u30B3\u30DE\u30F3\u30C9:
|
|
19089
19109
|
- \u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u4E00\u89A7: \`SHOW DATABASES\`
|
|
19090
19110
|
- \u30B9\u30AD\u30FC\u30DE\u4E00\u89A7: \`SHOW SCHEMAS IN DATABASE db_name\`
|
|
19091
19111
|
- \u30C6\u30FC\u30D6\u30EB\u4E00\u89A7: \`SHOW TABLES IN SCHEMA db_name.schema_name\`
|
|
19092
19112
|
- \u30AB\u30E9\u30E0\u4E00\u89A7: \`DESCRIBE TABLE db_name.schema_name.table_name\`
|
|
19093
|
-
- INFORMATION_SCHEMA \u3082\u5229\u7528\u53EF\u80FD: \`SELECT * FROM db_name.INFORMATION_SCHEMA.TABLES
|
|
19094
|
-
|
|
19095
|
-
### Business Logic
|
|
19096
|
-
|
|
19097
|
-
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002SQL\u30AF\u30A8\u30EA\u3092\u4F7F\u7528\u3057\u3066\u30C7\u30FC\u30BF\u53D6\u5F97\u30ED\u30B8\u30C3\u30AF\u3092\u5B9A\u7FA9\u3057\u3066\u304F\u3060\u3055\u3044\u3002`
|
|
19113
|
+
- INFORMATION_SCHEMA \u3082\u5229\u7528\u53EF\u80FD: \`SELECT * FROM db_name.INFORMATION_SCHEMA.TABLES\``
|
|
19098
19114
|
},
|
|
19099
19115
|
tools: tools2,
|
|
19100
19116
|
async checkConnection(params, _config) {
|
|
@@ -19288,24 +19304,32 @@ var postgresqlConnector = new ConnectorPlugin({
|
|
|
19288
19304
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
19289
19305
|
onboarding: postgresqlOnboarding,
|
|
19290
19306
|
systemPrompt: {
|
|
19291
|
-
en: `###
|
|
19307
|
+
en: `### Tools
|
|
19308
|
+
|
|
19309
|
+
- \`postgresql_executeQuery\`: Executes a PostgreSQL SQL query and returns rows. Use this for schema exploration via \`information_schema.tables\`/\`columns\` and for sampling data. See the SQL Reference below for syntax notes.
|
|
19310
|
+
|
|
19311
|
+
### Business Logic
|
|
19312
|
+
|
|
19313
|
+
The business logic type for this connector is "sql".
|
|
19314
|
+
|
|
19315
|
+
### SQL Reference
|
|
19292
19316
|
- Schema exploration:
|
|
19293
19317
|
- List tables: \`SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'\`
|
|
19294
19318
|
- List columns: \`SELECT column_name, data_type FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'xxx'\`
|
|
19295
|
-
- Always include LIMIT in queries
|
|
19319
|
+
- Always include LIMIT in queries`,
|
|
19320
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
19321
|
+
|
|
19322
|
+
- \`postgresql_executeQuery\`: PostgreSQL SQL\u30AF\u30A8\u30EA\u3092\u5B9F\u884C\u3057\u3001\u884C\u30C7\u30FC\u30BF\u3092\u8FD4\u3057\u307E\u3059\u3002\`information_schema.tables\`/\`columns\` \u3092\u4F7F\u3063\u305F\u30B9\u30AD\u30FC\u30DE\u63A2\u7D22\u3084\u30C7\u30FC\u30BF\u306E\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u306B\u4F7F\u3044\u307E\u3059\u3002\u69CB\u6587\u306E\u6CE8\u610F\u70B9\u306F\u4E0B\u90E8\u306E\u300CSQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u300D\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
19296
19323
|
|
|
19297
19324
|
### Business Logic
|
|
19298
19325
|
|
|
19299
|
-
|
|
19300
|
-
|
|
19326
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002
|
|
19327
|
+
|
|
19328
|
+
### SQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
19301
19329
|
- \u30B9\u30AD\u30FC\u30DE\u63A2\u7D22:
|
|
19302
19330
|
- \u30C6\u30FC\u30D6\u30EB\u4E00\u89A7: \`SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'\`
|
|
19303
19331
|
- \u30AB\u30E9\u30E0\u4E00\u89A7: \`SELECT column_name, data_type FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'xxx'\`
|
|
19304
|
-
- \u30AF\u30A8\u30EA\u306B\u306F\u5FC5\u305A LIMIT \u3092\u542B\u3081\u3066\u304F\u3060\u3055\u3044
|
|
19305
|
-
|
|
19306
|
-
### Business Logic
|
|
19307
|
-
|
|
19308
|
-
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002SQL\u30AF\u30A8\u30EA\u3092\u4F7F\u7528\u3057\u3066\u30C7\u30FC\u30BF\u53D6\u5F97\u30ED\u30B8\u30C3\u30AF\u3092\u5B9A\u7FA9\u3057\u3066\u304F\u3060\u3055\u3044\u3002`
|
|
19332
|
+
- \u30AF\u30A8\u30EA\u306B\u306F\u5FC5\u305A LIMIT \u3092\u542B\u3081\u3066\u304F\u3060\u3055\u3044`
|
|
19309
19333
|
},
|
|
19310
19334
|
tools: tools3,
|
|
19311
19335
|
async checkConnection(params, _config) {
|
|
@@ -19456,24 +19480,32 @@ var mysqlConnector = new ConnectorPlugin({
|
|
|
19456
19480
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
19457
19481
|
onboarding: mysqlOnboarding,
|
|
19458
19482
|
systemPrompt: {
|
|
19459
|
-
en: `###
|
|
19483
|
+
en: `### Tools
|
|
19484
|
+
|
|
19485
|
+
- \`mysql_executeQuery\`: Executes a MySQL SQL query and returns rows. Use this for schema exploration via \`information_schema.TABLES\`/\`COLUMNS\` and for sampling data. See the SQL Reference below for syntax notes.
|
|
19486
|
+
|
|
19487
|
+
### Business Logic
|
|
19488
|
+
|
|
19489
|
+
The business logic type for this connector is "sql".
|
|
19490
|
+
|
|
19491
|
+
### SQL Reference
|
|
19460
19492
|
- Schema exploration:
|
|
19461
19493
|
- List tables: \`SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE()\`
|
|
19462
19494
|
- List columns: \`SELECT COLUMN_NAME, DATA_TYPE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'xxx'\`
|
|
19463
|
-
- Always include LIMIT in queries
|
|
19495
|
+
- Always include LIMIT in queries`,
|
|
19496
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
19497
|
+
|
|
19498
|
+
- \`mysql_executeQuery\`: MySQL SQL\u30AF\u30A8\u30EA\u3092\u5B9F\u884C\u3057\u3001\u884C\u30C7\u30FC\u30BF\u3092\u8FD4\u3057\u307E\u3059\u3002\`information_schema.TABLES\`/\`COLUMNS\` \u3092\u4F7F\u3063\u305F\u30B9\u30AD\u30FC\u30DE\u63A2\u7D22\u3084\u30C7\u30FC\u30BF\u306E\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u306B\u4F7F\u3044\u307E\u3059\u3002\u69CB\u6587\u306E\u6CE8\u610F\u70B9\u306F\u4E0B\u90E8\u306E\u300CSQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u300D\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
19464
19499
|
|
|
19465
19500
|
### Business Logic
|
|
19466
19501
|
|
|
19467
|
-
|
|
19468
|
-
|
|
19502
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002
|
|
19503
|
+
|
|
19504
|
+
### SQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
19469
19505
|
- \u30B9\u30AD\u30FC\u30DE\u63A2\u7D22:
|
|
19470
19506
|
- \u30C6\u30FC\u30D6\u30EB\u4E00\u89A7: \`SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE()\`
|
|
19471
19507
|
- \u30AB\u30E9\u30E0\u4E00\u89A7: \`SELECT COLUMN_NAME, DATA_TYPE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'xxx'\`
|
|
19472
|
-
- \u30AF\u30A8\u30EA\u306B\u306F\u5FC5\u305A LIMIT \u3092\u542B\u3081\u3066\u304F\u3060\u3055\u3044
|
|
19473
|
-
|
|
19474
|
-
### Business Logic
|
|
19475
|
-
|
|
19476
|
-
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002SQL\u30AF\u30A8\u30EA\u3092\u4F7F\u7528\u3057\u3066\u30C7\u30FC\u30BF\u53D6\u5F97\u30ED\u30B8\u30C3\u30AF\u3092\u5B9A\u7FA9\u3057\u3066\u304F\u3060\u3055\u3044\u3002`
|
|
19508
|
+
- \u30AF\u30A8\u30EA\u306B\u306F\u5FC5\u305A LIMIT \u3092\u542B\u3081\u3066\u304F\u3060\u3055\u3044`
|
|
19477
19509
|
},
|
|
19478
19510
|
tools: tools4,
|
|
19479
19511
|
async checkConnection(params, _config) {
|
|
@@ -19816,28 +19848,42 @@ var bigqueryConnector = new ConnectorPlugin({
|
|
|
19816
19848
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
19817
19849
|
onboarding: bigqueryOnboarding,
|
|
19818
19850
|
systemPrompt: {
|
|
19819
|
-
en: `###
|
|
19820
|
-
|
|
19821
|
-
- Use
|
|
19851
|
+
en: `### Tools
|
|
19852
|
+
|
|
19853
|
+
- \`bigquery_listProjects\`: Lists GCP projects accessible by the configured service account. Use this when you need to discover which projects are available before selecting one.
|
|
19854
|
+
- \`bigquery_listDatasets\`: Lists datasets within the connection's project. Prefer this over querying \`INFORMATION_SCHEMA.SCHEMATA\`.
|
|
19855
|
+
- \`bigquery_executeQuery\`: Executes a BigQuery SQL query and returns rows. Use this for table/column inspection (\`INFORMATION_SCHEMA.TABLES\`/\`COLUMNS\`) and for sampling data. See the SQL Reference below for syntax notes.
|
|
19856
|
+
|
|
19857
|
+
### Business Logic
|
|
19858
|
+
|
|
19859
|
+
The business logic type for this connector is "sql".
|
|
19860
|
+
|
|
19861
|
+
### SQL Reference
|
|
19862
|
+
|
|
19863
|
+
- Table references use backtick-quoted fully qualified names: \`\\\`project.dataset.table\\\`\`
|
|
19864
|
+
- Always specify \`project_id\` explicitly in queries
|
|
19865
|
+
- Schema exploration via \`INFORMATION_SCHEMA\`:
|
|
19822
19866
|
- List tables: \`SELECT table_name FROM \\\`project_id.dataset\\\`.INFORMATION_SCHEMA.TABLES\`
|
|
19823
19867
|
- List columns: \`SELECT column_name, data_type FROM \\\`project_id.dataset\\\`.INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'xxx'\`
|
|
19824
|
-
-
|
|
19825
|
-
|
|
19868
|
+
- For listing datasets, use the \`bigquery_listDatasets\` tool instead of \`INFORMATION_SCHEMA.SCHEMATA\``,
|
|
19869
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
19870
|
+
|
|
19871
|
+
- \`bigquery_listProjects\`: \u8A2D\u5B9A\u3055\u308C\u305F\u30B5\u30FC\u30D3\u30B9\u30A2\u30AB\u30A6\u30F3\u30C8\u304C\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306AGCP\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u9078\u3076\u524D\u306B\u5229\u7528\u53EF\u80FD\u306A\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u63A2\u7D22\u3059\u308B\u6642\u306B\u4F7F\u3044\u307E\u3059\u3002
|
|
19872
|
+
- \`bigquery_listDatasets\`: \u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5185\u306E\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\`INFORMATION_SCHEMA.SCHEMATA\` \u3092\u30AF\u30A8\u30EA\u3059\u308B\u3088\u308A\u3053\u3061\u3089\u3092\u512A\u5148\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
19873
|
+
- \`bigquery_executeQuery\`: BigQuery SQL\u30AF\u30A8\u30EA\u3092\u5B9F\u884C\u3057\u3001\u884C\u30C7\u30FC\u30BF\u3092\u8FD4\u3057\u307E\u3059\u3002\u30C6\u30FC\u30D6\u30EB/\u30AB\u30E9\u30E0\u306E\u78BA\u8A8D (\`INFORMATION_SCHEMA.TABLES\`/\`COLUMNS\`) \u3084\u30C7\u30FC\u30BF\u306E\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u306B\u4F7F\u3044\u307E\u3059\u3002\u69CB\u6587\u306E\u6CE8\u610F\u70B9\u306F\u4E0B\u90E8\u306E\u300CSQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u300D\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
19826
19874
|
|
|
19827
19875
|
### Business Logic
|
|
19828
19876
|
|
|
19829
|
-
|
|
19830
|
-
ja: `### SQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
19831
|
-
- \u30C6\u30FC\u30D6\u30EB\u53C2\u7167\u306B\u306F\u30D0\u30C3\u30AF\u30AF\u30A9\u30FC\u30C8\u3067\u56F2\u3093\u3060\u5B8C\u5168\u4FEE\u98FE\u540D \`project.dataset.table\` \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
|
|
19832
|
-
- \u30B9\u30AD\u30FC\u30DE\u63A2\u7D22\u306B\u306F INFORMATION_SCHEMA \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
|
|
19833
|
-
- \u30C6\u30FC\u30D6\u30EB\u4E00\u89A7: \`SELECT table_name FROM \\\`project_id.dataset\\\`.INFORMATION_SCHEMA.TABLES\`
|
|
19834
|
-
- \u30AB\u30E9\u30E0\u4E00\u89A7: \`SELECT column_name, data_type FROM \\\`project_id.dataset\\\`.INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'xxx'\`
|
|
19835
|
-
- \u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u4E00\u89A7\u3092\u53D6\u5F97\u3059\u308B\u306B\u306F\u3001INFORMATION_SCHEMA.SCHEMATA \u3067\u306F\u306A\u304F listDatasets \u30C4\u30FC\u30EB\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
|
|
19836
|
-
- \u30AF\u30A8\u30EA\u306B\u306F\u5FC5\u305A project_id \u3092\u660E\u793A\u7684\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044
|
|
19877
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002
|
|
19837
19878
|
|
|
19838
|
-
###
|
|
19879
|
+
### SQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
19839
19880
|
|
|
19840
|
-
\
|
|
19881
|
+
- \u30C6\u30FC\u30D6\u30EB\u53C2\u7167\u306B\u306F\u30D0\u30C3\u30AF\u30AF\u30A9\u30FC\u30C8\u3067\u56F2\u3093\u3060\u5B8C\u5168\u4FEE\u98FE\u540D \`\\\`project.dataset.table\\\`\` \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
|
|
19882
|
+
- \u30AF\u30A8\u30EA\u306B\u306F\u5FC5\u305A \`project_id\` \u3092\u660E\u793A\u7684\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044
|
|
19883
|
+
- \u30B9\u30AD\u30FC\u30DE\u63A2\u7D22\u306F \`INFORMATION_SCHEMA\` \u3092\u4F7F\u7528\u3057\u307E\u3059:
|
|
19884
|
+
- \u30C6\u30FC\u30D6\u30EB\u4E00\u89A7: \`SELECT table_name FROM \\\`project_id.dataset\\\`.INFORMATION_SCHEMA.TABLES\`
|
|
19885
|
+
- \u30AB\u30E9\u30E0\u4E00\u89A7: \`SELECT column_name, data_type FROM \\\`project_id.dataset\\\`.INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'xxx'\`
|
|
19886
|
+
- \u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u4E00\u89A7\u306E\u53D6\u5F97\u306B\u306F \`INFORMATION_SCHEMA.SCHEMATA\` \u3067\u306F\u306A\u304F \`bigquery_listDatasets\` \u30C4\u30FC\u30EB\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044`
|
|
19841
19887
|
},
|
|
19842
19888
|
tools: tools5,
|
|
19843
19889
|
async checkConnection(params, _config) {
|
|
@@ -20344,28 +20390,40 @@ var bigqueryOauthConnector = new ConnectorPlugin({
|
|
|
20344
20390
|
]
|
|
20345
20391
|
},
|
|
20346
20392
|
systemPrompt: {
|
|
20347
|
-
en: `###
|
|
20348
|
-
|
|
20349
|
-
- Use
|
|
20393
|
+
en: `### Tools
|
|
20394
|
+
|
|
20395
|
+
- \`bigquery-oauth_listProjects\`: Lists GCP projects accessible by the authenticated user. Use this when you need to discover which projects are available before selecting one.
|
|
20396
|
+
- \`bigquery-oauth_listDatasets\`: Lists datasets within the connection's project. Prefer this over querying \`INFORMATION_SCHEMA.SCHEMATA\`.
|
|
20397
|
+
- \`bigquery-oauth_executeQuery\`: Executes a BigQuery SQL query and returns rows. Use this for table/column inspection (\`INFORMATION_SCHEMA.TABLES\`/\`COLUMNS\`) and for sampling data. See the SQL Reference below for syntax notes.
|
|
20398
|
+
|
|
20399
|
+
### Business Logic
|
|
20400
|
+
|
|
20401
|
+
The business logic type for this connector is "sql".
|
|
20402
|
+
|
|
20403
|
+
### SQL Reference
|
|
20404
|
+
- Table references use backtick-quoted fully qualified names: \`\\\`project.dataset.table\\\`\`
|
|
20405
|
+
- Always specify \`project_id\` explicitly in queries
|
|
20406
|
+
- Schema exploration via \`INFORMATION_SCHEMA\`:
|
|
20350
20407
|
- List tables: \`SELECT table_name FROM \\\`project_id.dataset\\\`.INFORMATION_SCHEMA.TABLES\`
|
|
20351
20408
|
- List columns: \`SELECT column_name, data_type FROM \\\`project_id.dataset\\\`.INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'xxx'\`
|
|
20352
|
-
-
|
|
20353
|
-
|
|
20409
|
+
- For listing datasets, use the \`bigquery-oauth_listDatasets\` tool instead of \`INFORMATION_SCHEMA.SCHEMATA\``,
|
|
20410
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
20411
|
+
|
|
20412
|
+
- \`bigquery-oauth_listProjects\`: \u8A8D\u8A3C\u6E08\u307F\u30E6\u30FC\u30B6\u30FC\u304C\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306AGCP\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u9078\u3076\u524D\u306B\u5229\u7528\u53EF\u80FD\u306A\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u63A2\u7D22\u3059\u308B\u6642\u306B\u4F7F\u3044\u307E\u3059\u3002
|
|
20413
|
+
- \`bigquery-oauth_listDatasets\`: \u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5185\u306E\u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\`INFORMATION_SCHEMA.SCHEMATA\` \u3092\u30AF\u30A8\u30EA\u3059\u308B\u3088\u308A\u3053\u3061\u3089\u3092\u512A\u5148\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
20414
|
+
- \`bigquery-oauth_executeQuery\`: BigQuery SQL\u30AF\u30A8\u30EA\u3092\u5B9F\u884C\u3057\u3001\u884C\u30C7\u30FC\u30BF\u3092\u8FD4\u3057\u307E\u3059\u3002\u30C6\u30FC\u30D6\u30EB/\u30AB\u30E9\u30E0\u306E\u78BA\u8A8D (\`INFORMATION_SCHEMA.TABLES\`/\`COLUMNS\`) \u3084\u30C7\u30FC\u30BF\u306E\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u306B\u4F7F\u3044\u307E\u3059\u3002\u69CB\u6587\u306E\u6CE8\u610F\u70B9\u306F\u4E0B\u90E8\u306E\u300CSQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u300D\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
20354
20415
|
|
|
20355
20416
|
### Business Logic
|
|
20356
20417
|
|
|
20357
|
-
|
|
20358
|
-
|
|
20359
|
-
|
|
20360
|
-
- \
|
|
20418
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002
|
|
20419
|
+
|
|
20420
|
+
### SQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
20421
|
+
- \u30C6\u30FC\u30D6\u30EB\u53C2\u7167\u306B\u306F\u30D0\u30C3\u30AF\u30AF\u30A9\u30FC\u30C8\u3067\u56F2\u3093\u3060\u5B8C\u5168\u4FEE\u98FE\u540D \`\\\`project.dataset.table\\\`\` \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044
|
|
20422
|
+
- \u30AF\u30A8\u30EA\u306B\u306F\u5FC5\u305A \`project_id\` \u3092\u660E\u793A\u7684\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044
|
|
20423
|
+
- \u30B9\u30AD\u30FC\u30DE\u63A2\u7D22\u306F \`INFORMATION_SCHEMA\` \u3092\u4F7F\u7528\u3057\u307E\u3059:
|
|
20361
20424
|
- \u30C6\u30FC\u30D6\u30EB\u4E00\u89A7: \`SELECT table_name FROM \\\`project_id.dataset\\\`.INFORMATION_SCHEMA.TABLES\`
|
|
20362
20425
|
- \u30AB\u30E9\u30E0\u4E00\u89A7: \`SELECT column_name, data_type FROM \\\`project_id.dataset\\\`.INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'xxx'\`
|
|
20363
|
-
- \u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u4E00\u89A7\
|
|
20364
|
-
- \u30AF\u30A8\u30EA\u306B\u306F\u5FC5\u305A project_id \u3092\u660E\u793A\u7684\u306B\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044
|
|
20365
|
-
|
|
20366
|
-
### Business Logic
|
|
20367
|
-
|
|
20368
|
-
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002SQL\u30AF\u30A8\u30EA\u3092\u4F7F\u7528\u3057\u3066\u30C7\u30FC\u30BF\u53D6\u5F97\u30ED\u30B8\u30C3\u30AF\u3092\u5B9A\u7FA9\u3057\u3066\u304F\u3060\u3055\u3044\u3002`
|
|
20426
|
+
- \u30C7\u30FC\u30BF\u30BB\u30C3\u30C8\u4E00\u89A7\u306E\u53D6\u5F97\u306B\u306F \`INFORMATION_SCHEMA.SCHEMATA\` \u3067\u306F\u306A\u304F \`bigquery-oauth_listDatasets\` \u30C4\u30FC\u30EB\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044`
|
|
20369
20427
|
},
|
|
20370
20428
|
tools: tools6,
|
|
20371
20429
|
async checkConnection(params, config) {
|
|
@@ -20596,30 +20654,38 @@ var awsAthenaConnector = new ConnectorPlugin({
|
|
|
20596
20654
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
20597
20655
|
onboarding: awsAthenaOnboarding,
|
|
20598
20656
|
systemPrompt: {
|
|
20599
|
-
en: `###
|
|
20657
|
+
en: `### Tools
|
|
20658
|
+
|
|
20659
|
+
- \`aws-athena_executeQuery\`: Executes an Athena (Presto/Trino) SQL query and returns rows. Use this for schema exploration (\`SHOW DATABASES\`, \`SHOW TABLES\`, \`DESCRIBE\`) and for sampling data. See the SQL Reference below for syntax notes.
|
|
20660
|
+
|
|
20661
|
+
### Business Logic
|
|
20662
|
+
|
|
20663
|
+
The business logic type for this connector is "sql".
|
|
20664
|
+
|
|
20665
|
+
### SQL Reference
|
|
20600
20666
|
- Uses Presto/Trino based SQL syntax
|
|
20601
20667
|
- Schema exploration:
|
|
20602
20668
|
- List databases: \`SHOW DATABASES\`
|
|
20603
20669
|
- List tables: \`SHOW TABLES\` or \`SHOW TABLES IN database_name\`
|
|
20604
20670
|
- List columns: \`DESCRIBE table_name\`
|
|
20605
20671
|
- Always include LIMIT in queries
|
|
20606
|
-
- Query execution is asynchronous and results may take time to retrieve
|
|
20672
|
+
- Query execution is asynchronous and results may take time to retrieve`,
|
|
20673
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
20674
|
+
|
|
20675
|
+
- \`aws-athena_executeQuery\`: Athena (Presto/Trino) SQL\u30AF\u30A8\u30EA\u3092\u5B9F\u884C\u3057\u3001\u884C\u30C7\u30FC\u30BF\u3092\u8FD4\u3057\u307E\u3059\u3002\u30B9\u30AD\u30FC\u30DE\u63A2\u7D22 (\`SHOW DATABASES\`, \`SHOW TABLES\`, \`DESCRIBE\`) \u3084\u30C7\u30FC\u30BF\u306E\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u306B\u4F7F\u3044\u307E\u3059\u3002\u69CB\u6587\u306E\u6CE8\u610F\u70B9\u306F\u4E0B\u90E8\u306E\u300CSQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u300D\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
20607
20676
|
|
|
20608
20677
|
### Business Logic
|
|
20609
20678
|
|
|
20610
|
-
|
|
20611
|
-
|
|
20679
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002
|
|
20680
|
+
|
|
20681
|
+
### SQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
20612
20682
|
- Presto/Trino \u30D9\u30FC\u30B9\u306E SQL \u69CB\u6587\u3092\u4F7F\u7528\u3057\u307E\u3059
|
|
20613
20683
|
- \u30B9\u30AD\u30FC\u30DE\u63A2\u7D22:
|
|
20614
20684
|
- \u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u4E00\u89A7: \`SHOW DATABASES\`
|
|
20615
20685
|
- \u30C6\u30FC\u30D6\u30EB\u4E00\u89A7: \`SHOW TABLES\` \u307E\u305F\u306F \`SHOW TABLES IN database_name\`
|
|
20616
20686
|
- \u30AB\u30E9\u30E0\u4E00\u89A7: \`DESCRIBE table_name\`
|
|
20617
20687
|
- \u30AF\u30A8\u30EA\u306B\u306F\u5FC5\u305A LIMIT \u3092\u542B\u3081\u3066\u304F\u3060\u3055\u3044
|
|
20618
|
-
- \u30AF\u30A8\u30EA\u5B9F\u884C\u306F\u975E\u540C\u671F\u3067\u3001\u7D50\u679C\u306E\u53D6\u5F97\u306B\u6642\u9593\u304C\u304B\u304B\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059
|
|
20619
|
-
|
|
20620
|
-
### Business Logic
|
|
20621
|
-
|
|
20622
|
-
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002SQL\u30AF\u30A8\u30EA\u3092\u4F7F\u7528\u3057\u3066\u30C7\u30FC\u30BF\u53D6\u5F97\u30ED\u30B8\u30C3\u30AF\u3092\u5B9A\u7FA9\u3057\u3066\u304F\u3060\u3055\u3044\u3002`
|
|
20688
|
+
- \u30AF\u30A8\u30EA\u5B9F\u884C\u306F\u975E\u540C\u671F\u3067\u3001\u7D50\u679C\u306E\u53D6\u5F97\u306B\u6642\u9593\u304C\u304B\u304B\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059`
|
|
20623
20689
|
},
|
|
20624
20690
|
tools: tools7,
|
|
20625
20691
|
async checkConnection(params, _config) {
|
|
@@ -20960,30 +21026,38 @@ var redshiftConnector = new ConnectorPlugin({
|
|
|
20960
21026
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
20961
21027
|
onboarding: redshiftOnboarding,
|
|
20962
21028
|
systemPrompt: {
|
|
20963
|
-
en: `###
|
|
21029
|
+
en: `### Tools
|
|
21030
|
+
|
|
21031
|
+
- \`redshift_executeQuery\`: Executes a Redshift (PostgreSQL-based) SQL query and returns rows. Use this for schema exploration via \`pg_tables\`/\`information_schema.columns\` and for sampling data. See the SQL Reference below for syntax notes.
|
|
21032
|
+
|
|
21033
|
+
### Business Logic
|
|
21034
|
+
|
|
21035
|
+
The business logic type for this connector is "sql".
|
|
21036
|
+
|
|
21037
|
+
### SQL Reference
|
|
20964
21038
|
- Uses PostgreSQL based SQL syntax
|
|
20965
21039
|
- Schema exploration:
|
|
20966
21040
|
- List schemas: \`SELECT DISTINCT schemaname FROM pg_tables\`
|
|
20967
21041
|
- List tables: \`SELECT tablename FROM pg_tables WHERE schemaname = 'public'\`
|
|
20968
21042
|
- List columns: \`SELECT column_name, data_type FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'xxx'\`
|
|
20969
21043
|
- Always include LIMIT in queries
|
|
20970
|
-
- Query execution is asynchronous and results may take time to retrieve
|
|
21044
|
+
- Query execution is asynchronous and results may take time to retrieve`,
|
|
21045
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
21046
|
+
|
|
21047
|
+
- \`redshift_executeQuery\`: Redshift (PostgreSQL\u30D9\u30FC\u30B9) SQL\u30AF\u30A8\u30EA\u3092\u5B9F\u884C\u3057\u3001\u884C\u30C7\u30FC\u30BF\u3092\u8FD4\u3057\u307E\u3059\u3002\`pg_tables\`/\`information_schema.columns\` \u3092\u4F7F\u3063\u305F\u30B9\u30AD\u30FC\u30DE\u63A2\u7D22\u3084\u30C7\u30FC\u30BF\u306E\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u306B\u4F7F\u3044\u307E\u3059\u3002\u69CB\u6587\u306E\u6CE8\u610F\u70B9\u306F\u4E0B\u90E8\u306E\u300CSQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u300D\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
20971
21048
|
|
|
20972
21049
|
### Business Logic
|
|
20973
21050
|
|
|
20974
|
-
|
|
20975
|
-
|
|
21051
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002
|
|
21052
|
+
|
|
21053
|
+
### SQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
20976
21054
|
- PostgreSQL \u30D9\u30FC\u30B9\u306E SQL \u69CB\u6587\u3092\u4F7F\u7528\u3057\u307E\u3059
|
|
20977
21055
|
- \u30B9\u30AD\u30FC\u30DE\u63A2\u7D22:
|
|
20978
21056
|
- \u30B9\u30AD\u30FC\u30DE\u4E00\u89A7: \`SELECT DISTINCT schemaname FROM pg_tables\`
|
|
20979
21057
|
- \u30C6\u30FC\u30D6\u30EB\u4E00\u89A7: \`SELECT tablename FROM pg_tables WHERE schemaname = 'public'\`
|
|
20980
21058
|
- \u30AB\u30E9\u30E0\u4E00\u89A7: \`SELECT column_name, data_type FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'xxx'\`
|
|
20981
21059
|
- \u30AF\u30A8\u30EA\u306B\u306F\u5FC5\u305A LIMIT \u3092\u542B\u3081\u3066\u304F\u3060\u3055\u3044
|
|
20982
|
-
- \u30AF\u30A8\u30EA\u5B9F\u884C\u306F\u975E\u540C\u671F\u3067\u3001\u7D50\u679C\u306E\u53D6\u5F97\u306B\u6642\u9593\u304C\u304B\u304B\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059
|
|
20983
|
-
|
|
20984
|
-
### Business Logic
|
|
20985
|
-
|
|
20986
|
-
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002SQL\u30AF\u30A8\u30EA\u3092\u4F7F\u7528\u3057\u3066\u30C7\u30FC\u30BF\u53D6\u5F97\u30ED\u30B8\u30C3\u30AF\u3092\u5B9A\u7FA9\u3057\u3066\u304F\u3060\u3055\u3044\u3002`
|
|
21060
|
+
- \u30AF\u30A8\u30EA\u5B9F\u884C\u306F\u975E\u540C\u671F\u3067\u3001\u7D50\u679C\u306E\u53D6\u5F97\u306B\u6642\u9593\u304C\u304B\u304B\u308B\u5834\u5408\u304C\u3042\u308A\u307E\u3059`
|
|
20987
21061
|
},
|
|
20988
21062
|
tools: tools8,
|
|
20989
21063
|
async checkConnection(params, _config) {
|
|
@@ -21238,30 +21312,38 @@ var databricksConnector = new ConnectorPlugin({
|
|
|
21238
21312
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
21239
21313
|
onboarding: databricksOnboarding,
|
|
21240
21314
|
systemPrompt: {
|
|
21241
|
-
en: `###
|
|
21315
|
+
en: `### Tools
|
|
21316
|
+
|
|
21317
|
+
- \`databricks_executeQuery\`: Executes a Databricks/Spark SQL query and returns rows. Use this for schema exploration (\`SHOW CATALOGS\`, \`SHOW SCHEMAS\`, \`SHOW TABLES\`, \`DESCRIBE TABLE\`) and for sampling data. See the SQL Reference below for syntax notes.
|
|
21318
|
+
|
|
21319
|
+
### Business Logic
|
|
21320
|
+
|
|
21321
|
+
The business logic type for this connector is "sql".
|
|
21322
|
+
|
|
21323
|
+
### SQL Reference
|
|
21242
21324
|
- Uses Spark SQL / Databricks SQL syntax
|
|
21243
21325
|
- Schema exploration:
|
|
21244
21326
|
- List catalogs: \`SHOW CATALOGS\`
|
|
21245
21327
|
- List databases: \`SHOW DATABASES\` or \`SHOW SCHEMAS\`
|
|
21246
21328
|
- List tables: \`SHOW TABLES\` or \`SHOW TABLES IN database_name\`
|
|
21247
21329
|
- List columns: \`DESCRIBE TABLE table_name\`
|
|
21248
|
-
- Always include LIMIT in queries
|
|
21330
|
+
- Always include LIMIT in queries`,
|
|
21331
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
21332
|
+
|
|
21333
|
+
- \`databricks_executeQuery\`: Databricks/Spark SQL\u30AF\u30A8\u30EA\u3092\u5B9F\u884C\u3057\u3001\u884C\u30C7\u30FC\u30BF\u3092\u8FD4\u3057\u307E\u3059\u3002\u30B9\u30AD\u30FC\u30DE\u63A2\u7D22 (\`SHOW CATALOGS\`, \`SHOW SCHEMAS\`, \`SHOW TABLES\`, \`DESCRIBE TABLE\`) \u3084\u30C7\u30FC\u30BF\u306E\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u306B\u4F7F\u3044\u307E\u3059\u3002\u69CB\u6587\u306E\u6CE8\u610F\u70B9\u306F\u4E0B\u90E8\u306E\u300CSQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u300D\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
21249
21334
|
|
|
21250
21335
|
### Business Logic
|
|
21251
21336
|
|
|
21252
|
-
|
|
21253
|
-
|
|
21337
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002
|
|
21338
|
+
|
|
21339
|
+
### SQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
21254
21340
|
- Spark SQL / Databricks SQL \u69CB\u6587\u3092\u4F7F\u7528\u3057\u307E\u3059
|
|
21255
21341
|
- \u30B9\u30AD\u30FC\u30DE\u63A2\u7D22:
|
|
21256
21342
|
- \u30AB\u30BF\u30ED\u30B0\u4E00\u89A7: \`SHOW CATALOGS\`
|
|
21257
21343
|
- \u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u4E00\u89A7: \`SHOW DATABASES\` \u307E\u305F\u306F \`SHOW SCHEMAS\`
|
|
21258
21344
|
- \u30C6\u30FC\u30D6\u30EB\u4E00\u89A7: \`SHOW TABLES\` \u307E\u305F\u306F \`SHOW TABLES IN database_name\`
|
|
21259
21345
|
- \u30AB\u30E9\u30E0\u4E00\u89A7: \`DESCRIBE TABLE table_name\`
|
|
21260
|
-
- \u30AF\u30A8\u30EA\u306B\u306F\u5FC5\u305A LIMIT \u3092\u542B\u3081\u3066\u304F\u3060\u3055\u3044
|
|
21261
|
-
|
|
21262
|
-
### Business Logic
|
|
21263
|
-
|
|
21264
|
-
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002SQL\u30AF\u30A8\u30EA\u3092\u4F7F\u7528\u3057\u3066\u30C7\u30FC\u30BF\u53D6\u5F97\u30ED\u30B8\u30C3\u30AF\u3092\u5B9A\u7FA9\u3057\u3066\u304F\u3060\u3055\u3044\u3002`
|
|
21346
|
+
- \u30AF\u30A8\u30EA\u306B\u306F\u5FC5\u305A LIMIT \u3092\u542B\u3081\u3066\u304F\u3060\u3055\u3044`
|
|
21265
21347
|
},
|
|
21266
21348
|
tools: tools9,
|
|
21267
21349
|
async checkConnection(params, _config) {
|
|
@@ -21436,106 +21518,124 @@ var airtableConnector = new ConnectorPlugin({
|
|
|
21436
21518
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
21437
21519
|
onboarding: airtableOnboarding,
|
|
21438
21520
|
systemPrompt: {
|
|
21439
|
-
en: `###
|
|
21440
|
-
- Call the Airtable REST API using the authenticated request tool
|
|
21441
|
-
- {baseId} in the path is automatically replaced
|
|
21442
|
-
|
|
21443
|
-
### List Tables (Schema Exploration)
|
|
21444
|
-
- GET meta/bases/{baseId}/tables
|
|
21445
|
-
|
|
21446
|
-
### Get Records
|
|
21447
|
-
- GET {baseId}/{tableIdOrName}
|
|
21448
|
-
- Query parameter examples: ?maxRecords=100&filterByFormula={formula}&sort[0][field]=Name&sort[0][direction]=asc
|
|
21449
|
-
- Filter columns with fields[]: ?fields[]=Name&fields[]=Email
|
|
21450
|
-
|
|
21451
|
-
### Create Record
|
|
21452
|
-
- POST {baseId}/{tableIdOrName}
|
|
21453
|
-
- Body: { "records": [{ "fields": { "Name": "value", ... } }] }
|
|
21521
|
+
en: `### Tools
|
|
21454
21522
|
|
|
21455
|
-
|
|
21456
|
-
- If the response contains an offset, fetch the next page by appending ?offset={offset} to the next request
|
|
21523
|
+
- \`airtable_request\`: The only way to call the Airtable REST API. Use it to list tables, read records, and create/update records. The \`{baseId}\` placeholder in the path is automatically replaced. See the Airtable API Reference below for available endpoints and query parameters.
|
|
21457
21524
|
|
|
21458
21525
|
### Business Logic
|
|
21459
21526
|
|
|
21460
|
-
The business logic type for this connector is "typescript".
|
|
21527
|
+
The business logic type for this connector is "typescript". Use the connector SDK in your handler. Do NOT read credentials from environment variables.
|
|
21461
21528
|
|
|
21462
|
-
|
|
21529
|
+
SDK methods (client created via \`connection(connectionId)\`):
|
|
21530
|
+
- \`client.request(path, init?)\` \u2014 low-level authenticated fetch
|
|
21531
|
+
- \`client.listTables()\` \u2014 list tables in the base (schema exploration)
|
|
21532
|
+
- \`client.listRecords(tableName, options?)\` \u2014 list records with filtering/sorting/pagination
|
|
21533
|
+
- \`client.getRecord(tableName, recordId)\` \u2014 fetch a single record
|
|
21534
|
+
- \`client.createRecords(tableName, records)\` \u2014 create records
|
|
21535
|
+
- \`client.updateRecords(tableName, records)\` \u2014 update records
|
|
21463
21536
|
|
|
21464
21537
|
\`\`\`ts
|
|
21538
|
+
import type { Context } from "hono";
|
|
21465
21539
|
import { connection } from "@squadbase/vite-server/connectors/airtable";
|
|
21466
21540
|
|
|
21467
21541
|
const airtable = connection("<connectionId>");
|
|
21468
21542
|
|
|
21469
|
-
|
|
21470
|
-
const
|
|
21471
|
-
const data = await res.json();
|
|
21543
|
+
export default async function handler(c: Context) {
|
|
21544
|
+
const { status = "Done" } = await c.req.json<{ status?: string }>();
|
|
21472
21545
|
|
|
21473
|
-
|
|
21474
|
-
|
|
21475
|
-
|
|
21476
|
-
|
|
21477
|
-
|
|
21478
|
-
|
|
21479
|
-
|
|
21480
|
-
|
|
21481
|
-
|
|
21482
|
-
|
|
21483
|
-
|
|
21484
|
-
|
|
21485
|
-
|
|
21486
|
-
|
|
21487
|
-
|
|
21488
|
-
|
|
21489
|
-
|
|
21490
|
-
- \u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u30C4\u30FC\u30EB\u3092\u4F7F\u7528\u3057\u3066Airtable REST API\u3092\u547C\u3073\u51FA\u3057\u307E\u3059
|
|
21491
|
-
- \u30D1\u30B9\u5185\u306E {baseId} \u306F\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059
|
|
21546
|
+
const { records } = await airtable.listRecords("Tasks", {
|
|
21547
|
+
filterByFormula: \`{Status} = "\${status}"\`,
|
|
21548
|
+
fields: ["Name", "Status", "DueDate"],
|
|
21549
|
+
sort: [{ field: "DueDate", direction: "asc" }],
|
|
21550
|
+
maxRecords: 100,
|
|
21551
|
+
});
|
|
21552
|
+
|
|
21553
|
+
return c.json(
|
|
21554
|
+
records.map((r) => ({
|
|
21555
|
+
id: r.id,
|
|
21556
|
+
name: r.fields.Name,
|
|
21557
|
+
status: r.fields.Status,
|
|
21558
|
+
dueDate: r.fields.DueDate,
|
|
21559
|
+
})),
|
|
21560
|
+
);
|
|
21561
|
+
}
|
|
21562
|
+
\`\`\`
|
|
21492
21563
|
|
|
21493
|
-
###
|
|
21494
|
-
- GET meta/bases/{baseId}/tables
|
|
21564
|
+
### Airtable API Reference
|
|
21495
21565
|
|
|
21496
|
-
|
|
21497
|
-
- GET {baseId}/
|
|
21498
|
-
- \u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF\u4F8B: ?maxRecords=100&filterByFormula={formula}&sort[0][field]=Name&sort[0][direction]=asc
|
|
21499
|
-
- fields[] \u3067\u30AB\u30E9\u30E0\u3092\u30D5\u30A3\u30EB\u30BF: ?fields[]=Name&fields[]=Email
|
|
21566
|
+
#### List Tables (Schema Exploration)
|
|
21567
|
+
- \`GET meta/bases/{baseId}/tables\`
|
|
21500
21568
|
|
|
21501
|
-
|
|
21502
|
-
-
|
|
21503
|
-
-
|
|
21569
|
+
#### Get Records
|
|
21570
|
+
- \`GET {baseId}/{tableIdOrName}\`
|
|
21571
|
+
- Query parameter examples: \`?maxRecords=100&filterByFormula={formula}&sort[0][field]=Name&sort[0][direction]=asc\`
|
|
21572
|
+
- Filter columns with fields[]: \`?fields[]=Name&fields[]=Email\`
|
|
21504
21573
|
|
|
21505
|
-
|
|
21506
|
-
-
|
|
21574
|
+
#### Create Record
|
|
21575
|
+
- \`POST {baseId}/{tableIdOrName}\`
|
|
21576
|
+
- Body: \`{ "records": [{ "fields": { "Name": "value", ... } }] }\`
|
|
21577
|
+
|
|
21578
|
+
#### Pagination
|
|
21579
|
+
- If the response contains an \`offset\`, fetch the next page by appending \`?offset={offset}\` to the next request`,
|
|
21580
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
21581
|
+
|
|
21582
|
+
- \`airtable_request\`: Airtable REST API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30C6\u30FC\u30D6\u30EB\u4E00\u89A7\u306E\u53D6\u5F97\u3001\u30EC\u30B3\u30FC\u30C9\u306E\u8AAD\u307F\u53D6\u308A\u3001\u30EC\u30B3\u30FC\u30C9\u306E\u4F5C\u6210\u30FB\u66F4\u65B0\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u30D1\u30B9\u5185\u306E \`{baseId}\` \u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u306F\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059\u3002\u5229\u7528\u53EF\u80FD\u306A\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3068\u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF\u306F\u4E0B\u90E8\u306E\u300CAirtable API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u300D\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
21507
21583
|
|
|
21508
21584
|
### Business Logic
|
|
21509
21585
|
|
|
21510
|
-
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\
|
|
21586
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u30B3\u30CD\u30AF\u30BFSDK\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u8A8D\u8A3C\u60C5\u5831\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
21511
21587
|
|
|
21512
|
-
|
|
21588
|
+
SDK\u30E1\u30BD\u30C3\u30C9 (\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8):
|
|
21589
|
+
- \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304Dfetch
|
|
21590
|
+
- \`client.listTables()\` \u2014 \u30D9\u30FC\u30B9\u5185\u306E\u30C6\u30FC\u30D6\u30EB\u4E00\u89A7\u3092\u53D6\u5F97\uFF08\u30B9\u30AD\u30FC\u30DE\u63A2\u7D22\uFF09
|
|
21591
|
+
- \`client.listRecords(tableName, options?)\` \u2014 \u30D5\u30A3\u30EB\u30BF/\u30BD\u30FC\u30C8/\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u4ED8\u304D\u3067\u30EC\u30B3\u30FC\u30C9\u53D6\u5F97
|
|
21592
|
+
- \`client.getRecord(tableName, recordId)\` \u2014 \u5358\u4E00\u30EC\u30B3\u30FC\u30C9\u3092\u53D6\u5F97
|
|
21593
|
+
- \`client.createRecords(tableName, records)\` \u2014 \u30EC\u30B3\u30FC\u30C9\u3092\u4F5C\u6210
|
|
21594
|
+
- \`client.updateRecords(tableName, records)\` \u2014 \u30EC\u30B3\u30FC\u30C9\u3092\u66F4\u65B0
|
|
21513
21595
|
|
|
21514
21596
|
\`\`\`ts
|
|
21597
|
+
import type { Context } from "hono";
|
|
21515
21598
|
import { connection } from "@squadbase/vite-server/connectors/airtable";
|
|
21516
21599
|
|
|
21517
21600
|
const airtable = connection("<connectionId>");
|
|
21518
21601
|
|
|
21519
|
-
|
|
21520
|
-
const
|
|
21521
|
-
const data = await res.json();
|
|
21602
|
+
export default async function handler(c: Context) {
|
|
21603
|
+
const { status = "Done" } = await c.req.json<{ status?: string }>();
|
|
21522
21604
|
|
|
21523
|
-
|
|
21524
|
-
|
|
21525
|
-
|
|
21526
|
-
|
|
21527
|
-
|
|
21528
|
-
|
|
21529
|
-
|
|
21530
|
-
|
|
21531
|
-
|
|
21532
|
-
|
|
21533
|
-
|
|
21534
|
-
|
|
21535
|
-
|
|
21536
|
-
|
|
21537
|
-
|
|
21538
|
-
|
|
21605
|
+
const { records } = await airtable.listRecords("Tasks", {
|
|
21606
|
+
filterByFormula: \`{Status} = "\${status}"\`,
|
|
21607
|
+
fields: ["Name", "Status", "DueDate"],
|
|
21608
|
+
sort: [{ field: "DueDate", direction: "asc" }],
|
|
21609
|
+
maxRecords: 100,
|
|
21610
|
+
});
|
|
21611
|
+
|
|
21612
|
+
return c.json(
|
|
21613
|
+
records.map((r) => ({
|
|
21614
|
+
id: r.id,
|
|
21615
|
+
name: r.fields.Name,
|
|
21616
|
+
status: r.fields.Status,
|
|
21617
|
+
dueDate: r.fields.DueDate,
|
|
21618
|
+
})),
|
|
21619
|
+
);
|
|
21620
|
+
}
|
|
21621
|
+
\`\`\`
|
|
21622
|
+
|
|
21623
|
+
### Airtable API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
21624
|
+
|
|
21625
|
+
#### \u30C6\u30FC\u30D6\u30EB\u4E00\u89A7\u306E\u53D6\u5F97\uFF08\u30B9\u30AD\u30FC\u30DE\u63A2\u7D22\uFF09
|
|
21626
|
+
- \`GET meta/bases/{baseId}/tables\`
|
|
21627
|
+
|
|
21628
|
+
#### \u30EC\u30B3\u30FC\u30C9\u306E\u53D6\u5F97
|
|
21629
|
+
- \`GET {baseId}/{tableIdOrName}\`
|
|
21630
|
+
- \u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF\u4F8B: \`?maxRecords=100&filterByFormula={formula}&sort[0][field]=Name&sort[0][direction]=asc\`
|
|
21631
|
+
- fields[] \u3067\u30AB\u30E9\u30E0\u3092\u30D5\u30A3\u30EB\u30BF: \`?fields[]=Name&fields[]=Email\`
|
|
21632
|
+
|
|
21633
|
+
#### \u30EC\u30B3\u30FC\u30C9\u306E\u4F5C\u6210
|
|
21634
|
+
- \`POST {baseId}/{tableIdOrName}\`
|
|
21635
|
+
- Body: \`{ "records": [{ "fields": { "Name": "value", ... } }] }\`
|
|
21636
|
+
|
|
21637
|
+
#### \u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3
|
|
21638
|
+
- \u30EC\u30B9\u30DD\u30F3\u30B9\u306B \`offset\` \u304C\u542B\u307E\u308C\u308B\u5834\u5408\u3001\u6B21\u306E\u30EA\u30AF\u30A8\u30B9\u30C8\u306B \`?offset={offset}\` \u3092\u8FFD\u52A0\u3057\u3066\u6B21\u306E\u30DA\u30FC\u30B8\u3092\u53D6\u5F97\u3057\u307E\u3059`
|
|
21539
21639
|
},
|
|
21540
21640
|
tools: tools10
|
|
21541
21641
|
});
|
|
@@ -21915,11 +22015,14 @@ var googleAdsOauthConnector = new ConnectorPlugin({
|
|
|
21915
22015
|
]
|
|
21916
22016
|
},
|
|
21917
22017
|
systemPrompt: {
|
|
21918
|
-
en: `###
|
|
21919
|
-
- Use GAQL (Google Ads Query Language) to query campaign data
|
|
21920
|
-
- {customerId} in the path is automatically replaced (hyphens removed)
|
|
22018
|
+
en: `### Tools
|
|
21921
22019
|
|
|
21922
|
-
|
|
22020
|
+
- \`google-ads-oauth_request\`: Send authenticated requests to the Google Ads API. Use it for GAQL queries via searchStream. The {customerId} placeholder in paths is automatically replaced (hyphens removed). Authentication and developer token are configured automatically.
|
|
22021
|
+
- \`google-ads-oauth_listCustomers\`: List accessible Google Ads customer accounts. Use this during setup to discover available accounts.
|
|
22022
|
+
|
|
22023
|
+
### Google Ads API Reference
|
|
22024
|
+
|
|
22025
|
+
#### Query Data (searchStream)
|
|
21923
22026
|
- POST customers/{customerId}/googleAds:searchStream
|
|
21924
22027
|
- Body: { "query": "SELECT campaign.id, campaign.name, metrics.impressions FROM campaign WHERE segments.date DURING LAST_30_DAYS" }
|
|
21925
22028
|
|
|
@@ -21965,11 +22068,14 @@ rows.forEach(row => console.log(row));
|
|
|
21965
22068
|
// List accessible customer accounts
|
|
21966
22069
|
const customerIds = await ads.listAccessibleCustomers();
|
|
21967
22070
|
\`\`\``,
|
|
21968
|
-
ja: `###
|
|
21969
|
-
|
|
21970
|
-
- \u30D1\u30B9\u5185\u306E
|
|
22071
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
22072
|
+
|
|
22073
|
+
- \`google-ads-oauth_request\`: Google Ads API\u3078\u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u3092\u9001\u4FE1\u3057\u307E\u3059\u3002searchStream\u3092\u4F7F\u3063\u305FGAQL\u30AF\u30A8\u30EA\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u30D1\u30B9\u5185\u306E{customerId}\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u306F\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059\uFF08\u30CF\u30A4\u30D5\u30F3\u306F\u9664\u53BB\uFF09\u3002\u8A8D\u8A3C\u3068\u30C7\u30D9\u30ED\u30C3\u30D1\u30FC\u30C8\u30FC\u30AF\u30F3\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002
|
|
22074
|
+
- \`google-ads-oauth_listCustomers\`: \u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306AGoogle Ads\u9867\u5BA2\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
|
|
22075
|
+
|
|
22076
|
+
### Google Ads API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
21971
22077
|
|
|
21972
|
-
|
|
22078
|
+
#### \u30C7\u30FC\u30BF\u306E\u30AF\u30A8\u30EA (searchStream)
|
|
21973
22079
|
- POST customers/{customerId}/googleAds:searchStream
|
|
21974
22080
|
- Body: { "query": "SELECT campaign.id, campaign.name, metrics.impressions FROM campaign WHERE segments.date DURING LAST_30_DAYS" }
|
|
21975
22081
|
|
|
@@ -22188,126 +22294,142 @@ var googleAnalyticsConnector = new ConnectorPlugin({
|
|
|
22188
22294
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
22189
22295
|
onboarding: googleAnalyticsOnboarding,
|
|
22190
22296
|
systemPrompt: {
|
|
22191
|
-
en: `###
|
|
22192
|
-
- Call the GA4 Data API using the authenticated request tool
|
|
22193
|
-
- {propertyId} in the path is automatically replaced
|
|
22194
|
-
|
|
22195
|
-
### Get Metadata (Check available dimensions and metrics)
|
|
22196
|
-
- GET properties/{propertyId}/metadata
|
|
22197
|
-
|
|
22198
|
-
### Get Report
|
|
22199
|
-
- POST properties/{propertyId}:runReport
|
|
22200
|
-
- Body example:
|
|
22201
|
-
{
|
|
22202
|
-
"dateRanges": [{"startDate": "7daysAgo", "endDate": "today"}],
|
|
22203
|
-
"dimensions": [{"name": "date"}],
|
|
22204
|
-
"metrics": [{"name": "activeUsers"}],
|
|
22205
|
-
"limit": 100
|
|
22206
|
-
}
|
|
22207
|
-
|
|
22208
|
-
### Common Dimensions
|
|
22209
|
-
date, country, city, deviceCategory, browser, pagePath, pageTitle,
|
|
22210
|
-
sessionSource, sessionMedium, eventName
|
|
22211
|
-
|
|
22212
|
-
### Common Metrics
|
|
22213
|
-
activeUsers, sessions, screenPageViews, bounceRate,
|
|
22214
|
-
averageSessionDuration, conversions, totalRevenue
|
|
22297
|
+
en: `### Tools
|
|
22215
22298
|
|
|
22216
|
-
|
|
22217
|
-
- Absolute: "2024-01-01"
|
|
22218
|
-
- Relative: "today", "yesterday", "7daysAgo", "30daysAgo"
|
|
22299
|
+
- \`google-analytics_request\`: The only way to call the GA4 Data API. Use it to fetch metadata, run reports, or run realtime reports. See the GA4 Data API Reference below for available endpoints and request bodies.
|
|
22219
22300
|
|
|
22220
22301
|
### Business Logic
|
|
22221
22302
|
|
|
22222
|
-
The business logic type for this connector is "typescript".
|
|
22303
|
+
The business logic type for this connector is "typescript". Use the connector SDK in your handler. Do NOT read credentials from environment variables.
|
|
22223
22304
|
|
|
22224
|
-
|
|
22305
|
+
SDK methods (client created via \`connection(connectionId)\`):
|
|
22306
|
+
- \`client.runReport(request)\` \u2014 run a GA4 report
|
|
22307
|
+
- \`client.runRealtimeReport(request)\` \u2014 run a realtime report
|
|
22308
|
+
- \`client.getMetadata()\` \u2014 fetch available dimensions/metrics
|
|
22309
|
+
- \`client.request(path, init?)\` \u2014 low-level authenticated fetch
|
|
22225
22310
|
|
|
22226
22311
|
\`\`\`ts
|
|
22312
|
+
import type { Context } from "hono";
|
|
22227
22313
|
import { connection } from "@squadbase/vite-server/connectors/google-analytics";
|
|
22228
22314
|
|
|
22229
22315
|
const ga = connection("<connectionId>");
|
|
22230
22316
|
|
|
22231
|
-
|
|
22232
|
-
const
|
|
22233
|
-
|
|
22234
|
-
|
|
22235
|
-
});
|
|
22236
|
-
|
|
22317
|
+
export default async function handler(c: Context) {
|
|
22318
|
+
const { startDate = "7daysAgo", endDate = "today" } = await c.req.json<{
|
|
22319
|
+
startDate?: string;
|
|
22320
|
+
endDate?: string;
|
|
22321
|
+
}>();
|
|
22322
|
+
|
|
22323
|
+
const { rows } = await ga.runReport({
|
|
22324
|
+
dateRanges: [{ startDate, endDate }],
|
|
22325
|
+
dimensions: [{ name: "date" }],
|
|
22326
|
+
metrics: [{ name: "activeUsers" }, { name: "sessions" }],
|
|
22327
|
+
limit: 100,
|
|
22328
|
+
});
|
|
22237
22329
|
|
|
22238
|
-
|
|
22239
|
-
|
|
22240
|
-
|
|
22241
|
-
|
|
22242
|
-
|
|
22243
|
-
|
|
22244
|
-
|
|
22245
|
-
|
|
22246
|
-
|
|
22247
|
-
metrics: [{ name: "activeUsers" }],
|
|
22248
|
-
dimensions: [{ name: "country" }],
|
|
22249
|
-
});
|
|
22250
|
-
\`\`\``,
|
|
22251
|
-
ja: `### Google Analytics Data API
|
|
22252
|
-
- \u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u30C4\u30FC\u30EB\u3092\u4F7F\u7528\u3057\u3066GA4 Data API\u3092\u547C\u3073\u51FA\u3057\u307E\u3059
|
|
22253
|
-
- \u30D1\u30B9\u5185\u306E {propertyId} \u306F\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059
|
|
22330
|
+
return c.json(
|
|
22331
|
+
rows.map((row) => ({
|
|
22332
|
+
date: row.dimensionValues[0].value,
|
|
22333
|
+
activeUsers: Number(row.metricValues[0].value),
|
|
22334
|
+
sessions: Number(row.metricValues[1].value),
|
|
22335
|
+
})),
|
|
22336
|
+
);
|
|
22337
|
+
}
|
|
22338
|
+
\`\`\`
|
|
22254
22339
|
|
|
22255
|
-
###
|
|
22256
|
-
- GET properties/{propertyId}/metadata
|
|
22340
|
+
### GA4 Data API Reference
|
|
22257
22341
|
|
|
22258
|
-
|
|
22259
|
-
|
|
22260
|
-
-
|
|
22342
|
+
Common operations:
|
|
22343
|
+
|
|
22344
|
+
- **Get metadata** (list available dimensions/metrics for a property): \`GET properties/{propertyId}/metadata\`
|
|
22345
|
+
- **Run report** (query analytics data): \`POST properties/{propertyId}:runReport\` with a body like:
|
|
22346
|
+
\`\`\`json
|
|
22261
22347
|
{
|
|
22262
|
-
"dateRanges": [{"startDate": "7daysAgo", "endDate": "today"}],
|
|
22263
|
-
"dimensions": [{"name": "date"}],
|
|
22264
|
-
"metrics": [{"name": "activeUsers"}],
|
|
22348
|
+
"dateRanges": [{ "startDate": "7daysAgo", "endDate": "today" }],
|
|
22349
|
+
"dimensions": [{ "name": "date" }],
|
|
22350
|
+
"metrics": [{ "name": "activeUsers" }],
|
|
22265
22351
|
"limit": 100
|
|
22266
22352
|
}
|
|
22353
|
+
\`\`\`
|
|
22354
|
+
- **Run realtime report**: \`POST properties/{propertyId}:runRealtimeReport\`
|
|
22267
22355
|
|
|
22268
|
-
|
|
22269
|
-
date, country, city, deviceCategory, browser, pagePath, pageTitle,
|
|
22270
|
-
sessionSource, sessionMedium, eventName
|
|
22356
|
+
#### Common dimensions
|
|
22357
|
+
date, country, city, deviceCategory, browser, pagePath, pageTitle, sessionSource, sessionMedium, eventName
|
|
22271
22358
|
|
|
22272
|
-
|
|
22273
|
-
activeUsers, sessions, screenPageViews, bounceRate,
|
|
22274
|
-
averageSessionDuration, conversions, totalRevenue
|
|
22359
|
+
#### Common metrics
|
|
22360
|
+
activeUsers, sessions, screenPageViews, bounceRate, averageSessionDuration, conversions, totalRevenue
|
|
22275
22361
|
|
|
22276
|
-
|
|
22277
|
-
-
|
|
22278
|
-
-
|
|
22362
|
+
#### Date specification
|
|
22363
|
+
- Absolute: \`"2024-01-01"\`
|
|
22364
|
+
- Relative: \`"today"\`, \`"yesterday"\`, \`"7daysAgo"\`, \`"30daysAgo"\``,
|
|
22365
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
22366
|
+
|
|
22367
|
+
- \`google-analytics_request\`: GA4 Data API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30E1\u30BF\u30C7\u30FC\u30BF\u306E\u53D6\u5F97\u3001\u30EC\u30DD\u30FC\u30C8\u306E\u5B9F\u884C\u3001\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u30EC\u30DD\u30FC\u30C8\u306E\u5B9F\u884C\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u5229\u7528\u53EF\u80FD\u306A\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3068\u30EA\u30AF\u30A8\u30B9\u30C8\u30DC\u30C7\u30A3\u306F\u4E0B\u90E8\u306E\u300CGA4 Data API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u300D\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
22279
22368
|
|
|
22280
22369
|
### Business Logic
|
|
22281
22370
|
|
|
22282
|
-
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\
|
|
22371
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u30B3\u30CD\u30AF\u30BFSDK\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u8A8D\u8A3C\u60C5\u5831\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
22283
22372
|
|
|
22284
|
-
|
|
22373
|
+
SDK\u30E1\u30BD\u30C3\u30C9 (\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8):
|
|
22374
|
+
- \`client.runReport(request)\` \u2014 GA4\u30EC\u30DD\u30FC\u30C8\u3092\u5B9F\u884C
|
|
22375
|
+
- \`client.runRealtimeReport(request)\` \u2014 \u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u30EC\u30DD\u30FC\u30C8\u3092\u5B9F\u884C
|
|
22376
|
+
- \`client.getMetadata()\` \u2014 \u5229\u7528\u53EF\u80FD\u306A\u30C7\u30A3\u30E1\u30F3\u30B7\u30E7\u30F3/\u30E1\u30C8\u30EA\u30AF\u30B9\u3092\u53D6\u5F97
|
|
22377
|
+
- \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304Dfetch
|
|
22285
22378
|
|
|
22286
22379
|
\`\`\`ts
|
|
22380
|
+
import type { Context } from "hono";
|
|
22287
22381
|
import { connection } from "@squadbase/vite-server/connectors/google-analytics";
|
|
22288
22382
|
|
|
22289
22383
|
const ga = connection("<connectionId>");
|
|
22290
22384
|
|
|
22291
|
-
|
|
22292
|
-
const
|
|
22293
|
-
|
|
22294
|
-
|
|
22295
|
-
});
|
|
22296
|
-
|
|
22385
|
+
export default async function handler(c: Context) {
|
|
22386
|
+
const { startDate = "7daysAgo", endDate = "today" } = await c.req.json<{
|
|
22387
|
+
startDate?: string;
|
|
22388
|
+
endDate?: string;
|
|
22389
|
+
}>();
|
|
22390
|
+
|
|
22391
|
+
const { rows } = await ga.runReport({
|
|
22392
|
+
dateRanges: [{ startDate, endDate }],
|
|
22393
|
+
dimensions: [{ name: "date" }],
|
|
22394
|
+
metrics: [{ name: "activeUsers" }, { name: "sessions" }],
|
|
22395
|
+
limit: 100,
|
|
22396
|
+
});
|
|
22297
22397
|
|
|
22298
|
-
|
|
22299
|
-
|
|
22300
|
-
|
|
22301
|
-
|
|
22302
|
-
|
|
22303
|
-
|
|
22304
|
-
|
|
22305
|
-
|
|
22306
|
-
|
|
22307
|
-
|
|
22308
|
-
|
|
22309
|
-
|
|
22310
|
-
|
|
22398
|
+
return c.json(
|
|
22399
|
+
rows.map((row) => ({
|
|
22400
|
+
date: row.dimensionValues[0].value,
|
|
22401
|
+
activeUsers: Number(row.metricValues[0].value),
|
|
22402
|
+
sessions: Number(row.metricValues[1].value),
|
|
22403
|
+
})),
|
|
22404
|
+
);
|
|
22405
|
+
}
|
|
22406
|
+
\`\`\`
|
|
22407
|
+
|
|
22408
|
+
### GA4 Data API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
22409
|
+
|
|
22410
|
+
\u4E3B\u306A\u64CD\u4F5C:
|
|
22411
|
+
|
|
22412
|
+
- **\u30E1\u30BF\u30C7\u30FC\u30BF\u306E\u53D6\u5F97** (\u30D7\u30ED\u30D1\u30C6\u30A3\u3067\u5229\u7528\u53EF\u80FD\u306A\u30C7\u30A3\u30E1\u30F3\u30B7\u30E7\u30F3/\u30E1\u30C8\u30EA\u30AF\u30B9\u306E\u4E00\u89A7): \`GET properties/{propertyId}/metadata\`
|
|
22413
|
+
- **\u30EC\u30DD\u30FC\u30C8\u306E\u53D6\u5F97** (\u5206\u6790\u30C7\u30FC\u30BF\u306E\u30AF\u30A8\u30EA): \`POST properties/{propertyId}:runReport\`\u3001\u30DC\u30C7\u30A3\u4F8B:
|
|
22414
|
+
\`\`\`json
|
|
22415
|
+
{
|
|
22416
|
+
"dateRanges": [{ "startDate": "7daysAgo", "endDate": "today" }],
|
|
22417
|
+
"dimensions": [{ "name": "date" }],
|
|
22418
|
+
"metrics": [{ "name": "activeUsers" }],
|
|
22419
|
+
"limit": 100
|
|
22420
|
+
}
|
|
22421
|
+
\`\`\`
|
|
22422
|
+
- **\u30EA\u30A2\u30EB\u30BF\u30A4\u30E0\u30EC\u30DD\u30FC\u30C8**: \`POST properties/{propertyId}:runRealtimeReport\`
|
|
22423
|
+
|
|
22424
|
+
#### \u4E3B\u8981\u306A\u30C7\u30A3\u30E1\u30F3\u30B7\u30E7\u30F3
|
|
22425
|
+
date, country, city, deviceCategory, browser, pagePath, pageTitle, sessionSource, sessionMedium, eventName
|
|
22426
|
+
|
|
22427
|
+
#### \u4E3B\u8981\u306A\u30E1\u30C8\u30EA\u30AF\u30B9
|
|
22428
|
+
activeUsers, sessions, screenPageViews, bounceRate, averageSessionDuration, conversions, totalRevenue
|
|
22429
|
+
|
|
22430
|
+
#### \u65E5\u4ED8\u306E\u6307\u5B9A
|
|
22431
|
+
- \u7D76\u5BFE\u5024: \`"2024-01-01"\`
|
|
22432
|
+
- \u76F8\u5BFE\u5024: \`"today"\`, \`"yesterday"\`, \`"7daysAgo"\`, \`"30daysAgo"\``
|
|
22311
22433
|
},
|
|
22312
22434
|
tools: tools12
|
|
22313
22435
|
});
|
|
@@ -22749,11 +22871,15 @@ var googleAnalyticsOauthConnector = new ConnectorPlugin({
|
|
|
22749
22871
|
]
|
|
22750
22872
|
},
|
|
22751
22873
|
systemPrompt: {
|
|
22752
|
-
en: `###
|
|
22753
|
-
- Call the GA4 Data API using the authenticated request tool
|
|
22754
|
-
- {propertyId} in the path is automatically replaced
|
|
22874
|
+
en: `### Tools
|
|
22755
22875
|
|
|
22756
|
-
|
|
22876
|
+
- \`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.
|
|
22877
|
+
- \`google-analytics-oauth_listAccounts\`: List accessible Google Analytics accounts. Use during setup to discover available accounts.
|
|
22878
|
+
- \`google-analytics-oauth_listProperties\`: List GA4 properties for a given account. Use during setup to select the target property.
|
|
22879
|
+
|
|
22880
|
+
### GA4 Data API Reference
|
|
22881
|
+
|
|
22882
|
+
#### Get Metadata (Check available dimensions and metrics)
|
|
22757
22883
|
- GET properties/{propertyId}/metadata
|
|
22758
22884
|
|
|
22759
22885
|
### Get Report
|
|
@@ -22809,11 +22935,15 @@ const realtime = await ga.runRealtimeReport({
|
|
|
22809
22935
|
dimensions: [{ name: "country" }],
|
|
22810
22936
|
});
|
|
22811
22937
|
\`\`\``,
|
|
22812
|
-
ja: `###
|
|
22813
|
-
|
|
22814
|
-
- \u30D1\u30B9\u5185\u306E
|
|
22938
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
22939
|
+
|
|
22940
|
+
- \`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
|
|
22941
|
+
- \`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
|
|
22942
|
+
- \`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
|
|
22943
|
+
|
|
22944
|
+
### GA4 Data API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
22815
22945
|
|
|
22816
|
-
|
|
22946
|
+
#### \u30E1\u30BF\u30C7\u30FC\u30BF\u306E\u53D6\u5F97\uFF08\u5229\u7528\u53EF\u80FD\u306A\u30C7\u30A3\u30E1\u30F3\u30B7\u30E7\u30F3\u3068\u30E1\u30C8\u30EA\u30AF\u30B9\u306E\u78BA\u8A8D\uFF09
|
|
22817
22947
|
- GET properties/{propertyId}/metadata
|
|
22818
22948
|
|
|
22819
22949
|
### \u30EC\u30DD\u30FC\u30C8\u306E\u53D6\u5F97
|
|
@@ -23099,9 +23229,13 @@ var googleSheetsOauthConnector = new ConnectorPlugin({
|
|
|
23099
23229
|
]
|
|
23100
23230
|
},
|
|
23101
23231
|
systemPrompt: {
|
|
23102
|
-
en: `###
|
|
23232
|
+
en: `### Tools
|
|
23103
23233
|
|
|
23104
|
-
|
|
23234
|
+
- \`google-sheets-oauth_request\`: The only way to call the Google Sheets API (read-only). Use it to get spreadsheet metadata, cell values, and batch values. Authentication is configured automatically via OAuth. The {spreadsheetId} placeholder in paths is automatically replaced with the configured default spreadsheet ID.
|
|
23235
|
+
|
|
23236
|
+
### Google Sheets API Reference
|
|
23237
|
+
|
|
23238
|
+
#### Available Endpoints
|
|
23105
23239
|
- GET \`/{spreadsheetId}\` \u2014 Get spreadsheet metadata (title, sheets, properties)
|
|
23106
23240
|
- GET \`/{spreadsheetId}/values/{range}\` \u2014 Get cell values for a range
|
|
23107
23241
|
- GET \`/{spreadsheetId}/values:batchGet?ranges={range1}&ranges={range2}\` \u2014 Get values for multiple ranges
|
|
@@ -23143,9 +23277,13 @@ console.log(values.values); // 2D array
|
|
|
23143
23277
|
const batch = await sheets.batchGetValues(["Sheet1!A1:B5", "Sheet2!A1:C3"]);
|
|
23144
23278
|
batch.valueRanges.forEach(vr => console.log(vr.range, vr.values));
|
|
23145
23279
|
\`\`\``,
|
|
23146
|
-
ja: `###
|
|
23280
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
23281
|
+
|
|
23282
|
+
- \`google-sheets-oauth_request\`: Google Sheets API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\uFF08\u8AAD\u307F\u53D6\u308A\u5C02\u7528\uFF09\u3002\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3001\u30BB\u30EB\u5024\u3001\u30D0\u30C3\u30C1\u5024\u306E\u53D6\u5F97\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002OAuth\u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002\u30D1\u30B9\u5185\u306E{spreadsheetId}\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u306F\u8A2D\u5B9A\u6E08\u307F\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u30B9\u30D7\u30EC\u30C3\u30C9\u30B7\u30FC\u30C8ID\u3067\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059\u3002
|
|
23283
|
+
|
|
23284
|
+
### Google Sheets API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
23147
23285
|
|
|
23148
|
-
|
|
23286
|
+
#### \u5229\u7528\u53EF\u80FD\u306A\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
|
|
23149
23287
|
- 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
|
|
23150
23288
|
- GET \`/{spreadsheetId}/values/{range}\` \u2014 \u7BC4\u56F2\u306E\u30BB\u30EB\u5024\u3092\u53D6\u5F97
|
|
23151
23289
|
- GET \`/{spreadsheetId}/values:batchGet?ranges={range1}&ranges={range2}\` \u2014 \u8907\u6570\u7BC4\u56F2\u306E\u5024\u3092\u53D6\u5F97
|
|
@@ -23394,9 +23532,13 @@ var hubspotOauthConnector = new ConnectorPlugin({
|
|
|
23394
23532
|
]
|
|
23395
23533
|
},
|
|
23396
23534
|
systemPrompt: {
|
|
23397
|
-
en: `###
|
|
23535
|
+
en: `### Tools
|
|
23398
23536
|
|
|
23399
|
-
|
|
23537
|
+
- \`hubspot-oauth_request\`: The only way to call the HubSpot API. Use it to query contacts, deals, companies, and other CRM objects. Authentication is configured automatically via OAuth. HubSpot uses cursor-based pagination with the \`after\` parameter from \`paging.next.after\` in the response.
|
|
23538
|
+
|
|
23539
|
+
### HubSpot API Reference
|
|
23540
|
+
|
|
23541
|
+
#### Available Endpoints
|
|
23400
23542
|
- GET \`/crm/v3/objects/contacts\` \u2014 List contacts
|
|
23401
23543
|
- GET \`/crm/v3/objects/contacts/{contactId}\` \u2014 Get a contact
|
|
23402
23544
|
- GET \`/crm/v3/objects/deals\` \u2014 List deals
|
|
@@ -23435,9 +23577,13 @@ const hubspot = connection("<connectionId>");
|
|
|
23435
23577
|
const res = await hubspot.request("/crm/v3/objects/contacts?limit=10");
|
|
23436
23578
|
const data = await res.json();
|
|
23437
23579
|
\`\`\``,
|
|
23438
|
-
ja: `###
|
|
23580
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
23581
|
+
|
|
23582
|
+
- \`hubspot-oauth_request\`: HubSpot API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30B3\u30F3\u30BF\u30AF\u30C8\u3001\u53D6\u5F15\u3001\u4F1A\u793E\u3001\u305D\u306E\u4ED6\u306ECRM\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30AF\u30A8\u30EA\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002OAuth\u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002HubSpot\u306F\u30EC\u30B9\u30DD\u30F3\u30B9\u306E \`paging.next.after\` \u304B\u3089\u306E \`after\` \u30D1\u30E9\u30E1\u30FC\u30BF\u306B\u3088\u308B\u30AB\u30FC\u30BD\u30EB\u30D9\u30FC\u30B9\u306E\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002
|
|
23583
|
+
|
|
23584
|
+
### HubSpot API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
23439
23585
|
|
|
23440
|
-
|
|
23586
|
+
#### \u5229\u7528\u53EF\u80FD\u306A\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
|
|
23441
23587
|
- GET \`/crm/v3/objects/contacts\` \u2014 \u30B3\u30F3\u30BF\u30AF\u30C8\u4E00\u89A7\u3092\u53D6\u5F97
|
|
23442
23588
|
- GET \`/crm/v3/objects/contacts/{contactId}\` \u2014 \u30B3\u30F3\u30BF\u30AF\u30C8\u3092\u53D6\u5F97
|
|
23443
23589
|
- GET \`/crm/v3/objects/deals\` \u2014 \u53D6\u5F15\u4E00\u89A7\u3092\u53D6\u5F97
|
|
@@ -23681,9 +23827,13 @@ var stripeOauthConnector = new ConnectorPlugin({
|
|
|
23681
23827
|
]
|
|
23682
23828
|
},
|
|
23683
23829
|
systemPrompt: {
|
|
23684
|
-
en: `###
|
|
23830
|
+
en: `### Tools
|
|
23685
23831
|
|
|
23686
|
-
|
|
23832
|
+
- \`stripe-oauth_request\`: The only way to call the Stripe API. Use it to query charges, customers, invoices, subscriptions, products, prices, payment intents, balances, and more. Authentication is configured automatically via OAuth. Stripe uses cursor-based pagination with \`starting_after\` and \`has_more\`.
|
|
23833
|
+
|
|
23834
|
+
### Stripe API Reference
|
|
23835
|
+
|
|
23836
|
+
#### Available Endpoints
|
|
23687
23837
|
- GET \`/v1/charges\` \u2014 List charges
|
|
23688
23838
|
- GET \`/v1/charges/{chargeId}\` \u2014 Get a charge
|
|
23689
23839
|
- GET \`/v1/customers\` \u2014 List customers
|
|
@@ -23726,9 +23876,13 @@ const stripe = connection("<connectionId>");
|
|
|
23726
23876
|
const res = await stripe.request("/v1/customers?limit=10");
|
|
23727
23877
|
const data = await res.json();
|
|
23728
23878
|
\`\`\``,
|
|
23729
|
-
ja: `###
|
|
23879
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
23880
|
+
|
|
23881
|
+
- \`stripe-oauth_request\`: Stripe API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u8ACB\u6C42\u3001\u9867\u5BA2\u3001\u8ACB\u6C42\u66F8\u3001\u30B5\u30D6\u30B9\u30AF\u30EA\u30D7\u30B7\u30E7\u30F3\u3001\u5546\u54C1\u3001\u4FA1\u683C\u3001\u652F\u6255\u3044\u30A4\u30F3\u30C6\u30F3\u30C8\u3001\u6B8B\u9AD8\u306A\u3069\u306E\u30AF\u30A8\u30EA\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002OAuth\u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002Stripe\u306F \`starting_after\` \u3068 \`has_more\` \u306B\u3088\u308B\u30AB\u30FC\u30BD\u30EB\u30D9\u30FC\u30B9\u306E\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002
|
|
23882
|
+
|
|
23883
|
+
### Stripe API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
23730
23884
|
|
|
23731
|
-
|
|
23885
|
+
#### \u5229\u7528\u53EF\u80FD\u306A\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
|
|
23732
23886
|
- GET \`/v1/charges\` \u2014 \u8ACB\u6C42\u4E00\u89A7\u3092\u53D6\u5F97
|
|
23733
23887
|
- GET \`/v1/charges/{chargeId}\` \u2014 \u8ACB\u6C42\u3092\u53D6\u5F97
|
|
23734
23888
|
- GET \`/v1/customers\` \u2014 \u9867\u5BA2\u4E00\u89A7\u3092\u53D6\u5F97
|
|
@@ -24000,9 +24154,13 @@ var airtableOauthConnector = new ConnectorPlugin({
|
|
|
24000
24154
|
]
|
|
24001
24155
|
},
|
|
24002
24156
|
systemPrompt: {
|
|
24003
|
-
en: `###
|
|
24157
|
+
en: `### Tools
|
|
24004
24158
|
|
|
24005
|
-
|
|
24159
|
+
- \`airtable-oauth_request\`: The only way to call the Airtable REST API. Use it to list tables, query/create/update/delete records. Authentication is configured automatically via OAuth. The {baseId} placeholder in paths is automatically replaced with the configured default base ID.
|
|
24160
|
+
|
|
24161
|
+
### Airtable API Reference
|
|
24162
|
+
|
|
24163
|
+
#### Available Endpoints
|
|
24006
24164
|
- GET \`/meta/bases/{baseId}/tables\` \u2014 List tables in a base
|
|
24007
24165
|
- GET \`/{baseId}/{tableIdOrName}\` \u2014 List records in a table
|
|
24008
24166
|
- GET \`/{baseId}/{tableIdOrName}/{recordId}\` \u2014 Get a single record
|
|
@@ -24044,9 +24202,13 @@ const data = await res.json();
|
|
|
24044
24202
|
const records = await airtable.request("/{baseId}/Tasks?maxRecords=100");
|
|
24045
24203
|
const recordsData = await records.json();
|
|
24046
24204
|
\`\`\``,
|
|
24047
|
-
ja: `###
|
|
24205
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
24206
|
+
|
|
24207
|
+
- \`airtable-oauth_request\`: Airtable REST API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30C6\u30FC\u30D6\u30EB\u4E00\u89A7\u306E\u53D6\u5F97\u3001\u30EC\u30B3\u30FC\u30C9\u306E\u691C\u7D22\u30FB\u4F5C\u6210\u30FB\u66F4\u65B0\u30FB\u524A\u9664\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002OAuth\u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002\u30D1\u30B9\u5185\u306E{baseId}\u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u30FC\u306F\u8A2D\u5B9A\u6E08\u307F\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u30D9\u30FC\u30B9ID\u3067\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059\u3002
|
|
24208
|
+
|
|
24209
|
+
### Airtable API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
24048
24210
|
|
|
24049
|
-
|
|
24211
|
+
#### \u5229\u7528\u53EF\u80FD\u306A\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
|
|
24050
24212
|
- GET \`/meta/bases/{baseId}/tables\` \u2014 \u30D9\u30FC\u30B9\u5185\u306E\u30C6\u30FC\u30D6\u30EB\u4E00\u89A7\u3092\u53D6\u5F97
|
|
24051
24213
|
- GET \`/{baseId}/{tableIdOrName}\` \u2014 \u30C6\u30FC\u30D6\u30EB\u5185\u306E\u30EC\u30B3\u30FC\u30C9\u4E00\u89A7\u3092\u53D6\u5F97
|
|
24052
24214
|
- GET \`/{baseId}/{tableIdOrName}/{recordId}\` \u2014 \u5358\u4E00\u30EC\u30B3\u30FC\u30C9\u3092\u53D6\u5F97
|
|
@@ -24245,114 +24407,140 @@ var kintoneConnector = new ConnectorPlugin({
|
|
|
24245
24407
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
24246
24408
|
onboarding: kintoneOnboarding,
|
|
24247
24409
|
systemPrompt: {
|
|
24248
|
-
en: `###
|
|
24249
|
-
- Call the kintone REST API using the authenticated request tool
|
|
24250
|
-
- The base URL (e.g., https://example.cybozu.com) is automatically resolved
|
|
24251
|
-
|
|
24252
|
-
### List Apps
|
|
24253
|
-
- GET apps.json
|
|
24254
|
-
|
|
24255
|
-
### Get Field Definitions
|
|
24256
|
-
- GET app/form/fields.json?app={appId}
|
|
24257
|
-
|
|
24258
|
-
### Get Records
|
|
24259
|
-
- GET records.json?app={appId}&query={query}
|
|
24260
|
-
- Query example: records.json?app=1&query=updatedTime > "2024-01-01" order by recordNumber asc limit 100
|
|
24261
|
-
|
|
24262
|
-
### Add Record
|
|
24263
|
-
- POST record.json
|
|
24264
|
-
- Body: { "app": 1, "record": { "fieldName": { "value": "value" } } }
|
|
24410
|
+
en: `### Tools
|
|
24265
24411
|
|
|
24266
|
-
|
|
24267
|
-
- Comparison: fieldName = "value", fieldName > 100
|
|
24268
|
-
- Operators: and, or, not
|
|
24269
|
-
- Sort: order by fieldName asc/desc
|
|
24270
|
-
- Limit: limit 100 offset 0
|
|
24271
|
-
- String: like "partial match"
|
|
24412
|
+
- \`kintone_request\`: The only way to call the kintone REST API. Use it to list apps, fetch field definitions, and read/write records. The base URL (e.g., \`https://example.cybozu.com\`) is automatically resolved. See the kintone REST API Reference below for endpoints and the kintone query syntax.
|
|
24272
24413
|
|
|
24273
24414
|
### Business Logic
|
|
24274
24415
|
|
|
24275
|
-
The business logic type for this connector is "typescript".
|
|
24416
|
+
The business logic type for this connector is "typescript". Use the connector SDK in your handler. Do NOT read credentials from environment variables.
|
|
24276
24417
|
|
|
24277
|
-
|
|
24418
|
+
SDK methods (client created via \`connection(connectionId)\`):
|
|
24419
|
+
- \`client.request(path, init?)\` \u2014 low-level authenticated fetch
|
|
24420
|
+
- \`client.getRecords(appId, options?)\` \u2014 fetch records with query/fields/totalCount (uses @kintone/rest-api-client)
|
|
24421
|
+
- \`client.getRecord(appId, recordId)\` \u2014 fetch a single record
|
|
24422
|
+
- \`client.listApps(options?)\` \u2014 list available apps
|
|
24278
24423
|
|
|
24279
24424
|
\`\`\`ts
|
|
24425
|
+
import type { Context } from "hono";
|
|
24280
24426
|
import { connection } from "@squadbase/vite-server/connectors/kintone";
|
|
24281
24427
|
|
|
24282
24428
|
const kintone = connection("<connectionId>");
|
|
24283
24429
|
|
|
24284
|
-
|
|
24285
|
-
const
|
|
24286
|
-
|
|
24430
|
+
export default async function handler(c: Context) {
|
|
24431
|
+
const { appId, status = "Active" } = await c.req.json<{
|
|
24432
|
+
appId: number;
|
|
24433
|
+
status?: string;
|
|
24434
|
+
}>();
|
|
24287
24435
|
|
|
24288
|
-
await kintone.
|
|
24289
|
-
|
|
24290
|
-
|
|
24291
|
-
|
|
24436
|
+
const { records, totalCount } = await kintone.getRecords(appId, {
|
|
24437
|
+
query: \`status = "\${status}" order by updatedTime desc limit 100\`,
|
|
24438
|
+
fields: ["$id", "name", "email", "status", "updatedTime"],
|
|
24439
|
+
totalCount: true,
|
|
24440
|
+
});
|
|
24292
24441
|
|
|
24293
|
-
|
|
24294
|
-
|
|
24295
|
-
|
|
24296
|
-
|
|
24297
|
-
|
|
24298
|
-
|
|
24299
|
-
|
|
24300
|
-
|
|
24301
|
-
|
|
24302
|
-
|
|
24303
|
-
|
|
24304
|
-
|
|
24442
|
+
return c.json({
|
|
24443
|
+
totalCount,
|
|
24444
|
+
rows: records.map((r) => ({
|
|
24445
|
+
id: r.$id.value,
|
|
24446
|
+
name: r.name?.value,
|
|
24447
|
+
email: r.email?.value,
|
|
24448
|
+
status: r.status?.value,
|
|
24449
|
+
updatedTime: r.updatedTime?.value,
|
|
24450
|
+
})),
|
|
24451
|
+
});
|
|
24452
|
+
}
|
|
24453
|
+
\`\`\`
|
|
24305
24454
|
|
|
24306
|
-
###
|
|
24307
|
-
- GET apps.json
|
|
24455
|
+
### kintone REST API Reference
|
|
24308
24456
|
|
|
24309
|
-
|
|
24310
|
-
- GET
|
|
24457
|
+
#### List Apps
|
|
24458
|
+
- \`GET apps.json\`
|
|
24311
24459
|
|
|
24312
|
-
|
|
24313
|
-
- GET
|
|
24314
|
-
- \u30AF\u30A8\u30EA\u4F8B: records.json?app=1&query=updatedTime > "2024-01-01" order by recordNumber asc limit 100
|
|
24460
|
+
#### Get Field Definitions
|
|
24461
|
+
- \`GET app/form/fields.json?app={appId}\`
|
|
24315
24462
|
|
|
24316
|
-
|
|
24317
|
-
-
|
|
24318
|
-
-
|
|
24463
|
+
#### Get Records
|
|
24464
|
+
- \`GET records.json?app={appId}&query={query}\`
|
|
24465
|
+
- Query example: \`records.json?app=1&query=updatedTime > "2024-01-01" order by recordNumber asc limit 100\`
|
|
24319
24466
|
|
|
24320
|
-
|
|
24321
|
-
-
|
|
24322
|
-
-
|
|
24323
|
-
|
|
24324
|
-
|
|
24325
|
-
-
|
|
24467
|
+
#### Add Record
|
|
24468
|
+
- \`POST record.json\`
|
|
24469
|
+
- Body: \`{ "app": 1, "record": { "fieldName": { "value": "value" } } }\`
|
|
24470
|
+
|
|
24471
|
+
#### kintone Query Syntax
|
|
24472
|
+
- Comparison: \`fieldName = "value"\`, \`fieldName > 100\`
|
|
24473
|
+
- Operators: \`and\`, \`or\`, \`not\`
|
|
24474
|
+
- Sort: \`order by fieldName asc/desc\`
|
|
24475
|
+
- Limit: \`limit 100 offset 0\`
|
|
24476
|
+
- String: \`like "partial match"\``,
|
|
24477
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
24478
|
+
|
|
24479
|
+
- \`kintone_request\`: kintone REST API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30A2\u30D7\u30EA\u4E00\u89A7\u306E\u53D6\u5F97\u3001\u30D5\u30A3\u30FC\u30EB\u30C9\u5B9A\u7FA9\u306E\u53D6\u5F97\u3001\u30EC\u30B3\u30FC\u30C9\u306E\u8AAD\u307F\u66F8\u304D\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u30D9\u30FC\u30B9URL\uFF08\u4F8B: \`https://example.cybozu.com\`\uFF09\u306F\u81EA\u52D5\u7684\u306B\u89E3\u6C7A\u3055\u308C\u307E\u3059\u3002\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u304A\u3088\u3073kintone\u30AF\u30A8\u30EA\u69CB\u6587\u306F\u4E0B\u90E8\u306E\u300Ckintone REST API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u300D\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
24326
24480
|
|
|
24327
24481
|
### Business Logic
|
|
24328
24482
|
|
|
24329
|
-
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\
|
|
24483
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u30B3\u30CD\u30AF\u30BFSDK\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u8A8D\u8A3C\u60C5\u5831\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
24330
24484
|
|
|
24331
|
-
|
|
24485
|
+
SDK\u30E1\u30BD\u30C3\u30C9 (\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8):
|
|
24486
|
+
- \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304Dfetch
|
|
24487
|
+
- \`client.getRecords(appId, options?)\` \u2014 query/fields/totalCount\u4ED8\u304D\u3067\u30EC\u30B3\u30FC\u30C9\u53D6\u5F97 (@kintone/rest-api-client \u4F7F\u7528)
|
|
24488
|
+
- \`client.getRecord(appId, recordId)\` \u2014 \u5358\u4E00\u30EC\u30B3\u30FC\u30C9\u3092\u53D6\u5F97
|
|
24489
|
+
- \`client.listApps(options?)\` \u2014 \u5229\u7528\u53EF\u80FD\u306A\u30A2\u30D7\u30EA\u4E00\u89A7\u3092\u53D6\u5F97
|
|
24332
24490
|
|
|
24333
24491
|
\`\`\`ts
|
|
24492
|
+
import type { Context } from "hono";
|
|
24334
24493
|
import { connection } from "@squadbase/vite-server/connectors/kintone";
|
|
24335
24494
|
|
|
24336
24495
|
const kintone = connection("<connectionId>");
|
|
24337
24496
|
|
|
24338
|
-
|
|
24339
|
-
const
|
|
24340
|
-
|
|
24497
|
+
export default async function handler(c: Context) {
|
|
24498
|
+
const { appId, status = "Active" } = await c.req.json<{
|
|
24499
|
+
appId: number;
|
|
24500
|
+
status?: string;
|
|
24501
|
+
}>();
|
|
24341
24502
|
|
|
24342
|
-
await kintone.
|
|
24343
|
-
|
|
24344
|
-
|
|
24345
|
-
|
|
24503
|
+
const { records, totalCount } = await kintone.getRecords(appId, {
|
|
24504
|
+
query: \`status = "\${status}" order by updatedTime desc limit 100\`,
|
|
24505
|
+
fields: ["$id", "name", "email", "status", "updatedTime"],
|
|
24506
|
+
totalCount: true,
|
|
24507
|
+
});
|
|
24346
24508
|
|
|
24347
|
-
|
|
24348
|
-
|
|
24349
|
-
|
|
24350
|
-
|
|
24351
|
-
|
|
24352
|
-
|
|
24353
|
-
|
|
24354
|
-
|
|
24355
|
-
|
|
24509
|
+
return c.json({
|
|
24510
|
+
totalCount,
|
|
24511
|
+
rows: records.map((r) => ({
|
|
24512
|
+
id: r.$id.value,
|
|
24513
|
+
name: r.name?.value,
|
|
24514
|
+
email: r.email?.value,
|
|
24515
|
+
status: r.status?.value,
|
|
24516
|
+
updatedTime: r.updatedTime?.value,
|
|
24517
|
+
})),
|
|
24518
|
+
});
|
|
24519
|
+
}
|
|
24520
|
+
\`\`\`
|
|
24521
|
+
|
|
24522
|
+
### kintone REST API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
24523
|
+
|
|
24524
|
+
#### \u30A2\u30D7\u30EA\u4E00\u89A7\u306E\u53D6\u5F97
|
|
24525
|
+
- \`GET apps.json\`
|
|
24526
|
+
|
|
24527
|
+
#### \u30D5\u30A3\u30FC\u30EB\u30C9\u5B9A\u7FA9\u306E\u53D6\u5F97
|
|
24528
|
+
- \`GET app/form/fields.json?app={appId}\`
|
|
24529
|
+
|
|
24530
|
+
#### \u30EC\u30B3\u30FC\u30C9\u306E\u53D6\u5F97
|
|
24531
|
+
- \`GET records.json?app={appId}&query={query}\`
|
|
24532
|
+
- \u30AF\u30A8\u30EA\u4F8B: \`records.json?app=1&query=updatedTime > "2024-01-01" order by recordNumber asc limit 100\`
|
|
24533
|
+
|
|
24534
|
+
#### \u30EC\u30B3\u30FC\u30C9\u306E\u8FFD\u52A0
|
|
24535
|
+
- \`POST record.json\`
|
|
24536
|
+
- Body: \`{ "app": 1, "record": { "fieldName": { "value": "value" } } }\`
|
|
24537
|
+
|
|
24538
|
+
#### kintone \u30AF\u30A8\u30EA\u69CB\u6587
|
|
24539
|
+
- \u6BD4\u8F03: \`fieldName = "value"\`, \`fieldName > 100\`
|
|
24540
|
+
- \u6F14\u7B97\u5B50: \`and\`, \`or\`, \`not\`
|
|
24541
|
+
- \u30BD\u30FC\u30C8: \`order by fieldName asc/desc\`
|
|
24542
|
+
- \u5236\u9650: \`limit 100 offset 0\`
|
|
24543
|
+
- \u6587\u5B57\u5217: \`like "\u90E8\u5206\u4E00\u81F4"\``
|
|
24356
24544
|
},
|
|
24357
24545
|
tools: tools18
|
|
24358
24546
|
});
|
|
@@ -24473,12 +24661,13 @@ var kintoneApiTokenConnector = new ConnectorPlugin({
|
|
|
24473
24661
|
releaseFlag: { dev1: true, dev2: false, prod: false },
|
|
24474
24662
|
onboarding: kintoneApiTokenOnboarding,
|
|
24475
24663
|
systemPrompt: {
|
|
24476
|
-
en: `###
|
|
24477
|
-
- Call the kintone REST API using the authenticated request tool
|
|
24478
|
-
- The base URL (e.g., https://example.cybozu.com) is automatically resolved
|
|
24479
|
-
- Authentication uses the kintone API token (scoped to specific apps)
|
|
24664
|
+
en: `### Tools
|
|
24480
24665
|
|
|
24481
|
-
|
|
24666
|
+
- \`kintone-api-key_request\`: The only way to call the kintone REST API. Use it to list apps, get field definitions, query records, and create/update records. Authentication (API Token) and base URL are configured automatically. API tokens are scoped per app \u2014 combine multiple tokens with commas to access multiple apps.
|
|
24667
|
+
|
|
24668
|
+
### kintone REST API Reference
|
|
24669
|
+
|
|
24670
|
+
#### List Apps
|
|
24482
24671
|
- GET apps.json
|
|
24483
24672
|
|
|
24484
24673
|
### Get Field Definitions
|
|
@@ -24488,20 +24677,17 @@ var kintoneApiTokenConnector = new ConnectorPlugin({
|
|
|
24488
24677
|
- GET records.json?app={appId}&query={query}
|
|
24489
24678
|
- Query example: records.json?app=1&query=updatedTime > "2024-01-01" order by recordNumber asc limit 100
|
|
24490
24679
|
|
|
24491
|
-
|
|
24680
|
+
#### Add Record
|
|
24492
24681
|
- POST record.json
|
|
24493
24682
|
- Body: { "app": 1, "record": { "fieldName": { "value": "value" } } }
|
|
24494
24683
|
|
|
24495
|
-
|
|
24684
|
+
#### kintone Query Syntax
|
|
24496
24685
|
- Comparison: fieldName = "value", fieldName > 100
|
|
24497
24686
|
- Operators: and, or, not
|
|
24498
24687
|
- Sort: order by fieldName asc/desc
|
|
24499
24688
|
- Limit: limit 100 offset 0
|
|
24500
24689
|
- String: like "partial match"
|
|
24501
24690
|
|
|
24502
|
-
### Tips
|
|
24503
|
-
- API tokens are scoped per app. If you need to access multiple apps, you can combine multiple tokens separated by commas.
|
|
24504
|
-
|
|
24505
24691
|
### Business Logic
|
|
24506
24692
|
|
|
24507
24693
|
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.
|
|
@@ -24522,12 +24708,13 @@ await kintone.request("/k/v1/record.json", {
|
|
|
24522
24708
|
body: JSON.stringify({ app: 1, record: { title: { value: "Hello" } } }),
|
|
24523
24709
|
});
|
|
24524
24710
|
\`\`\``,
|
|
24525
|
-
ja: `###
|
|
24526
|
-
- \u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u30C4\u30FC\u30EB\u3092\u4F7F\u7528\u3057\u3066kintone REST API\u3092\u547C\u3073\u51FA\u3057\u307E\u3059
|
|
24527
|
-
- \u30D9\u30FC\u30B9URL\uFF08\u4F8B: https://example.cybozu.com\uFF09\u306F\u81EA\u52D5\u7684\u306B\u89E3\u6C7A\u3055\u308C\u307E\u3059
|
|
24528
|
-
- \u8A8D\u8A3C\u306B\u306Fkintone API\u30C8\u30FC\u30AF\u30F3\uFF08\u7279\u5B9A\u306E\u30A2\u30D7\u30EA\u306B\u30B9\u30B3\u30FC\u30D7\u3055\u308C\u305F\u3082\u306E\uFF09\u3092\u4F7F\u7528\u3057\u307E\u3059
|
|
24711
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
24529
24712
|
|
|
24530
|
-
|
|
24713
|
+
- \`kintone-api-key_request\`: kintone REST API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30A2\u30D7\u30EA\u4E00\u89A7\u306E\u53D6\u5F97\u3001\u30D5\u30A3\u30FC\u30EB\u30C9\u5B9A\u7FA9\u306E\u53D6\u5F97\u3001\u30EC\u30B3\u30FC\u30C9\u306E\u691C\u7D22\u3001\u30EC\u30B3\u30FC\u30C9\u306E\u4F5C\u6210\u30FB\u66F4\u65B0\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08API\u30C8\u30FC\u30AF\u30F3\uFF09\u3068\u30D9\u30FC\u30B9URL\u306F\u81EA\u52D5\u7684\u306B\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002API\u30C8\u30FC\u30AF\u30F3\u306F\u30A2\u30D7\u30EA\u3054\u3068\u306B\u30B9\u30B3\u30FC\u30D7\u3055\u308C\u3066\u3044\u307E\u3059 \u2014 \u8907\u6570\u306E\u30A2\u30D7\u30EA\u306B\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u5834\u5408\u306F\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3067\u30C8\u30FC\u30AF\u30F3\u3092\u7D44\u307F\u5408\u308F\u305B\u3066\u304F\u3060\u3055\u3044\u3002
|
|
24714
|
+
|
|
24715
|
+
### kintone REST API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
24716
|
+
|
|
24717
|
+
#### \u30A2\u30D7\u30EA\u4E00\u89A7\u306E\u53D6\u5F97
|
|
24531
24718
|
- GET apps.json
|
|
24532
24719
|
|
|
24533
24720
|
### \u30D5\u30A3\u30FC\u30EB\u30C9\u5B9A\u7FA9\u306E\u53D6\u5F97
|
|
@@ -24537,20 +24724,17 @@ await kintone.request("/k/v1/record.json", {
|
|
|
24537
24724
|
- GET records.json?app={appId}&query={query}
|
|
24538
24725
|
- \u30AF\u30A8\u30EA\u4F8B: records.json?app=1&query=updatedTime > "2024-01-01" order by recordNumber asc limit 100
|
|
24539
24726
|
|
|
24540
|
-
|
|
24727
|
+
#### \u30EC\u30B3\u30FC\u30C9\u306E\u8FFD\u52A0
|
|
24541
24728
|
- POST record.json
|
|
24542
24729
|
- Body: { "app": 1, "record": { "fieldName": { "value": "value" } } }
|
|
24543
24730
|
|
|
24544
|
-
|
|
24731
|
+
#### kintone \u30AF\u30A8\u30EA\u69CB\u6587
|
|
24545
24732
|
- \u6BD4\u8F03: fieldName = "value", fieldName > 100
|
|
24546
24733
|
- \u6F14\u7B97\u5B50: and, or, not
|
|
24547
24734
|
- \u30BD\u30FC\u30C8: order by fieldName asc/desc
|
|
24548
24735
|
- \u5236\u9650: limit 100 offset 0
|
|
24549
24736
|
- \u6587\u5B57\u5217: like "\u90E8\u5206\u4E00\u81F4"
|
|
24550
24737
|
|
|
24551
|
-
### \u30D2\u30F3\u30C8
|
|
24552
|
-
- API\u30C8\u30FC\u30AF\u30F3\u306F\u30A2\u30D7\u30EA\u3054\u3068\u306B\u30B9\u30B3\u30FC\u30D7\u3055\u308C\u3066\u3044\u307E\u3059\u3002\u8907\u6570\u306E\u30A2\u30D7\u30EA\u306B\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\u5834\u5408\u306F\u3001\u30AB\u30F3\u30DE\u533A\u5207\u308A\u3067\u8907\u6570\u306E\u30C8\u30FC\u30AF\u30F3\u3092\u7D44\u307F\u5408\u308F\u305B\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002
|
|
24553
|
-
|
|
24554
24738
|
### Business Logic
|
|
24555
24739
|
|
|
24556
24740
|
\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
|
|
@@ -24700,118 +24884,154 @@ var wixStoreConnector = new ConnectorPlugin({
|
|
|
24700
24884
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
24701
24885
|
onboarding: wixStoreOnboarding,
|
|
24702
24886
|
systemPrompt: {
|
|
24703
|
-
en: `###
|
|
24704
|
-
- Call the Wix Store REST API using the authenticated request tool
|
|
24705
|
-
- Authentication (API Key, Site ID) is automatically configured
|
|
24706
|
-
- Wix API uses POST for query endpoints as well
|
|
24707
|
-
- Wix uses WQL (Wix Query Language) for filters
|
|
24708
|
-
- Max 100 items per page
|
|
24709
|
-
|
|
24710
|
-
### List Products
|
|
24711
|
-
- POST stores/v1/products/query
|
|
24712
|
-
- Body: { "query": { "paging": { "limit": 50, "offset": 0 } } }
|
|
24887
|
+
en: `### Tools
|
|
24713
24888
|
|
|
24714
|
-
|
|
24715
|
-
- POST stores/v1/products/query
|
|
24716
|
-
- Body: { "query": { "filter": { "name": { "$contains": "keyword" } }, "paging": { "limit": 50 } } }
|
|
24717
|
-
|
|
24718
|
-
### Search Orders (eCommerce Orders V1)
|
|
24719
|
-
- POST ecom/v1/orders/search
|
|
24720
|
-
- Body: { "search": { "cursorPaging": { "limit": 50 } } }
|
|
24721
|
-
- Uses cursor-based pagination (cursorPaging, not paging)
|
|
24722
|
-
- Response includes pagingMetadata.cursors.next for pagination
|
|
24723
|
-
|
|
24724
|
-
### List Collections (Categories)
|
|
24725
|
-
- POST stores/v1/collections/query
|
|
24726
|
-
- Body: { "query": { "paging": { "limit": 50 } } }
|
|
24727
|
-
|
|
24728
|
-
### List Inventory Items
|
|
24729
|
-
- POST stores/v2/inventoryItems/query
|
|
24730
|
-
- Body: { "query": { "paging": { "limit": 50 } } }
|
|
24889
|
+
- \`wix-store_request\`: The only way to call the Wix Store REST API. Use it to query products, orders, collections, and inventory. Authentication (API Key, Site ID) is configured automatically. Note that Wix uses POST even for query endpoints, and filters are written in WQL (Wix Query Language). See the Wix Store API Reference below for endpoints and request bodies.
|
|
24731
24890
|
|
|
24732
24891
|
### Business Logic
|
|
24733
24892
|
|
|
24734
|
-
The business logic type for this connector is "typescript".
|
|
24893
|
+
The business logic type for this connector is "typescript". Use the connector SDK in your handler. Do NOT read credentials from environment variables.
|
|
24735
24894
|
|
|
24736
|
-
|
|
24895
|
+
SDK methods (client created via \`connection(connectionId)\`):
|
|
24896
|
+
- \`client.request(path, init?)\` \u2014 low-level authenticated fetch
|
|
24897
|
+
- \`client.queryProducts(options?)\` \u2014 query products with WQL filter/paging
|
|
24898
|
+
- \`client.getProduct(productId)\` \u2014 fetch a single product
|
|
24899
|
+
- \`client.queryOrders(options?)\` \u2014 query orders (uses cursorPaging)
|
|
24900
|
+
- \`client.getOrder(orderId)\` \u2014 fetch a single order
|
|
24901
|
+
- \`client.queryCollections(options?)\` \u2014 query collections (categories)
|
|
24902
|
+
- \`client.queryInventory(options?)\` \u2014 query inventory items
|
|
24737
24903
|
|
|
24738
24904
|
\`\`\`ts
|
|
24905
|
+
import type { Context } from "hono";
|
|
24739
24906
|
import { connection } from "@squadbase/vite-server/connectors/wix-store";
|
|
24740
24907
|
|
|
24741
24908
|
const wix = connection("<connectionId>");
|
|
24742
24909
|
|
|
24743
|
-
|
|
24744
|
-
const
|
|
24745
|
-
|
|
24746
|
-
|
|
24747
|
-
|
|
24748
|
-
});
|
|
24749
|
-
const data = await res.json();
|
|
24910
|
+
export default async function handler(c: Context) {
|
|
24911
|
+
const { keyword, limit = 50 } = await c.req.json<{
|
|
24912
|
+
keyword?: string;
|
|
24913
|
+
limit?: number;
|
|
24914
|
+
}>();
|
|
24750
24915
|
|
|
24751
|
-
|
|
24752
|
-
|
|
24753
|
-
|
|
24754
|
-
|
|
24755
|
-
|
|
24756
|
-
|
|
24757
|
-
|
|
24758
|
-
|
|
24759
|
-
|
|
24760
|
-
|
|
24761
|
-
|
|
24762
|
-
|
|
24763
|
-
|
|
24764
|
-
|
|
24916
|
+
const { products, totalResults } = await wix.queryProducts({
|
|
24917
|
+
filter: keyword ? { name: { $contains: keyword } } : undefined,
|
|
24918
|
+
paging: { limit, offset: 0 },
|
|
24919
|
+
});
|
|
24920
|
+
|
|
24921
|
+
return c.json({
|
|
24922
|
+
totalResults,
|
|
24923
|
+
products: products.map((p) => ({
|
|
24924
|
+
id: p.id,
|
|
24925
|
+
name: p.name,
|
|
24926
|
+
price: p.price?.price,
|
|
24927
|
+
currency: p.price?.currency,
|
|
24928
|
+
stock: p.stock?.quantity,
|
|
24929
|
+
})),
|
|
24930
|
+
});
|
|
24931
|
+
}
|
|
24932
|
+
\`\`\`
|
|
24933
|
+
|
|
24934
|
+
### Wix Store API Reference
|
|
24765
24935
|
|
|
24766
|
-
|
|
24767
|
-
-
|
|
24768
|
-
-
|
|
24936
|
+
- Wix API uses POST for query endpoints as well
|
|
24937
|
+
- Wix uses WQL (Wix Query Language) for filters
|
|
24938
|
+
- Max 100 items per page
|
|
24939
|
+
|
|
24940
|
+
#### List Products
|
|
24941
|
+
- \`POST stores/v1/products/query\`
|
|
24942
|
+
- Body: \`{ "query": { "paging": { "limit": 50, "offset": 0 } } }\`
|
|
24769
24943
|
|
|
24770
|
-
|
|
24771
|
-
- POST stores/v1/products/query
|
|
24772
|
-
- Body: { "query": { "filter": { "name": { "$contains": "keyword" } }, "paging": { "limit": 50 } } }
|
|
24944
|
+
#### Search Products (with filter)
|
|
24945
|
+
- \`POST stores/v1/products/query\`
|
|
24946
|
+
- Body: \`{ "query": { "filter": { "name": { "$contains": "keyword" } }, "paging": { "limit": 50 } } }\`
|
|
24773
24947
|
|
|
24774
|
-
|
|
24775
|
-
- POST ecom/v1/orders/search
|
|
24776
|
-
- Body: { "search": { "cursorPaging": { "limit": 50 } } }
|
|
24777
|
-
-
|
|
24778
|
-
-
|
|
24948
|
+
#### Search Orders (eCommerce Orders V1)
|
|
24949
|
+
- \`POST ecom/v1/orders/search\`
|
|
24950
|
+
- Body: \`{ "search": { "cursorPaging": { "limit": 50 } } }\`
|
|
24951
|
+
- Uses cursor-based pagination (\`cursorPaging\`, not \`paging\`)
|
|
24952
|
+
- Response includes \`pagingMetadata.cursors.next\` for pagination
|
|
24779
24953
|
|
|
24780
|
-
|
|
24781
|
-
- POST stores/v1/collections/query
|
|
24782
|
-
- Body: { "query": { "paging": { "limit": 50 } } }
|
|
24954
|
+
#### List Collections (Categories)
|
|
24955
|
+
- \`POST stores/v1/collections/query\`
|
|
24956
|
+
- Body: \`{ "query": { "paging": { "limit": 50 } } }\`
|
|
24783
24957
|
|
|
24784
|
-
|
|
24785
|
-
- POST stores/v2/inventoryItems/query
|
|
24786
|
-
- Body: { "query": { "paging": { "limit": 50 } } }
|
|
24958
|
+
#### List Inventory Items
|
|
24959
|
+
- \`POST stores/v2/inventoryItems/query\`
|
|
24960
|
+
- Body: \`{ "query": { "paging": { "limit": 50 } } }\``,
|
|
24961
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
24962
|
+
|
|
24963
|
+
- \`wix-store_request\`: Wix Store REST API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u5546\u54C1\u3001\u6CE8\u6587\u3001\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3001\u5728\u5EAB\u306E\u30AF\u30A8\u30EA\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08API Key\u3001Site ID\uFF09\u306F\u81EA\u52D5\u7684\u306B\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002Wix\u306F\u30AF\u30A8\u30EA\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3067\u3082 POST \u3092\u4F7F\u7528\u3057\u3001\u30D5\u30A3\u30EB\u30BF\u306F WQL (Wix Query Language) \u3067\u8A18\u8FF0\u3059\u308B\u3053\u3068\u306B\u6CE8\u610F\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u5229\u7528\u53EF\u80FD\u306A\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3068\u30EA\u30AF\u30A8\u30B9\u30C8\u30DC\u30C7\u30A3\u306F\u4E0B\u90E8\u306E\u300CWix Store API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u300D\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
24787
24964
|
|
|
24788
24965
|
### Business Logic
|
|
24789
24966
|
|
|
24790
|
-
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\
|
|
24967
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u30B3\u30CD\u30AF\u30BFSDK\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u8A8D\u8A3C\u60C5\u5831\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
24791
24968
|
|
|
24792
|
-
|
|
24969
|
+
SDK\u30E1\u30BD\u30C3\u30C9 (\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8):
|
|
24970
|
+
- \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304Dfetch
|
|
24971
|
+
- \`client.queryProducts(options?)\` \u2014 WQL\u30D5\u30A3\u30EB\u30BF/\u30DA\u30FC\u30B8\u30F3\u30B0\u4ED8\u304D\u3067\u5546\u54C1\u3092\u30AF\u30A8\u30EA
|
|
24972
|
+
- \`client.getProduct(productId)\` \u2014 \u5358\u4E00\u5546\u54C1\u3092\u53D6\u5F97
|
|
24973
|
+
- \`client.queryOrders(options?)\` \u2014 \u6CE8\u6587\u3092\u30AF\u30A8\u30EA (cursorPaging \u3092\u4F7F\u7528)
|
|
24974
|
+
- \`client.getOrder(orderId)\` \u2014 \u5358\u4E00\u6CE8\u6587\u3092\u53D6\u5F97
|
|
24975
|
+
- \`client.queryCollections(options?)\` \u2014 \u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\uFF08\u30AB\u30C6\u30B4\u30EA\uFF09\u3092\u30AF\u30A8\u30EA
|
|
24976
|
+
- \`client.queryInventory(options?)\` \u2014 \u5728\u5EAB\u30A2\u30A4\u30C6\u30E0\u3092\u30AF\u30A8\u30EA
|
|
24793
24977
|
|
|
24794
24978
|
\`\`\`ts
|
|
24979
|
+
import type { Context } from "hono";
|
|
24795
24980
|
import { connection } from "@squadbase/vite-server/connectors/wix-store";
|
|
24796
24981
|
|
|
24797
24982
|
const wix = connection("<connectionId>");
|
|
24798
24983
|
|
|
24799
|
-
|
|
24800
|
-
const
|
|
24801
|
-
|
|
24802
|
-
|
|
24803
|
-
|
|
24804
|
-
});
|
|
24805
|
-
const data = await res.json();
|
|
24984
|
+
export default async function handler(c: Context) {
|
|
24985
|
+
const { keyword, limit = 50 } = await c.req.json<{
|
|
24986
|
+
keyword?: string;
|
|
24987
|
+
limit?: number;
|
|
24988
|
+
}>();
|
|
24806
24989
|
|
|
24807
|
-
|
|
24808
|
-
|
|
24809
|
-
|
|
24810
|
-
|
|
24811
|
-
|
|
24812
|
-
|
|
24813
|
-
|
|
24814
|
-
|
|
24990
|
+
const { products, totalResults } = await wix.queryProducts({
|
|
24991
|
+
filter: keyword ? { name: { $contains: keyword } } : undefined,
|
|
24992
|
+
paging: { limit, offset: 0 },
|
|
24993
|
+
});
|
|
24994
|
+
|
|
24995
|
+
return c.json({
|
|
24996
|
+
totalResults,
|
|
24997
|
+
products: products.map((p) => ({
|
|
24998
|
+
id: p.id,
|
|
24999
|
+
name: p.name,
|
|
25000
|
+
price: p.price?.price,
|
|
25001
|
+
currency: p.price?.currency,
|
|
25002
|
+
stock: p.stock?.quantity,
|
|
25003
|
+
})),
|
|
25004
|
+
});
|
|
25005
|
+
}
|
|
25006
|
+
\`\`\`
|
|
25007
|
+
|
|
25008
|
+
### Wix Store API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
25009
|
+
|
|
25010
|
+
- Wix API\u306F\u30AF\u30A8\u30EA\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3067\u3082POST\u3092\u4F7F\u7528\u3057\u307E\u3059
|
|
25011
|
+
- Wix\u306F\u30D5\u30A3\u30EB\u30BF\u306B WQL (Wix Query Language) \u3092\u4F7F\u7528\u3057\u307E\u3059
|
|
25012
|
+
- \u30DA\u30FC\u30B8\u3042\u305F\u308A\u6700\u5927100\u30A2\u30A4\u30C6\u30E0
|
|
25013
|
+
|
|
25014
|
+
#### \u5546\u54C1\u4E00\u89A7\u306E\u53D6\u5F97
|
|
25015
|
+
- \`POST stores/v1/products/query\`
|
|
25016
|
+
- Body: \`{ "query": { "paging": { "limit": 50, "offset": 0 } } }\`
|
|
25017
|
+
|
|
25018
|
+
#### \u5546\u54C1\u306E\u691C\u7D22\uFF08\u30D5\u30A3\u30EB\u30BF\u4ED8\u304D\uFF09
|
|
25019
|
+
- \`POST stores/v1/products/query\`
|
|
25020
|
+
- Body: \`{ "query": { "filter": { "name": { "$contains": "keyword" } }, "paging": { "limit": 50 } } }\`
|
|
25021
|
+
|
|
25022
|
+
#### \u6CE8\u6587\u306E\u691C\u7D22 (eCommerce Orders V1)
|
|
25023
|
+
- \`POST ecom/v1/orders/search\`
|
|
25024
|
+
- Body: \`{ "search": { "cursorPaging": { "limit": 50 } } }\`
|
|
25025
|
+
- \u30AB\u30FC\u30BD\u30EB\u30D9\u30FC\u30B9\u306E\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\uFF08\`paging\` \u3067\u306F\u306A\u304F \`cursorPaging\`\uFF09\u3092\u4F7F\u7528\u3057\u307E\u3059
|
|
25026
|
+
- \u30EC\u30B9\u30DD\u30F3\u30B9\u306B\u306F\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u7528\u306E \`pagingMetadata.cursors.next\` \u304C\u542B\u307E\u308C\u307E\u3059
|
|
25027
|
+
|
|
25028
|
+
#### \u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u4E00\u89A7\u306E\u53D6\u5F97\uFF08\u30AB\u30C6\u30B4\u30EA\uFF09
|
|
25029
|
+
- \`POST stores/v1/collections/query\`
|
|
25030
|
+
- Body: \`{ "query": { "paging": { "limit": 50 } } }\`
|
|
25031
|
+
|
|
25032
|
+
#### \u5728\u5EAB\u30A2\u30A4\u30C6\u30E0\u4E00\u89A7\u306E\u53D6\u5F97
|
|
25033
|
+
- \`POST stores/v2/inventoryItems/query\`
|
|
25034
|
+
- Body: \`{ "query": { "paging": { "limit": 50 } } }\``
|
|
24815
25035
|
},
|
|
24816
25036
|
tools: tools20
|
|
24817
25037
|
});
|
|
@@ -24929,17 +25149,17 @@ Authentication is handled automatically using the API token.
|
|
|
24929
25149
|
signal: controller.signal
|
|
24930
25150
|
});
|
|
24931
25151
|
const data = await response.json();
|
|
24932
|
-
if (
|
|
25152
|
+
if (Array.isArray(data?.errors) && data.errors.length > 0) {
|
|
25153
|
+
const errors = data.errors;
|
|
24933
25154
|
return {
|
|
24934
25155
|
success: false,
|
|
24935
|
-
error:
|
|
25156
|
+
error: errors.map((e2) => e2.message).join("; ")
|
|
24936
25157
|
};
|
|
24937
25158
|
}
|
|
24938
|
-
if (
|
|
24939
|
-
const errors = data.errors;
|
|
25159
|
+
if (!response.ok) {
|
|
24940
25160
|
return {
|
|
24941
25161
|
success: false,
|
|
24942
|
-
error:
|
|
25162
|
+
error: data?.message ?? `HTTP ${response.status} ${response.statusText}`
|
|
24943
25163
|
};
|
|
24944
25164
|
}
|
|
24945
25165
|
return { success: true, data };
|
|
@@ -24965,11 +25185,59 @@ var dbtConnector = new ConnectorPlugin({
|
|
|
24965
25185
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
24966
25186
|
onboarding: dbtOnboarding,
|
|
24967
25187
|
systemPrompt: {
|
|
24968
|
-
en: `###
|
|
24969
|
-
|
|
24970
|
-
- {environmentId} in GraphQL variables is automatically replaced with the prod-env-id
|
|
25188
|
+
en: `### Tools
|
|
25189
|
+
|
|
25190
|
+
- \`dbt_request\`: The only way to call the dbt Cloud Discovery API (GraphQL). Use it to explore models, sources, tests, metrics, columns, and lineage. The \`{environmentId}\` placeholder in GraphQL variables is automatically replaced with the prod-env-id. See the dbt Cloud Discovery API Reference below for available GraphQL queries.
|
|
25191
|
+
|
|
25192
|
+
### Business Logic
|
|
25193
|
+
|
|
25194
|
+
The business logic type for this connector is "typescript". Use the connector SDK in your handler. Do NOT read credentials from environment variables.
|
|
25195
|
+
|
|
25196
|
+
SDK methods (client created via \`connection(connectionId)\`):
|
|
25197
|
+
- \`client.request(path, init?)\` \u2014 low-level authenticated fetch
|
|
25198
|
+
- \`client.query(graphqlQuery, variables?)\` \u2014 run an arbitrary GraphQL query
|
|
25199
|
+
- \`client.getModels(options?)\` \u2014 list models with metadata
|
|
25200
|
+
- \`client.getModelByUniqueId(uniqueId)\` \u2014 fetch a single model (including catalog columns)
|
|
25201
|
+
- \`client.getSources(options?)\` \u2014 list sources
|
|
25202
|
+
- \`client.getTests(options?)\` \u2014 list tests
|
|
25203
|
+
- \`client.getMetrics(options?)\` \u2014 list metrics
|
|
25204
|
+
|
|
25205
|
+
\`\`\`ts
|
|
25206
|
+
import type { Context } from "hono";
|
|
25207
|
+
import { connection } from "@squadbase/vite-server/connectors/dbt";
|
|
25208
|
+
|
|
25209
|
+
const dbt = connection("<connectionId>");
|
|
25210
|
+
|
|
25211
|
+
export default async function handler(c: Context) {
|
|
25212
|
+
const { uniqueId } = await c.req.json<{ uniqueId?: string }>();
|
|
25213
|
+
|
|
25214
|
+
if (uniqueId) {
|
|
25215
|
+
const model = await dbt.getModelByUniqueId(uniqueId);
|
|
25216
|
+
return c.json({
|
|
25217
|
+
uniqueId: model.uniqueId,
|
|
25218
|
+
name: model.name,
|
|
25219
|
+
description: model.description,
|
|
25220
|
+
database: model.database,
|
|
25221
|
+
schema: model.schema,
|
|
25222
|
+
columns: model.catalog?.columns ?? [],
|
|
25223
|
+
});
|
|
25224
|
+
}
|
|
25225
|
+
|
|
25226
|
+
const models = await dbt.getModels({ limit: 100 });
|
|
25227
|
+
return c.json(
|
|
25228
|
+
models.map((m) => ({
|
|
25229
|
+
uniqueId: m.uniqueId,
|
|
25230
|
+
name: m.name,
|
|
25231
|
+
description: m.description,
|
|
25232
|
+
materializedType: m.materializedType,
|
|
25233
|
+
})),
|
|
25234
|
+
);
|
|
25235
|
+
}
|
|
25236
|
+
\`\`\`
|
|
25237
|
+
|
|
25238
|
+
### dbt Cloud Discovery API Reference
|
|
24971
25239
|
|
|
24972
|
-
|
|
25240
|
+
#### List Models
|
|
24973
25241
|
\`\`\`graphql
|
|
24974
25242
|
query($environmentId: BigInt!) {
|
|
24975
25243
|
environment(id: $environmentId) {
|
|
@@ -24985,7 +25253,7 @@ query($environmentId: BigInt!) {
|
|
|
24985
25253
|
\`\`\`
|
|
24986
25254
|
variables: \`{ "environmentId": "{environmentId}" }\`
|
|
24987
25255
|
|
|
24988
|
-
|
|
25256
|
+
#### List Sources
|
|
24989
25257
|
\`\`\`graphql
|
|
24990
25258
|
query($environmentId: BigInt!) {
|
|
24991
25259
|
environment(id: $environmentId) {
|
|
@@ -25001,14 +25269,21 @@ query($environmentId: BigInt!) {
|
|
|
25001
25269
|
\`\`\`
|
|
25002
25270
|
variables: \`{ "environmentId": "{environmentId}" }\`
|
|
25003
25271
|
|
|
25004
|
-
|
|
25272
|
+
#### Model Column Information
|
|
25273
|
+
Column metadata is available under \`applied.models[].catalog.columns\`. Use the \`uniqueIds\` filter (not \`uniqueId\`) to fetch one or more models.
|
|
25005
25274
|
\`\`\`graphql
|
|
25006
|
-
query($environmentId: BigInt!, $
|
|
25275
|
+
query($environmentId: BigInt!, $uniqueIds: [String!]!) {
|
|
25007
25276
|
environment(id: $environmentId) {
|
|
25008
25277
|
applied {
|
|
25009
|
-
models(
|
|
25278
|
+
models(first: 100, filter: { uniqueIds: $uniqueIds }) {
|
|
25010
25279
|
edges {
|
|
25011
|
-
node {
|
|
25280
|
+
node {
|
|
25281
|
+
uniqueId
|
|
25282
|
+
name
|
|
25283
|
+
catalog {
|
|
25284
|
+
columns { name description type }
|
|
25285
|
+
}
|
|
25286
|
+
}
|
|
25012
25287
|
}
|
|
25013
25288
|
}
|
|
25014
25289
|
}
|
|
@@ -25016,46 +25291,62 @@ query($environmentId: BigInt!, $uniqueId: String!) {
|
|
|
25016
25291
|
}
|
|
25017
25292
|
\`\`\`
|
|
25018
25293
|
|
|
25019
|
-
|
|
25020
|
-
- Traverse relationships using ancestors / children fields
|
|
25021
|
-
- Get ancestors { uniqueId name } or children { uniqueId name } within node
|
|
25294
|
+
#### Lineage (Dependencies)
|
|
25295
|
+
- Traverse relationships using \`ancestors\` / \`children\` fields
|
|
25296
|
+
- Get \`ancestors { uniqueId name }\` or \`children { uniqueId name }\` within node`,
|
|
25297
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
25298
|
+
|
|
25299
|
+
- \`dbt_request\`: dbt Cloud Discovery API (GraphQL) \u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30E2\u30C7\u30EB\u3001\u30BD\u30FC\u30B9\u3001\u30C6\u30B9\u30C8\u3001\u30E1\u30C8\u30EA\u30AF\u30B9\u3001\u30AB\u30E9\u30E0\u3001\u30EA\u30CD\u30FC\u30B8\u306E\u63A2\u7D22\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002GraphQL\u5909\u6570\u5185\u306E \`{environmentId}\` \u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u306Fprod-env-id\u3067\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059\u3002\u5229\u7528\u53EF\u80FD\u306AGraphQL\u30AF\u30A8\u30EA\u306F\u4E0B\u90E8\u306E\u300Cdbt Cloud Discovery API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u300D\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
25022
25300
|
|
|
25023
25301
|
### Business Logic
|
|
25024
25302
|
|
|
25025
|
-
|
|
25303
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u30B3\u30CD\u30AF\u30BFSDK\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u8A8D\u8A3C\u60C5\u5831\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
25026
25304
|
|
|
25027
|
-
|
|
25305
|
+
SDK\u30E1\u30BD\u30C3\u30C9 (\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8):
|
|
25306
|
+
- \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304Dfetch
|
|
25307
|
+
- \`client.query(graphqlQuery, variables?)\` \u2014 \u4EFB\u610F\u306EGraphQL\u30AF\u30A8\u30EA\u3092\u5B9F\u884C
|
|
25308
|
+
- \`client.getModels(options?)\` \u2014 \u30E2\u30C7\u30EB\u4E00\u89A7\u3092\u30E1\u30BF\u30C7\u30FC\u30BF\u4ED8\u304D\u3067\u53D6\u5F97
|
|
25309
|
+
- \`client.getModelByUniqueId(uniqueId)\` \u2014 \u5358\u4E00\u30E2\u30C7\u30EB\u3092\u53D6\u5F97\uFF08catalog columns\u3092\u542B\u3080\uFF09
|
|
25310
|
+
- \`client.getSources(options?)\` \u2014 \u30BD\u30FC\u30B9\u4E00\u89A7\u3092\u53D6\u5F97
|
|
25311
|
+
- \`client.getTests(options?)\` \u2014 \u30C6\u30B9\u30C8\u4E00\u89A7\u3092\u53D6\u5F97
|
|
25312
|
+
- \`client.getMetrics(options?)\` \u2014 \u30E1\u30C8\u30EA\u30AF\u30B9\u4E00\u89A7\u3092\u53D6\u5F97
|
|
25028
25313
|
|
|
25029
25314
|
\`\`\`ts
|
|
25315
|
+
import type { Context } from "hono";
|
|
25030
25316
|
import { connection } from "@squadbase/vite-server/connectors/dbt";
|
|
25031
25317
|
|
|
25032
25318
|
const dbt = connection("<connectionId>");
|
|
25033
25319
|
|
|
25034
|
-
|
|
25035
|
-
const
|
|
25036
|
-
|
|
25037
|
-
|
|
25038
|
-
|
|
25039
|
-
|
|
25040
|
-
|
|
25320
|
+
export default async function handler(c: Context) {
|
|
25321
|
+
const { uniqueId } = await c.req.json<{ uniqueId?: string }>();
|
|
25322
|
+
|
|
25323
|
+
if (uniqueId) {
|
|
25324
|
+
const model = await dbt.getModelByUniqueId(uniqueId);
|
|
25325
|
+
return c.json({
|
|
25326
|
+
uniqueId: model.uniqueId,
|
|
25327
|
+
name: model.name,
|
|
25328
|
+
description: model.description,
|
|
25329
|
+
database: model.database,
|
|
25330
|
+
schema: model.schema,
|
|
25331
|
+
columns: model.catalog?.columns ?? [],
|
|
25332
|
+
});
|
|
25333
|
+
}
|
|
25041
25334
|
|
|
25042
|
-
|
|
25043
|
-
|
|
25044
|
-
|
|
25045
|
-
|
|
25046
|
-
|
|
25047
|
-
|
|
25048
|
-
|
|
25049
|
-
|
|
25050
|
-
|
|
25051
|
-
|
|
25052
|
-
|
|
25053
|
-
\`\`\``,
|
|
25054
|
-
ja: `### dbt Cloud Discovery API (GraphQL)
|
|
25055
|
-
- \u8A8D\u8A3C\u6E08\u307F\u30EA\u30AF\u30A8\u30B9\u30C8\u30C4\u30FC\u30EB\u3092\u4F7F\u7528\u3057\u3066dbt Cloud Discovery API\u3092\u547C\u3073\u51FA\u3057\u307E\u3059
|
|
25056
|
-
- GraphQL\u5909\u6570\u5185\u306E {environmentId} \u306Fprod-env-id\u3067\u81EA\u52D5\u7684\u306B\u7F6E\u63DB\u3055\u308C\u307E\u3059
|
|
25335
|
+
const models = await dbt.getModels({ limit: 100 });
|
|
25336
|
+
return c.json(
|
|
25337
|
+
models.map((m) => ({
|
|
25338
|
+
uniqueId: m.uniqueId,
|
|
25339
|
+
name: m.name,
|
|
25340
|
+
description: m.description,
|
|
25341
|
+
materializedType: m.materializedType,
|
|
25342
|
+
})),
|
|
25343
|
+
);
|
|
25344
|
+
}
|
|
25345
|
+
\`\`\`
|
|
25057
25346
|
|
|
25058
|
-
### \
|
|
25347
|
+
### dbt Cloud Discovery API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
25348
|
+
|
|
25349
|
+
#### \u30E2\u30C7\u30EB\u4E00\u89A7\u306E\u53D6\u5F97
|
|
25059
25350
|
\`\`\`graphql
|
|
25060
25351
|
query($environmentId: BigInt!) {
|
|
25061
25352
|
environment(id: $environmentId) {
|
|
@@ -25071,7 +25362,7 @@ query($environmentId: BigInt!) {
|
|
|
25071
25362
|
\`\`\`
|
|
25072
25363
|
variables: \`{ "environmentId": "{environmentId}" }\`
|
|
25073
25364
|
|
|
25074
|
-
|
|
25365
|
+
#### \u30BD\u30FC\u30B9\u4E00\u89A7\u306E\u53D6\u5F97
|
|
25075
25366
|
\`\`\`graphql
|
|
25076
25367
|
query($environmentId: BigInt!) {
|
|
25077
25368
|
environment(id: $environmentId) {
|
|
@@ -25087,14 +25378,21 @@ query($environmentId: BigInt!) {
|
|
|
25087
25378
|
\`\`\`
|
|
25088
25379
|
variables: \`{ "environmentId": "{environmentId}" }\`
|
|
25089
25380
|
|
|
25090
|
-
|
|
25381
|
+
#### \u30E2\u30C7\u30EB\u306E\u30AB\u30E9\u30E0\u60C5\u5831
|
|
25382
|
+
\u30AB\u30E9\u30E0\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u306F \`applied.models[].catalog.columns\` \u304B\u3089\u53D6\u5F97\u3057\u307E\u3059\u3002\u30D5\u30A3\u30EB\u30BF\u306B\u306F \`uniqueId\` \u3067\u306F\u306A\u304F \`uniqueIds\` \u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\uFF08\u8907\u6570\u30E2\u30C7\u30EB\u4E00\u62EC\u53D6\u5F97\u53EF\u80FD\uFF09\u3002
|
|
25091
25383
|
\`\`\`graphql
|
|
25092
|
-
query($environmentId: BigInt!, $
|
|
25384
|
+
query($environmentId: BigInt!, $uniqueIds: [String!]!) {
|
|
25093
25385
|
environment(id: $environmentId) {
|
|
25094
25386
|
applied {
|
|
25095
|
-
models(
|
|
25387
|
+
models(first: 100, filter: { uniqueIds: $uniqueIds }) {
|
|
25096
25388
|
edges {
|
|
25097
|
-
node {
|
|
25389
|
+
node {
|
|
25390
|
+
uniqueId
|
|
25391
|
+
name
|
|
25392
|
+
catalog {
|
|
25393
|
+
columns { name description type }
|
|
25394
|
+
}
|
|
25395
|
+
}
|
|
25098
25396
|
}
|
|
25099
25397
|
}
|
|
25100
25398
|
}
|
|
@@ -25102,41 +25400,9 @@ query($environmentId: BigInt!, $uniqueId: String!) {
|
|
|
25102
25400
|
}
|
|
25103
25401
|
\`\`\`
|
|
25104
25402
|
|
|
25105
|
-
|
|
25106
|
-
- ancestors / children \u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u4F7F\u7528\u3057\u3066\u95A2\u4FC2\u3092\u30C8\u30E9\u30D0\u30FC\u30B9\u3057\u307E\u3059
|
|
25107
|
-
- node\u5185\u3067 ancestors { uniqueId name } \u307E\u305F\u306F children { uniqueId name } \u3092\u53D6\u5F97\u3057\u307E\u3059
|
|
25108
|
-
|
|
25109
|
-
### Business Logic
|
|
25110
|
-
|
|
25111
|
-
\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
|
|
25112
|
-
|
|
25113
|
-
#### Example
|
|
25114
|
-
|
|
25115
|
-
\`\`\`ts
|
|
25116
|
-
import { connection } from "@squadbase/vite-server/connectors/dbt";
|
|
25117
|
-
|
|
25118
|
-
const dbt = connection("<connectionId>");
|
|
25119
|
-
|
|
25120
|
-
// Authenticated fetch (returns standard Response)
|
|
25121
|
-
const res = await dbt.request("/graphql", {
|
|
25122
|
-
method: "POST",
|
|
25123
|
-
headers: { "Content-Type": "application/json" },
|
|
25124
|
-
body: JSON.stringify({ query: "{ ... }", variables: {} }),
|
|
25125
|
-
});
|
|
25126
|
-
const data = await res.json();
|
|
25127
|
-
|
|
25128
|
-
// Convenience methods
|
|
25129
|
-
const result = await dbt.query(\`
|
|
25130
|
-
query($environmentId: BigInt!) {
|
|
25131
|
-
environment(id: $environmentId) { applied { models(first: 10) { edges { node { name } } } } }
|
|
25132
|
-
}
|
|
25133
|
-
\`);
|
|
25134
|
-
const models = await dbt.getModels({ limit: 100 });
|
|
25135
|
-
const model = await dbt.getModelByUniqueId("model.project.my_model");
|
|
25136
|
-
const sources = await dbt.getSources({ limit: 100 });
|
|
25137
|
-
const tests = await dbt.getTests({ limit: 100 });
|
|
25138
|
-
const metrics = await dbt.getMetrics({ limit: 100 });
|
|
25139
|
-
\`\`\``
|
|
25403
|
+
#### \u30EA\u30CD\u30FC\u30B8\uFF08\u4F9D\u5B58\u95A2\u4FC2\uFF09
|
|
25404
|
+
- \`ancestors\` / \`children\` \u30D5\u30A3\u30FC\u30EB\u30C9\u3092\u4F7F\u7528\u3057\u3066\u95A2\u4FC2\u3092\u30C8\u30E9\u30D0\u30FC\u30B9\u3057\u307E\u3059
|
|
25405
|
+
- node\u5185\u3067 \`ancestors { uniqueId name }\` \u307E\u305F\u306F \`children { uniqueId name }\` \u3092\u53D6\u5F97\u3057\u307E\u3059`
|
|
25140
25406
|
},
|
|
25141
25407
|
tools: tools21
|
|
25142
25408
|
});
|
|
@@ -25253,26 +25519,34 @@ var squadbaseDbConnector = new ConnectorPlugin({
|
|
|
25253
25519
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
25254
25520
|
onboarding: squadbaseDbOnboarding,
|
|
25255
25521
|
systemPrompt: {
|
|
25256
|
-
en: `###
|
|
25522
|
+
en: `### Tools
|
|
25523
|
+
|
|
25524
|
+
- \`squadbase-db_executeQuery\`: Executes a Squadbase DB (PostgreSQL-based) SQL query and returns rows. Use this for schema exploration via \`information_schema.tables\`/\`columns\` and for sampling data. See the SQL Reference below for syntax notes.
|
|
25525
|
+
|
|
25526
|
+
### Business Logic
|
|
25527
|
+
|
|
25528
|
+
The business logic type for this connector is "sql".
|
|
25529
|
+
|
|
25530
|
+
### SQL Reference
|
|
25257
25531
|
- Uses PostgreSQL based SQL syntax
|
|
25258
25532
|
- Schema exploration:
|
|
25259
25533
|
- List tables: \`SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'\`
|
|
25260
25534
|
- List columns: \`SELECT column_name, data_type FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'xxx'\`
|
|
25261
|
-
- Always include LIMIT in queries
|
|
25535
|
+
- Always include LIMIT in queries`,
|
|
25536
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
25537
|
+
|
|
25538
|
+
- \`squadbase-db_executeQuery\`: Squadbase DB (PostgreSQL\u30D9\u30FC\u30B9) SQL\u30AF\u30A8\u30EA\u3092\u5B9F\u884C\u3057\u3001\u884C\u30C7\u30FC\u30BF\u3092\u8FD4\u3057\u307E\u3059\u3002\`information_schema.tables\`/\`columns\` \u3092\u4F7F\u3063\u305F\u30B9\u30AD\u30FC\u30DE\u63A2\u7D22\u3084\u30C7\u30FC\u30BF\u306E\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0\u306B\u4F7F\u3044\u307E\u3059\u3002\u69CB\u6587\u306E\u6CE8\u610F\u70B9\u306F\u4E0B\u90E8\u306E\u300CSQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9\u300D\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
25262
25539
|
|
|
25263
25540
|
### Business Logic
|
|
25264
25541
|
|
|
25265
|
-
|
|
25266
|
-
|
|
25542
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002
|
|
25543
|
+
|
|
25544
|
+
### SQL \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
25267
25545
|
- PostgreSQL \u30D9\u30FC\u30B9\u306E SQL \u69CB\u6587\u3092\u4F7F\u7528\u3057\u307E\u3059
|
|
25268
25546
|
- \u30B9\u30AD\u30FC\u30DE\u63A2\u7D22:
|
|
25269
25547
|
- \u30C6\u30FC\u30D6\u30EB\u4E00\u89A7: \`SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'\`
|
|
25270
25548
|
- \u30AB\u30E9\u30E0\u4E00\u89A7: \`SELECT column_name, data_type FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'xxx'\`
|
|
25271
|
-
- \u30AF\u30A8\u30EA\u306B\u306F\u5FC5\u305A LIMIT \u3092\u542B\u3081\u3066\u304F\u3060\u3055\u3044
|
|
25272
|
-
|
|
25273
|
-
### Business Logic
|
|
25274
|
-
|
|
25275
|
-
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "sql" \u3067\u3059\u3002SQL\u30AF\u30A8\u30EA\u3092\u4F7F\u7528\u3057\u3066\u30C7\u30FC\u30BF\u53D6\u5F97\u30ED\u30B8\u30C3\u30AF\u3092\u5B9A\u7FA9\u3057\u3066\u304F\u3060\u3055\u3044\u3002`
|
|
25549
|
+
- \u30AF\u30A8\u30EA\u306B\u306F\u5FC5\u305A LIMIT \u3092\u542B\u3081\u3066\u304F\u3060\u3055\u3044`
|
|
25276
25550
|
},
|
|
25277
25551
|
tools: tools22,
|
|
25278
25552
|
async checkConnection(params, _config) {
|
|
@@ -25333,35 +25607,51 @@ var openaiConnector = new ConnectorPlugin({
|
|
|
25333
25607
|
parameters: parameters23,
|
|
25334
25608
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
25335
25609
|
systemPrompt: {
|
|
25336
|
-
en: `###
|
|
25337
|
-
|
|
25610
|
+
en: `### Business Logic
|
|
25611
|
+
|
|
25612
|
+
The business logic type for this connector is "typescript". This connector exposes the API key via \`connection(connectionId)\`; pass it to the official \`openai\` SDK and call the OpenAI API from the handler. Do NOT read credentials from environment variables.
|
|
25338
25613
|
|
|
25339
25614
|
\`\`\`ts
|
|
25615
|
+
import type { Context } from "hono";
|
|
25340
25616
|
import { connection } from "@squadbase/vite-server/connectors/openai";
|
|
25341
25617
|
import OpenAI from "openai";
|
|
25342
25618
|
|
|
25343
25619
|
const { apiKey } = connection("<connectionId>");
|
|
25344
25620
|
const client = new OpenAI({ apiKey });
|
|
25345
25621
|
|
|
25346
|
-
|
|
25347
|
-
|
|
25348
|
-
|
|
25349
|
-
|
|
25622
|
+
export default async function handler(c: Context) {
|
|
25623
|
+
const { prompt } = await c.req.json<{ prompt: string }>();
|
|
25624
|
+
|
|
25625
|
+
const response = await client.chat.completions.create({
|
|
25626
|
+
model: "gpt-4o",
|
|
25627
|
+
messages: [{ role: "user", content: prompt }],
|
|
25628
|
+
});
|
|
25629
|
+
|
|
25630
|
+
return c.json({ text: response.choices[0]?.message?.content ?? "" });
|
|
25631
|
+
}
|
|
25350
25632
|
\`\`\``,
|
|
25351
|
-
ja: `###
|
|
25352
|
-
|
|
25633
|
+
ja: `### Business Logic
|
|
25634
|
+
|
|
25635
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306F \`connection(connectionId)\` \u3067API\u30AD\u30FC\u3092\u516C\u958B\u3057\u3066\u304A\u308A\u3001\u516C\u5F0F\u306E \`openai\` SDK\u306B\u6E21\u3057\u3066\u30CF\u30F3\u30C9\u30E9\u304B\u3089OpenAI API\u3092\u547C\u3073\u51FA\u3057\u307E\u3059\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u8A8D\u8A3C\u60C5\u5831\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
25353
25636
|
|
|
25354
25637
|
\`\`\`ts
|
|
25638
|
+
import type { Context } from "hono";
|
|
25355
25639
|
import { connection } from "@squadbase/vite-server/connectors/openai";
|
|
25356
25640
|
import OpenAI from "openai";
|
|
25357
25641
|
|
|
25358
25642
|
const { apiKey } = connection("<connectionId>");
|
|
25359
25643
|
const client = new OpenAI({ apiKey });
|
|
25360
25644
|
|
|
25361
|
-
|
|
25362
|
-
|
|
25363
|
-
|
|
25364
|
-
|
|
25645
|
+
export default async function handler(c: Context) {
|
|
25646
|
+
const { prompt } = await c.req.json<{ prompt: string }>();
|
|
25647
|
+
|
|
25648
|
+
const response = await client.chat.completions.create({
|
|
25649
|
+
model: "gpt-4o",
|
|
25650
|
+
messages: [{ role: "user", content: prompt }],
|
|
25651
|
+
});
|
|
25652
|
+
|
|
25653
|
+
return c.json({ text: response.choices[0]?.message?.content ?? "" });
|
|
25654
|
+
}
|
|
25365
25655
|
\`\`\``
|
|
25366
25656
|
},
|
|
25367
25657
|
tools: tools23
|
|
@@ -25391,10 +25681,12 @@ var geminiConnector = new ConnectorPlugin({
|
|
|
25391
25681
|
parameters: parameters24,
|
|
25392
25682
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
25393
25683
|
systemPrompt: {
|
|
25394
|
-
en: `###
|
|
25395
|
-
|
|
25684
|
+
en: `### Business Logic
|
|
25685
|
+
|
|
25686
|
+
The business logic type for this connector is "typescript". This connector exposes the API key via \`connection(connectionId)\`; pass it to the official \`@google/generative-ai\` SDK and call the Gemini API from the handler. Do NOT read credentials from environment variables.
|
|
25396
25687
|
|
|
25397
25688
|
\`\`\`ts
|
|
25689
|
+
import type { Context } from "hono";
|
|
25398
25690
|
import { connection } from "@squadbase/vite-server/connectors/gemini";
|
|
25399
25691
|
import { GoogleGenerativeAI } from "@google/generative-ai";
|
|
25400
25692
|
|
|
@@ -25402,13 +25694,19 @@ const { apiKey } = connection("<connectionId>");
|
|
|
25402
25694
|
const genAI = new GoogleGenerativeAI(apiKey);
|
|
25403
25695
|
const model = genAI.getGenerativeModel({ model: "gemini-2.0-flash" });
|
|
25404
25696
|
|
|
25405
|
-
|
|
25406
|
-
const
|
|
25697
|
+
export default async function handler(c: Context) {
|
|
25698
|
+
const { prompt } = await c.req.json<{ prompt: string }>();
|
|
25699
|
+
|
|
25700
|
+
const result = await model.generateContent(prompt);
|
|
25701
|
+
return c.json({ text: result.response.text() });
|
|
25702
|
+
}
|
|
25407
25703
|
\`\`\``,
|
|
25408
|
-
ja: `###
|
|
25409
|
-
|
|
25704
|
+
ja: `### Business Logic
|
|
25705
|
+
|
|
25706
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306F \`connection(connectionId)\` \u3067API\u30AD\u30FC\u3092\u516C\u958B\u3057\u3066\u304A\u308A\u3001\u516C\u5F0F\u306E \`@google/generative-ai\` SDK\u306B\u6E21\u3057\u3066\u30CF\u30F3\u30C9\u30E9\u304B\u3089Gemini API\u3092\u547C\u3073\u51FA\u3057\u307E\u3059\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u8A8D\u8A3C\u60C5\u5831\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
25410
25707
|
|
|
25411
25708
|
\`\`\`ts
|
|
25709
|
+
import type { Context } from "hono";
|
|
25412
25710
|
import { connection } from "@squadbase/vite-server/connectors/gemini";
|
|
25413
25711
|
import { GoogleGenerativeAI } from "@google/generative-ai";
|
|
25414
25712
|
|
|
@@ -25416,8 +25714,12 @@ const { apiKey } = connection("<connectionId>");
|
|
|
25416
25714
|
const genAI = new GoogleGenerativeAI(apiKey);
|
|
25417
25715
|
const model = genAI.getGenerativeModel({ model: "gemini-2.0-flash" });
|
|
25418
25716
|
|
|
25419
|
-
|
|
25420
|
-
const
|
|
25717
|
+
export default async function handler(c: Context) {
|
|
25718
|
+
const { prompt } = await c.req.json<{ prompt: string }>();
|
|
25719
|
+
|
|
25720
|
+
const result = await model.generateContent(prompt);
|
|
25721
|
+
return c.json({ text: result.response.text() });
|
|
25722
|
+
}
|
|
25421
25723
|
\`\`\``
|
|
25422
25724
|
},
|
|
25423
25725
|
tools: tools24
|
|
@@ -25447,42 +25749,74 @@ var anthropicConnector = new ConnectorPlugin({
|
|
|
25447
25749
|
parameters: parameters25,
|
|
25448
25750
|
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
25449
25751
|
systemPrompt: {
|
|
25450
|
-
en: `###
|
|
25451
|
-
|
|
25752
|
+
en: `### Business Logic
|
|
25753
|
+
|
|
25754
|
+
The business logic type for this connector is "typescript". This connector exposes the API key via \`connection(connectionId)\`; pass it to the official \`@anthropic-ai/sdk\` and call the Anthropic API from the handler. Do NOT read credentials from environment variables.
|
|
25452
25755
|
|
|
25453
25756
|
\`\`\`ts
|
|
25757
|
+
import type { Context } from "hono";
|
|
25454
25758
|
import { connection } from "@squadbase/vite-server/connectors/anthropic";
|
|
25455
25759
|
import Anthropic from "@anthropic-ai/sdk";
|
|
25456
25760
|
|
|
25457
25761
|
const { apiKey } = connection("<connectionId>");
|
|
25458
25762
|
const client = new Anthropic({ apiKey });
|
|
25459
25763
|
|
|
25460
|
-
|
|
25461
|
-
|
|
25462
|
-
|
|
25463
|
-
|
|
25464
|
-
|
|
25764
|
+
export default async function handler(c: Context) {
|
|
25765
|
+
const { prompt } = await c.req.json<{ prompt: string }>();
|
|
25766
|
+
|
|
25767
|
+
const message = await client.messages.create({
|
|
25768
|
+
model: "claude-sonnet-4-20250514",
|
|
25769
|
+
max_tokens: 1024,
|
|
25770
|
+
messages: [{ role: "user", content: prompt }],
|
|
25771
|
+
});
|
|
25772
|
+
|
|
25773
|
+
return c.json({ text: message.content[0]?.type === "text" ? message.content[0].text : "" });
|
|
25774
|
+
}
|
|
25465
25775
|
\`\`\``,
|
|
25466
|
-
ja: `###
|
|
25467
|
-
|
|
25776
|
+
ja: `### Business Logic
|
|
25777
|
+
|
|
25778
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306F \`connection(connectionId)\` \u3067API\u30AD\u30FC\u3092\u516C\u958B\u3057\u3066\u304A\u308A\u3001\u516C\u5F0F\u306E \`@anthropic-ai/sdk\` \u306B\u6E21\u3057\u3066\u30CF\u30F3\u30C9\u30E9\u304B\u3089Anthropic API\u3092\u547C\u3073\u51FA\u3057\u307E\u3059\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u8A8D\u8A3C\u60C5\u5831\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
25468
25779
|
|
|
25469
25780
|
\`\`\`ts
|
|
25781
|
+
import type { Context } from "hono";
|
|
25470
25782
|
import { connection } from "@squadbase/vite-server/connectors/anthropic";
|
|
25471
25783
|
import Anthropic from "@anthropic-ai/sdk";
|
|
25472
25784
|
|
|
25473
25785
|
const { apiKey } = connection("<connectionId>");
|
|
25474
25786
|
const client = new Anthropic({ apiKey });
|
|
25475
25787
|
|
|
25476
|
-
|
|
25477
|
-
|
|
25478
|
-
|
|
25479
|
-
|
|
25480
|
-
|
|
25788
|
+
export default async function handler(c: Context) {
|
|
25789
|
+
const { prompt } = await c.req.json<{ prompt: string }>();
|
|
25790
|
+
|
|
25791
|
+
const message = await client.messages.create({
|
|
25792
|
+
model: "claude-sonnet-4-20250514",
|
|
25793
|
+
max_tokens: 1024,
|
|
25794
|
+
messages: [{ role: "user", content: prompt }],
|
|
25795
|
+
});
|
|
25796
|
+
|
|
25797
|
+
return c.json({ text: message.content[0]?.type === "text" ? message.content[0].text : "" });
|
|
25798
|
+
}
|
|
25481
25799
|
\`\`\``
|
|
25482
25800
|
},
|
|
25483
25801
|
tools: tools25
|
|
25484
25802
|
});
|
|
25485
25803
|
|
|
25804
|
+
// ../connectors/src/connectors/amplitude/setup.ts
|
|
25805
|
+
var amplitudeOnboarding = new ConnectorOnboarding({
|
|
25806
|
+
dataOverviewInstructions: {
|
|
25807
|
+
en: `1. Check the connection's region parameter: use https://analytics.eu.amplitude.com for EU, https://amplitude.com for US (default)
|
|
25808
|
+
2. Call amplitude_request with GET {baseUrl}/api/2/events/list to list available event types
|
|
25809
|
+
3. Call amplitude_request with GET {baseUrl}/api/2/export?start=YYYYMMDDTHH&end=YYYYMMDDTHH to export raw event data for a time range
|
|
25810
|
+
4. Use GET {baseUrl}/api/2/usersearch?user=QUERY and GET {baseUrl}/api/2/useractivity?user=AMPLITUDE_ID to explore user-level data
|
|
25811
|
+
NOTE: The Dashboard REST API endpoints (events/segmentation, funnels, retention, etc.) require a paid Growth or Enterprise plan. If you get a 403 Forbidden error, fall back to the Export API (/api/2/export) to retrieve raw events and perform aggregation in code instead.`,
|
|
25812
|
+
ja: `1. \u63A5\u7D9A\u306Eregion\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u78BA\u8A8D\uFF1AEU\u306E\u5834\u5408\u306F https://analytics.eu.amplitude.com\u3001US\uFF08\u30C7\u30D5\u30A9\u30EB\u30C8\uFF09\u306E\u5834\u5408\u306F https://amplitude.com \u3092\u4F7F\u7528
|
|
25813
|
+
2. amplitude_request \u3067 GET {baseUrl}/api/2/events/list \u3092\u547C\u3073\u51FA\u3057\u3001\u5229\u7528\u53EF\u80FD\u306A\u30A4\u30D9\u30F3\u30C8\u30BF\u30A4\u30D7\u4E00\u89A7\u3092\u53D6\u5F97
|
|
25814
|
+
3. amplitude_request \u3067 GET {baseUrl}/api/2/export?start=YYYYMMDDTHH&end=YYYYMMDDTHH \u3092\u547C\u3073\u51FA\u3057\u3001\u6307\u5B9A\u671F\u9593\u306E\u751F\u30A4\u30D9\u30F3\u30C8\u30C7\u30FC\u30BF\u3092\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
|
|
25815
|
+
4. GET {baseUrl}/api/2/usersearch?user=QUERY \u3084 GET {baseUrl}/api/2/useractivity?user=AMPLITUDE_ID \u3067\u30E6\u30FC\u30B6\u30FC\u30EC\u30D9\u30EB\u306E\u30C7\u30FC\u30BF\u3092\u63A2\u7D22
|
|
25816
|
+
\u6CE8\u610F: Dashboard REST API\uFF08events/segmentation\u3001funnels\u3001retention\u7B49\uFF09\u306F\u6709\u6599\u306EGrowth\u307E\u305F\u306FEnterprise\u30D7\u30E9\u30F3\u304C\u5FC5\u8981\u3067\u3059\u3002403 Forbidden\u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u306F\u3001Export API\uFF08/api/2/export\uFF09\u3067\u751F\u30A4\u30D9\u30F3\u30C8\u3092\u53D6\u5F97\u3057\u3001\u30B3\u30FC\u30C9\u4E0A\u3067\u96C6\u8A08\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002`
|
|
25817
|
+
}
|
|
25818
|
+
});
|
|
25819
|
+
|
|
25486
25820
|
// ../connectors/src/connectors/amplitude/parameters.ts
|
|
25487
25821
|
var parameters26 = {
|
|
25488
25822
|
apiKey: new ParameterDefinition({
|
|
@@ -25502,70 +25836,262 @@ var parameters26 = {
|
|
|
25502
25836
|
type: "text",
|
|
25503
25837
|
secret: true,
|
|
25504
25838
|
required: true
|
|
25839
|
+
}),
|
|
25840
|
+
region: new ParameterDefinition({
|
|
25841
|
+
slug: "region",
|
|
25842
|
+
name: "Region",
|
|
25843
|
+
description: 'Amplitude data region. Set to "eu" if your Amplitude project is hosted in the EU. Leave empty for US (default).',
|
|
25844
|
+
envVarBaseKey: "AMPLITUDE_REGION",
|
|
25845
|
+
type: "text",
|
|
25846
|
+
secret: false,
|
|
25847
|
+
required: false
|
|
25505
25848
|
})
|
|
25506
25849
|
};
|
|
25507
25850
|
|
|
25508
|
-
// ../connectors/src/connectors/amplitude/
|
|
25509
|
-
|
|
25510
|
-
var
|
|
25511
|
-
|
|
25512
|
-
|
|
25513
|
-
|
|
25514
|
-
|
|
25515
|
-
|
|
25516
|
-
|
|
25851
|
+
// ../connectors/src/connectors/amplitude/tools/request.ts
|
|
25852
|
+
import { z as z30 } from "zod";
|
|
25853
|
+
var REQUEST_TIMEOUT_MS19 = 6e4;
|
|
25854
|
+
var inputSchema30 = z30.object({
|
|
25855
|
+
toolUseIntent: z30.string().optional().describe(
|
|
25856
|
+
"Brief description of what you intend to accomplish with this tool call"
|
|
25857
|
+
),
|
|
25858
|
+
connectionId: z30.string().describe("ID of the Amplitude connection to use"),
|
|
25859
|
+
method: z30.enum(["GET", "POST"]).describe(
|
|
25860
|
+
"HTTP method. GET for most read endpoints (events/list, export, usersearch, useractivity). POST is rarely needed."
|
|
25861
|
+
),
|
|
25862
|
+
url: z30.string().describe(
|
|
25863
|
+
"Full URL including query parameters (e.g., 'https://amplitude.com/api/2/events/list', 'https://amplitude.com/api/2/export?start=20240101T00&end=20240102T00')"
|
|
25864
|
+
),
|
|
25865
|
+
body: z30.record(z30.string(), z30.unknown()).optional().describe("Request body (JSON) for POST requests")
|
|
25866
|
+
});
|
|
25867
|
+
var outputSchema30 = z30.discriminatedUnion("success", [
|
|
25868
|
+
z30.object({
|
|
25869
|
+
success: z30.literal(true),
|
|
25870
|
+
status: z30.number(),
|
|
25871
|
+
data: z30.record(z30.string(), z30.unknown())
|
|
25872
|
+
}),
|
|
25873
|
+
z30.object({
|
|
25874
|
+
success: z30.literal(false),
|
|
25875
|
+
error: z30.string()
|
|
25876
|
+
})
|
|
25877
|
+
]);
|
|
25878
|
+
var requestTool13 = new ConnectorTool({
|
|
25879
|
+
name: "request",
|
|
25880
|
+
description: `Send authenticated requests to the Amplitude REST API.
|
|
25881
|
+
Authentication is handled automatically using Basic auth (API Key + Secret Key).
|
|
25882
|
+
Provide the full URL including any query parameters.
|
|
25883
|
+
Base URL by region: US \u2192 https://amplitude.com, EU \u2192 https://analytics.eu.amplitude.com. Check the connection's region parameter to determine which base URL to use.
|
|
25884
|
+
|
|
25885
|
+
Recommended endpoints (available on all plans):
|
|
25886
|
+
- GET {baseUrl}/api/2/events/list \u2014 list event types
|
|
25887
|
+
- GET {baseUrl}/api/2/export?start=YYYYMMDDTHH&end=YYYYMMDDTHH \u2014 export raw events
|
|
25888
|
+
- GET {baseUrl}/api/2/usersearch?user=QUERY \u2014 search users
|
|
25889
|
+
- GET {baseUrl}/api/2/useractivity?user=AMPLITUDE_ID \u2014 user activity
|
|
25890
|
+
|
|
25891
|
+
IMPORTANT: Dashboard REST API endpoints (events/segmentation, funnels, retention, revenue, etc.) require a paid Growth or Enterprise plan and will return 403 Forbidden on free plans. Always try the Export API first and aggregate data in code.`,
|
|
25892
|
+
inputSchema: inputSchema30,
|
|
25893
|
+
outputSchema: outputSchema30,
|
|
25894
|
+
async execute({ connectionId, method, url, body }, connections) {
|
|
25895
|
+
const connection = connections.find((c) => c.id === connectionId);
|
|
25896
|
+
if (!connection) {
|
|
25897
|
+
return {
|
|
25898
|
+
success: false,
|
|
25899
|
+
error: `Connection ${connectionId} not found`
|
|
25900
|
+
};
|
|
25901
|
+
}
|
|
25902
|
+
console.log(
|
|
25903
|
+
`[connector-request] amplitude/${connection.name}: ${method} ${url}`
|
|
25904
|
+
);
|
|
25905
|
+
try {
|
|
25906
|
+
const apiKey = parameters26.apiKey.getValue(connection);
|
|
25907
|
+
const secretKey = parameters26.secretKey.getValue(connection);
|
|
25908
|
+
const authToken = btoa(`${apiKey}:${secretKey}`);
|
|
25909
|
+
const controller = new AbortController();
|
|
25910
|
+
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS19);
|
|
25911
|
+
try {
|
|
25912
|
+
const response = await fetch(url, {
|
|
25913
|
+
method,
|
|
25914
|
+
headers: {
|
|
25915
|
+
Authorization: `Basic ${authToken}`,
|
|
25916
|
+
"Content-Type": "application/json"
|
|
25917
|
+
},
|
|
25918
|
+
body: body ? JSON.stringify(body) : void 0,
|
|
25919
|
+
signal: controller.signal
|
|
25920
|
+
});
|
|
25921
|
+
const data = await response.json();
|
|
25922
|
+
if (!response.ok) {
|
|
25923
|
+
const errorMessage = typeof data?.error === "string" ? data.error : typeof data?.message === "string" ? data.message : `HTTP ${response.status} ${response.statusText}`;
|
|
25924
|
+
return { success: false, error: errorMessage };
|
|
25925
|
+
}
|
|
25926
|
+
return { success: true, status: response.status, data };
|
|
25927
|
+
} finally {
|
|
25928
|
+
clearTimeout(timeout);
|
|
25929
|
+
}
|
|
25930
|
+
} catch (err) {
|
|
25931
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
25932
|
+
return { success: false, error: msg };
|
|
25933
|
+
}
|
|
25934
|
+
}
|
|
25935
|
+
});
|
|
25936
|
+
|
|
25937
|
+
// ../connectors/src/connectors/amplitude/index.ts
|
|
25938
|
+
var tools26 = { request: requestTool13 };
|
|
25939
|
+
var amplitudeConnector = new ConnectorPlugin({
|
|
25940
|
+
slug: "amplitude",
|
|
25941
|
+
authType: null,
|
|
25942
|
+
name: "Amplitude",
|
|
25943
|
+
description: "Connect to Amplitude for product analytics and user behavior data.",
|
|
25944
|
+
iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/2UBJSdRlFJaLq52WUCTBEB/308b59b374cf6c662ac70989860bffd7/amplitude-icon.svg",
|
|
25945
|
+
parameters: parameters26,
|
|
25517
25946
|
releaseFlag: { dev1: true, dev2: false, prod: false },
|
|
25947
|
+
onboarding: amplitudeOnboarding,
|
|
25518
25948
|
systemPrompt: {
|
|
25519
|
-
en: `###
|
|
25520
|
-
|
|
25949
|
+
en: `### Tools
|
|
25950
|
+
|
|
25951
|
+
- \`amplitude_request\`: The only way to call the Amplitude REST API. Use it for event segmentation, listing event types, user search, user activity, and data export. Authentication (Basic auth with API Key + Secret Key) is configured automatically. Provide the full URL including query parameters \u2014 the base URL varies by endpoint.
|
|
25952
|
+
|
|
25953
|
+
### Business Logic
|
|
25954
|
+
|
|
25955
|
+
The business logic type for this connector is "typescript". Use the connector SDK in your handler. Do NOT read credentials from environment variables.
|
|
25956
|
+
|
|
25957
|
+
SDK methods (client created via \`connection(connectionId)\`):
|
|
25958
|
+
- \`client.request(url, init?)\` \u2014 low-level authenticated fetch (provide full URL)
|
|
25959
|
+
- \`client.listEventTypes()\` \u2014 list all event types
|
|
25960
|
+
- \`client.eventSegmentation(options)\` \u2014 run event segmentation query (e, start, end, m?, i?, g?)
|
|
25961
|
+
- \`client.userSearch(query)\` \u2014 search users by user or amplitude ID
|
|
25962
|
+
- \`client.userActivity(amplitudeId, options?)\` \u2014 get user activity by amplitude ID
|
|
25521
25963
|
|
|
25522
25964
|
\`\`\`ts
|
|
25965
|
+
import type { Context } from "hono";
|
|
25523
25966
|
import { connection } from "@squadbase/vite-server/connectors/amplitude";
|
|
25524
25967
|
|
|
25525
|
-
const
|
|
25968
|
+
const amp = connection("<connectionId>");
|
|
25526
25969
|
|
|
25527
|
-
|
|
25528
|
-
const
|
|
25529
|
-
|
|
25530
|
-
|
|
25531
|
-
|
|
25532
|
-
});
|
|
25533
|
-
|
|
25970
|
+
export default async function handler(c: Context) {
|
|
25971
|
+
const { eventType, start, end } = await c.req.json<{
|
|
25972
|
+
eventType: string;
|
|
25973
|
+
start: string;
|
|
25974
|
+
end: string;
|
|
25975
|
+
}>();
|
|
25976
|
+
|
|
25977
|
+
const result = await amp.eventSegmentation({
|
|
25978
|
+
e: { event_type: eventType },
|
|
25979
|
+
start,
|
|
25980
|
+
end,
|
|
25981
|
+
});
|
|
25982
|
+
|
|
25983
|
+
return c.json(result);
|
|
25984
|
+
}
|
|
25534
25985
|
\`\`\`
|
|
25535
25986
|
|
|
25536
|
-
###
|
|
25537
|
-
|
|
25987
|
+
### Amplitude REST API Reference
|
|
25988
|
+
|
|
25989
|
+
- Authentication: Basic auth (API Key:Secret Key, handled automatically)
|
|
25990
|
+
- All timestamps use YYYYMMDD format for date parameters
|
|
25991
|
+
|
|
25992
|
+
#### Endpoints Available on All Plans
|
|
25538
25993
|
- GET \`https://amplitude.com/api/2/events/list\` \u2014 List event types
|
|
25539
|
-
- GET \`https://amplitude.com/api/2/
|
|
25540
|
-
- GET \`https://amplitude.com/api/2/
|
|
25541
|
-
-
|
|
25542
|
-
|
|
25543
|
-
|
|
25994
|
+
- GET \`https://amplitude.com/api/2/export?start=YYYYMMDDTHH&end=YYYYMMDDTHH\` \u2014 Export raw events
|
|
25995
|
+
- GET \`https://amplitude.com/api/2/usersearch?user=QUERY\` \u2014 Search users
|
|
25996
|
+
- GET \`https://amplitude.com/api/2/useractivity?user=AMPLITUDE_ID\` \u2014 User activity
|
|
25997
|
+
|
|
25998
|
+
#### Endpoints Requiring Growth or Enterprise Plan (will return 403 on free/Starter plans)
|
|
25999
|
+
- GET \`https://amplitude.com/api/2/events/segmentation\` \u2014 Event segmentation
|
|
26000
|
+
- GET \`https://amplitude.com/api/2/funnels\` \u2014 Funnel analysis
|
|
26001
|
+
- GET \`https://amplitude.com/api/2/retention\` \u2014 Retention analysis
|
|
26002
|
+
- GET \`https://amplitude.com/api/2/revenue\` \u2014 Revenue analysis
|
|
26003
|
+
|
|
26004
|
+
IMPORTANT: Always start with the endpoints available on all plans. If you need aggregated analytics, use the Export API to retrieve raw events and aggregate in code. Only attempt the Dashboard REST API endpoints (segmentation, funnels, retention, revenue) if specifically requested, and handle 403 errors gracefully by falling back to the Export API.
|
|
26005
|
+
|
|
26006
|
+
#### Event Segmentation Query Parameters (Growth/Enterprise only)
|
|
26007
|
+
- \`e\` \u2014 JSON-encoded event definition (e.g., \`{"event_type":"Click"}\`)
|
|
26008
|
+
- \`start\` \u2014 Start date (YYYYMMDD)
|
|
26009
|
+
- \`end\` \u2014 End date (YYYYMMDD)
|
|
26010
|
+
- \`m\` \u2014 Metric type (uniques, totals, avg, etc.)
|
|
26011
|
+
- \`i\` \u2014 Interval (1=daily, 7=weekly, 30=monthly)
|
|
26012
|
+
- \`g\` \u2014 Group by property`,
|
|
26013
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
26014
|
+
|
|
26015
|
+
- \`amplitude_request\`: Amplitude REST API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30A4\u30D9\u30F3\u30C8\u30BB\u30B0\u30E1\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3\u3001\u30A4\u30D9\u30F3\u30C8\u30BF\u30A4\u30D7\u4E00\u89A7\u3001\u30E6\u30FC\u30B6\u30FC\u691C\u7D22\u3001\u30E6\u30FC\u30B6\u30FC\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u3001\u30C7\u30FC\u30BF\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08API Key + Secret Key\u306B\u3088\u308BBasic\u8A8D\u8A3C\uFF09\u306F\u81EA\u52D5\u7684\u306B\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002\u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u542B\u3080\u5B8C\u5168\u306AURL\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044 \u2014 \u30D9\u30FC\u30B9URL\u306F\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u306B\u3088\u3063\u3066\u7570\u306A\u308A\u307E\u3059\u3002
|
|
26016
|
+
|
|
26017
|
+
### Business Logic
|
|
26018
|
+
|
|
26019
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u30B3\u30CD\u30AF\u30BFSDK\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u8A8D\u8A3C\u60C5\u5831\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
26020
|
+
|
|
26021
|
+
SDK\u30E1\u30BD\u30C3\u30C9 (\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8):
|
|
26022
|
+
- \`client.request(url, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304Dfetch\uFF08\u5B8C\u5168\u306AURL\u3092\u6307\u5B9A\uFF09
|
|
26023
|
+
- \`client.listEventTypes()\` \u2014 \u5168\u30A4\u30D9\u30F3\u30C8\u30BF\u30A4\u30D7\u306E\u4E00\u89A7
|
|
26024
|
+
- \`client.eventSegmentation(options)\` \u2014 \u30A4\u30D9\u30F3\u30C8\u30BB\u30B0\u30E1\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3\u30AF\u30A8\u30EA\u306E\u5B9F\u884C\uFF08e, start, end, m?, i?, g?\uFF09
|
|
26025
|
+
- \`client.userSearch(query)\` \u2014 \u30E6\u30FC\u30B6\u30FC\u307E\u305F\u306Famplitude ID\u3067\u30E6\u30FC\u30B6\u30FC\u3092\u691C\u7D22
|
|
26026
|
+
- \`client.userActivity(amplitudeId, options?)\` \u2014 amplitude ID\u3067\u30E6\u30FC\u30B6\u30FC\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3\u3092\u53D6\u5F97
|
|
25544
26027
|
|
|
25545
26028
|
\`\`\`ts
|
|
26029
|
+
import type { Context } from "hono";
|
|
25546
26030
|
import { connection } from "@squadbase/vite-server/connectors/amplitude";
|
|
25547
26031
|
|
|
25548
|
-
const
|
|
26032
|
+
const amp = connection("<connectionId>");
|
|
25549
26033
|
|
|
25550
|
-
|
|
25551
|
-
const
|
|
25552
|
-
|
|
25553
|
-
|
|
25554
|
-
|
|
25555
|
-
});
|
|
25556
|
-
|
|
26034
|
+
export default async function handler(c: Context) {
|
|
26035
|
+
const { eventType, start, end } = await c.req.json<{
|
|
26036
|
+
eventType: string;
|
|
26037
|
+
start: string;
|
|
26038
|
+
end: string;
|
|
26039
|
+
}>();
|
|
26040
|
+
|
|
26041
|
+
const result = await amp.eventSegmentation({
|
|
26042
|
+
e: { event_type: eventType },
|
|
26043
|
+
start,
|
|
26044
|
+
end,
|
|
26045
|
+
});
|
|
26046
|
+
|
|
26047
|
+
return c.json(result);
|
|
26048
|
+
}
|
|
25557
26049
|
\`\`\`
|
|
25558
26050
|
|
|
25559
|
-
### \
|
|
25560
|
-
|
|
26051
|
+
### Amplitude REST API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
26052
|
+
|
|
26053
|
+
- \u8A8D\u8A3C: Basic\u8A8D\u8A3C\uFF08API Key:Secret Key\u3001\u81EA\u52D5\u8A2D\u5B9A\uFF09
|
|
26054
|
+
- \u65E5\u4ED8\u30D1\u30E9\u30E1\u30FC\u30BF\u306F\u3059\u3079\u3066YYYYMMDD\u5F62\u5F0F\u306E\u30BF\u30A4\u30E0\u30B9\u30BF\u30F3\u30D7\u3092\u4F7F\u7528
|
|
26055
|
+
|
|
26056
|
+
#### \u5168\u30D7\u30E9\u30F3\u3067\u5229\u7528\u53EF\u80FD\u306A\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
|
|
25561
26057
|
- GET \`https://amplitude.com/api/2/events/list\` \u2014 \u30A4\u30D9\u30F3\u30C8\u30BF\u30A4\u30D7\u4E00\u89A7
|
|
25562
|
-
- GET \`https://amplitude.com/api/2/
|
|
25563
|
-
- GET \`https://amplitude.com/api/2/
|
|
25564
|
-
-
|
|
26058
|
+
- GET \`https://amplitude.com/api/2/export?start=YYYYMMDDTHH&end=YYYYMMDDTHH\` \u2014 \u751F\u30A4\u30D9\u30F3\u30C8\u306E\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8
|
|
26059
|
+
- GET \`https://amplitude.com/api/2/usersearch?user=QUERY\` \u2014 \u30E6\u30FC\u30B6\u30FC\u691C\u7D22
|
|
26060
|
+
- GET \`https://amplitude.com/api/2/useractivity?user=AMPLITUDE_ID\` \u2014 \u30E6\u30FC\u30B6\u30FC\u30A2\u30AF\u30C6\u30A3\u30D3\u30C6\u30A3
|
|
26061
|
+
|
|
26062
|
+
#### Growth\u307E\u305F\u306FEnterprise\u30D7\u30E9\u30F3\u304C\u5FC5\u8981\u306A\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\uFF08\u7121\u6599/Starter\u30D7\u30E9\u30F3\u3067\u306F403\u30A8\u30E9\u30FC\uFF09
|
|
26063
|
+
- GET \`https://amplitude.com/api/2/events/segmentation\` \u2014 \u30A4\u30D9\u30F3\u30C8\u30BB\u30B0\u30E1\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3
|
|
26064
|
+
- GET \`https://amplitude.com/api/2/funnels\` \u2014 \u30D5\u30A1\u30CD\u30EB\u5206\u6790
|
|
26065
|
+
- GET \`https://amplitude.com/api/2/retention\` \u2014 \u30EA\u30C6\u30F3\u30B7\u30E7\u30F3\u5206\u6790
|
|
26066
|
+
- GET \`https://amplitude.com/api/2/revenue\` \u2014 \u53CE\u76CA\u5206\u6790
|
|
26067
|
+
|
|
26068
|
+
\u91CD\u8981: \u307E\u305A\u5168\u30D7\u30E9\u30F3\u3067\u5229\u7528\u53EF\u80FD\u306A\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u96C6\u8A08\u5206\u6790\u304C\u5FC5\u8981\u306A\u5834\u5408\u306F\u3001Export API\u3067\u751F\u30A4\u30D9\u30F3\u30C8\u3092\u53D6\u5F97\u3057\u3001\u30B3\u30FC\u30C9\u4E0A\u3067\u96C6\u8A08\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002Dashboard REST API\uFF08segmentation\u3001funnels\u3001retention\u3001revenue\uFF09\u306F\u660E\u793A\u7684\u306B\u8981\u6C42\u3055\u308C\u305F\u5834\u5408\u306E\u307F\u8A66\u884C\u3057\u3001403\u30A8\u30E9\u30FC\u304C\u8FD4\u3055\u308C\u305F\u5834\u5408\u306FExport API\u306B\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
26069
|
+
|
|
26070
|
+
#### \u30A4\u30D9\u30F3\u30C8\u30BB\u30B0\u30E1\u30F3\u30C6\u30FC\u30B7\u30E7\u30F3\u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF\uFF08Growth/Enterprise\u30D7\u30E9\u30F3\u306E\u307F\uFF09
|
|
26071
|
+
- \`e\` \u2014 JSON\u30A8\u30F3\u30B3\u30FC\u30C9\u3055\u308C\u305F\u30A4\u30D9\u30F3\u30C8\u5B9A\u7FA9\uFF08\u4F8B: \`{"event_type":"Click"}\`\uFF09
|
|
26072
|
+
- \`start\` \u2014 \u958B\u59CB\u65E5\uFF08YYYYMMDD\uFF09
|
|
26073
|
+
- \`end\` \u2014 \u7D42\u4E86\u65E5\uFF08YYYYMMDD\uFF09
|
|
26074
|
+
- \`m\` \u2014 \u30E1\u30C8\u30EA\u30AF\u30B9\u30BF\u30A4\u30D7\uFF08uniques, totals, avg\u306A\u3069\uFF09
|
|
26075
|
+
- \`i\` \u2014 \u30A4\u30F3\u30BF\u30FC\u30D0\u30EB\uFF081=\u65E5\u6B21\u30017=\u9031\u6B21\u300130=\u6708\u6B21\uFF09
|
|
26076
|
+
- \`g\` \u2014 \u30B0\u30EB\u30FC\u30D7\u5316\u30D7\u30ED\u30D1\u30C6\u30A3`
|
|
25565
26077
|
},
|
|
25566
26078
|
tools: tools26
|
|
25567
26079
|
});
|
|
25568
26080
|
|
|
26081
|
+
// ../connectors/src/connectors/attio/setup.ts
|
|
26082
|
+
var attioOnboarding = new ConnectorOnboarding({
|
|
26083
|
+
dataOverviewInstructions: {
|
|
26084
|
+
en: `1. Call attio_request with GET /objects to list all available objects (people, companies, deals, etc.)
|
|
26085
|
+
2. Call attio_request with GET /objects/people/attributes to explore the people object attributes
|
|
26086
|
+
3. Call attio_request with POST /objects/people/records/query with { "limit": 5 } to sample people records
|
|
26087
|
+
4. Explore other objects (companies, deals) as needed`,
|
|
26088
|
+
ja: `1. attio_request \u3067 GET /objects \u3092\u547C\u3073\u51FA\u3057\u3001\u5229\u7528\u53EF\u80FD\u306A\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u4E00\u89A7\u3092\u53D6\u5F97\uFF08people\u3001companies\u3001deals\u306A\u3069\uFF09
|
|
26089
|
+
2. attio_request \u3067 GET /objects/people/attributes \u3092\u547C\u3073\u51FA\u3057\u3001people\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u5C5E\u6027\u3092\u78BA\u8A8D
|
|
26090
|
+
3. attio_request \u3067 POST /objects/people/records/query \u3092 { "limit": 5 } \u3067\u547C\u3073\u51FA\u3057\u3001people\u30EC\u30B3\u30FC\u30C9\u3092\u30B5\u30F3\u30D7\u30EA\u30F3\u30B0
|
|
26091
|
+
4. \u5FC5\u8981\u306B\u5FDC\u3058\u3066\u4ED6\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\uFF08companies\u3001deals\uFF09\u3092\u63A2\u7D22`
|
|
26092
|
+
}
|
|
26093
|
+
});
|
|
26094
|
+
|
|
25569
26095
|
// ../connectors/src/connectors/attio/parameters.ts
|
|
25570
26096
|
var parameters27 = {
|
|
25571
26097
|
apiKey: new ParameterDefinition({
|
|
@@ -25579,8 +26105,86 @@ var parameters27 = {
|
|
|
25579
26105
|
})
|
|
25580
26106
|
};
|
|
25581
26107
|
|
|
26108
|
+
// ../connectors/src/connectors/attio/tools/request.ts
|
|
26109
|
+
import { z as z31 } from "zod";
|
|
26110
|
+
var BASE_URL11 = "https://api.attio.com/v2";
|
|
26111
|
+
var REQUEST_TIMEOUT_MS20 = 6e4;
|
|
26112
|
+
var inputSchema31 = z31.object({
|
|
26113
|
+
toolUseIntent: z31.string().optional().describe(
|
|
26114
|
+
"Brief description of what you intend to accomplish with this tool call"
|
|
26115
|
+
),
|
|
26116
|
+
connectionId: z31.string().describe("ID of the Attio connection to use"),
|
|
26117
|
+
method: z31.enum(["GET", "POST", "PATCH", "DELETE"]).describe(
|
|
26118
|
+
"HTTP method. GET for reading resources, POST for creating or querying records, PATCH for updating, DELETE for removing."
|
|
26119
|
+
),
|
|
26120
|
+
path: z31.string().describe(
|
|
26121
|
+
"API path (e.g., '/objects', '/objects/people/records/query', '/objects/companies/records/{record_id}')"
|
|
26122
|
+
),
|
|
26123
|
+
body: z31.record(z31.string(), z31.unknown()).optional().describe("Request body (JSON) for POST/PATCH requests")
|
|
26124
|
+
});
|
|
26125
|
+
var outputSchema31 = z31.discriminatedUnion("success", [
|
|
26126
|
+
z31.object({
|
|
26127
|
+
success: z31.literal(true),
|
|
26128
|
+
status: z31.number(),
|
|
26129
|
+
data: z31.record(z31.string(), z31.unknown())
|
|
26130
|
+
}),
|
|
26131
|
+
z31.object({
|
|
26132
|
+
success: z31.literal(false),
|
|
26133
|
+
error: z31.string()
|
|
26134
|
+
})
|
|
26135
|
+
]);
|
|
26136
|
+
var requestTool14 = new ConnectorTool({
|
|
26137
|
+
name: "request",
|
|
26138
|
+
description: `Send authenticated requests to the Attio REST API.
|
|
26139
|
+
Authentication is handled automatically using the API Key (Bearer token).
|
|
26140
|
+
Use this tool for all Attio API interactions: querying records (people, companies, deals), listing objects and attributes, managing list entries, and working with notes.
|
|
26141
|
+
Note that querying records uses POST (not GET) with a request body for filters.`,
|
|
26142
|
+
inputSchema: inputSchema31,
|
|
26143
|
+
outputSchema: outputSchema31,
|
|
26144
|
+
async execute({ connectionId, method, path: path5, body }, connections) {
|
|
26145
|
+
const connection = connections.find((c) => c.id === connectionId);
|
|
26146
|
+
if (!connection) {
|
|
26147
|
+
return {
|
|
26148
|
+
success: false,
|
|
26149
|
+
error: `Connection ${connectionId} not found`
|
|
26150
|
+
};
|
|
26151
|
+
}
|
|
26152
|
+
console.log(
|
|
26153
|
+
`[connector-request] attio/${connection.name}: ${method} ${path5}`
|
|
26154
|
+
);
|
|
26155
|
+
try {
|
|
26156
|
+
const apiKey = parameters27.apiKey.getValue(connection);
|
|
26157
|
+
const url = `${BASE_URL11}${path5}`;
|
|
26158
|
+
const controller = new AbortController();
|
|
26159
|
+
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS20);
|
|
26160
|
+
try {
|
|
26161
|
+
const response = await fetch(url, {
|
|
26162
|
+
method,
|
|
26163
|
+
headers: {
|
|
26164
|
+
Authorization: `Bearer ${apiKey}`,
|
|
26165
|
+
"Content-Type": "application/json"
|
|
26166
|
+
},
|
|
26167
|
+
body: body ? JSON.stringify(body) : void 0,
|
|
26168
|
+
signal: controller.signal
|
|
26169
|
+
});
|
|
26170
|
+
const data = await response.json();
|
|
26171
|
+
if (!response.ok) {
|
|
26172
|
+
const errorMessage = typeof data?.message === "string" ? data.message : typeof data?.error === "string" ? data.error : `HTTP ${response.status} ${response.statusText}`;
|
|
26173
|
+
return { success: false, error: errorMessage };
|
|
26174
|
+
}
|
|
26175
|
+
return { success: true, status: response.status, data };
|
|
26176
|
+
} finally {
|
|
26177
|
+
clearTimeout(timeout);
|
|
26178
|
+
}
|
|
26179
|
+
} catch (err) {
|
|
26180
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
26181
|
+
return { success: false, error: msg };
|
|
26182
|
+
}
|
|
26183
|
+
}
|
|
26184
|
+
});
|
|
26185
|
+
|
|
25582
26186
|
// ../connectors/src/connectors/attio/index.ts
|
|
25583
|
-
var tools27 = {};
|
|
26187
|
+
var tools27 = { request: requestTool14 };
|
|
25584
26188
|
var attioConnector = new ConnectorPlugin({
|
|
25585
26189
|
slug: "attio",
|
|
25586
26190
|
authType: null,
|
|
@@ -25589,97 +26193,275 @@ var attioConnector = new ConnectorPlugin({
|
|
|
25589
26193
|
iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/2qqx99vvXJojUM3tSrSWPX/1e7c35e13da6b365b8b475c1effe568f/attio.svg",
|
|
25590
26194
|
parameters: parameters27,
|
|
25591
26195
|
releaseFlag: { dev1: true, dev2: false, prod: false },
|
|
26196
|
+
onboarding: attioOnboarding,
|
|
25592
26197
|
systemPrompt: {
|
|
25593
|
-
en: `###
|
|
25594
|
-
|
|
26198
|
+
en: `### Tools
|
|
26199
|
+
|
|
26200
|
+
- \`attio_request\`: The only way to call the Attio REST API. Use it to query records (people, companies, deals), list objects and attributes, manage list entries, and work with notes. Authentication (Bearer token) is configured automatically. Note that querying records uses POST (not GET) with a request body containing filters.
|
|
26201
|
+
|
|
26202
|
+
### Business Logic
|
|
26203
|
+
|
|
26204
|
+
The business logic type for this connector is "typescript". Use the connector SDK in your handler. Do NOT read credentials from environment variables.
|
|
26205
|
+
|
|
26206
|
+
SDK methods (client created via \`connection(connectionId)\`):
|
|
26207
|
+
- \`client.request(path, init?)\` \u2014 low-level authenticated fetch
|
|
26208
|
+
- \`client.listObjects()\` \u2014 list all objects (people, companies, deals, etc.)
|
|
26209
|
+
- \`client.listAttributes(object)\` \u2014 list attributes for an object
|
|
26210
|
+
- \`client.queryRecords(object, options?)\` \u2014 query records with filter/sort/pagination
|
|
26211
|
+
- \`client.getRecord(object, recordId)\` \u2014 fetch a single record
|
|
26212
|
+
- \`client.queryListEntries(listId, options?)\` \u2014 query list entries with filter/sort/pagination
|
|
25595
26213
|
|
|
25596
26214
|
\`\`\`ts
|
|
26215
|
+
import type { Context } from "hono";
|
|
25597
26216
|
import { connection } from "@squadbase/vite-server/connectors/attio";
|
|
25598
26217
|
|
|
25599
|
-
const
|
|
26218
|
+
const attio = connection("<connectionId>");
|
|
25600
26219
|
|
|
25601
|
-
|
|
25602
|
-
const
|
|
25603
|
-
|
|
25604
|
-
|
|
25605
|
-
|
|
25606
|
-
|
|
25607
|
-
},
|
|
25608
|
-
|
|
25609
|
-
});
|
|
25610
|
-
|
|
26220
|
+
export default async function handler(c: Context) {
|
|
26221
|
+
const { object = "people", limit = 25 } = await c.req.json<{
|
|
26222
|
+
object?: string;
|
|
26223
|
+
limit?: number;
|
|
26224
|
+
}>();
|
|
26225
|
+
|
|
26226
|
+
const { data } = await attio.queryRecords(object, { limit });
|
|
26227
|
+
|
|
26228
|
+
return c.json({ records: data });
|
|
26229
|
+
}
|
|
25611
26230
|
\`\`\`
|
|
25612
26231
|
|
|
25613
|
-
###
|
|
26232
|
+
### Attio REST API Reference
|
|
26233
|
+
|
|
26234
|
+
- Base URL: \`https://api.attio.com/v2\`
|
|
26235
|
+
- Authentication: Bearer token (handled automatically)
|
|
26236
|
+
- Querying records uses POST with JSON body (not GET with query params)
|
|
26237
|
+
|
|
26238
|
+
#### Common Endpoints
|
|
26239
|
+
- GET \`/objects\` \u2014 List all objects
|
|
26240
|
+
- GET \`/objects/{object}/attributes\` \u2014 List attributes of an object
|
|
25614
26241
|
- POST \`/objects/{object}/records/query\` \u2014 Query records (people, companies, deals, etc.)
|
|
25615
26242
|
- GET \`/objects/{object}/records/{record_id}\` \u2014 Get a record
|
|
25616
26243
|
- POST \`/objects/{object}/records\` \u2014 Create a record
|
|
25617
26244
|
- PATCH \`/objects/{object}/records/{record_id}\` \u2014 Update a record
|
|
25618
26245
|
- DELETE \`/objects/{object}/records/{record_id}\` \u2014 Delete a record
|
|
25619
|
-
- GET \`/objects\` \u2014 List all objects
|
|
25620
|
-
- GET \`/objects/{object}/attributes\` \u2014 List attributes of an object
|
|
25621
26246
|
- POST \`/lists/{list_id}/entries/query\` \u2014 Query list entries
|
|
25622
26247
|
- POST \`/notes\` \u2014 Create a note
|
|
25623
|
-
- GET \`/notes?parent_object={object}&parent_record_id={id}\` \u2014 Get notes for a record
|
|
25624
|
-
|
|
25625
|
-
|
|
26248
|
+
- GET \`/notes?parent_object={object}&parent_record_id={id}\` \u2014 Get notes for a record
|
|
26249
|
+
|
|
26250
|
+
#### Query Body (for POST /objects/{object}/records/query)
|
|
26251
|
+
- \`filter\` \u2014 Filter conditions
|
|
26252
|
+
- \`sorts\` \u2014 Array of sort specifications
|
|
26253
|
+
- \`limit\` \u2014 Max records per page (default 25)
|
|
26254
|
+
- \`offset\` \u2014 Pagination offset`,
|
|
26255
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
26256
|
+
|
|
26257
|
+
- \`attio_request\`: Attio REST API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30EC\u30B3\u30FC\u30C9\uFF08people\u3001companies\u3001deals\uFF09\u306E\u30AF\u30A8\u30EA\u3001\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3084\u5C5E\u6027\u306E\u4E00\u89A7\u8868\u793A\u3001\u30EA\u30B9\u30C8\u30A8\u30F3\u30C8\u30EA\u306E\u7BA1\u7406\u3001\u30CE\u30FC\u30C8\u306E\u64CD\u4F5C\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08Bearer\u30C8\u30FC\u30AF\u30F3\uFF09\u306F\u81EA\u52D5\u7684\u306B\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002\u30EC\u30B3\u30FC\u30C9\u306E\u30AF\u30A8\u30EA\u306B\u306FGET\u3067\u306F\u306A\u304FPOST\u3092\u30D5\u30A3\u30EB\u30BF\u4ED8\u304D\u306E\u30EA\u30AF\u30A8\u30B9\u30C8\u30DC\u30C7\u30A3\u3067\u4F7F\u7528\u3059\u308B\u70B9\u306B\u6CE8\u610F\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
26258
|
+
|
|
26259
|
+
### Business Logic
|
|
26260
|
+
|
|
26261
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u30B3\u30CD\u30AF\u30BFSDK\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u8A8D\u8A3C\u60C5\u5831\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
26262
|
+
|
|
26263
|
+
SDK\u30E1\u30BD\u30C3\u30C9 (\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8):
|
|
26264
|
+
- \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304Dfetch
|
|
26265
|
+
- \`client.listObjects()\` \u2014 \u5168\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u4E00\u89A7\uFF08people\u3001companies\u3001deals\u306A\u3069\uFF09
|
|
26266
|
+
- \`client.listAttributes(object)\` \u2014 \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u5C5E\u6027\u4E00\u89A7
|
|
26267
|
+
- \`client.queryRecords(object, options?)\` \u2014 \u30D5\u30A3\u30EB\u30BF/\u30BD\u30FC\u30C8/\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u4ED8\u304D\u3067\u30EC\u30B3\u30FC\u30C9\u3092\u30AF\u30A8\u30EA
|
|
26268
|
+
- \`client.getRecord(object, recordId)\` \u2014 \u5358\u4E00\u30EC\u30B3\u30FC\u30C9\u3092\u53D6\u5F97
|
|
26269
|
+
- \`client.queryListEntries(listId, options?)\` \u2014 \u30D5\u30A3\u30EB\u30BF/\u30BD\u30FC\u30C8/\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u4ED8\u304D\u3067\u30EA\u30B9\u30C8\u30A8\u30F3\u30C8\u30EA\u3092\u30AF\u30A8\u30EA
|
|
25626
26270
|
|
|
25627
26271
|
\`\`\`ts
|
|
26272
|
+
import type { Context } from "hono";
|
|
25628
26273
|
import { connection } from "@squadbase/vite-server/connectors/attio";
|
|
25629
26274
|
|
|
25630
|
-
const
|
|
26275
|
+
const attio = connection("<connectionId>");
|
|
25631
26276
|
|
|
25632
|
-
|
|
25633
|
-
const
|
|
25634
|
-
|
|
25635
|
-
|
|
25636
|
-
|
|
25637
|
-
|
|
25638
|
-
},
|
|
25639
|
-
|
|
25640
|
-
});
|
|
25641
|
-
|
|
26277
|
+
export default async function handler(c: Context) {
|
|
26278
|
+
const { object = "people", limit = 25 } = await c.req.json<{
|
|
26279
|
+
object?: string;
|
|
26280
|
+
limit?: number;
|
|
26281
|
+
}>();
|
|
26282
|
+
|
|
26283
|
+
const { data } = await attio.queryRecords(object, { limit });
|
|
26284
|
+
|
|
26285
|
+
return c.json({ records: data });
|
|
26286
|
+
}
|
|
25642
26287
|
\`\`\`
|
|
25643
26288
|
|
|
25644
|
-
### \
|
|
26289
|
+
### Attio REST API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
26290
|
+
|
|
26291
|
+
- \u30D9\u30FC\u30B9URL: \`https://api.attio.com/v2\`
|
|
26292
|
+
- \u8A8D\u8A3C: Bearer\u30C8\u30FC\u30AF\u30F3\uFF08\u81EA\u52D5\u8A2D\u5B9A\uFF09
|
|
26293
|
+
- \u30EC\u30B3\u30FC\u30C9\u306E\u30AF\u30A8\u30EA\u306B\u306FGET\u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF\u3067\u306F\u306A\u304FPOST\u3067JSON\u30DC\u30C7\u30A3\u3092\u4F7F\u7528\u3057\u307E\u3059
|
|
26294
|
+
|
|
26295
|
+
#### \u4E3B\u8981\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
|
|
26296
|
+
- GET \`/objects\` \u2014 \u5168\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u4E00\u89A7
|
|
26297
|
+
- GET \`/objects/{object}/attributes\` \u2014 \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u5C5E\u6027\u4E00\u89A7
|
|
25645
26298
|
- POST \`/objects/{object}/records/query\` \u2014 \u30EC\u30B3\u30FC\u30C9\u306E\u691C\u7D22\uFF08people\u3001companies\u3001deals\u306A\u3069\uFF09
|
|
25646
26299
|
- GET \`/objects/{object}/records/{record_id}\` \u2014 \u30EC\u30B3\u30FC\u30C9\u306E\u53D6\u5F97
|
|
25647
26300
|
- POST \`/objects/{object}/records\` \u2014 \u30EC\u30B3\u30FC\u30C9\u306E\u4F5C\u6210
|
|
25648
26301
|
- PATCH \`/objects/{object}/records/{record_id}\` \u2014 \u30EC\u30B3\u30FC\u30C9\u306E\u66F4\u65B0
|
|
25649
26302
|
- DELETE \`/objects/{object}/records/{record_id}\` \u2014 \u30EC\u30B3\u30FC\u30C9\u306E\u524A\u9664
|
|
25650
|
-
- GET \`/objects\` \u2014 \u5168\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u4E00\u89A7
|
|
25651
|
-
- GET \`/objects/{object}/attributes\` \u2014 \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u5C5E\u6027\u4E00\u89A7
|
|
25652
26303
|
- POST \`/lists/{list_id}/entries/query\` \u2014 \u30EA\u30B9\u30C8\u30A8\u30F3\u30C8\u30EA\u306E\u691C\u7D22
|
|
25653
26304
|
- POST \`/notes\` \u2014 \u30CE\u30FC\u30C8\u306E\u4F5C\u6210
|
|
25654
|
-
- GET \`/notes?parent_object={object}&parent_record_id={id}\` \u2014 \u30EC\u30B3\u30FC\u30C9\u306E\u30CE\u30FC\u30C8\u3092\u53D6\u5F97
|
|
26305
|
+
- GET \`/notes?parent_object={object}&parent_record_id={id}\` \u2014 \u30EC\u30B3\u30FC\u30C9\u306E\u30CE\u30FC\u30C8\u3092\u53D6\u5F97
|
|
26306
|
+
|
|
26307
|
+
#### \u30AF\u30A8\u30EA\u30DC\u30C7\u30A3 (POST /objects/{object}/records/query)
|
|
26308
|
+
- \`filter\` \u2014 \u30D5\u30A3\u30EB\u30BF\u6761\u4EF6
|
|
26309
|
+
- \`sorts\` \u2014 \u30BD\u30FC\u30C8\u6307\u5B9A\u306E\u914D\u5217
|
|
26310
|
+
- \`limit\` \u2014 \u30DA\u30FC\u30B8\u3042\u305F\u308A\u306E\u6700\u5927\u30EC\u30B3\u30FC\u30C9\u6570\uFF08\u30C7\u30D5\u30A9\u30EB\u30C825\uFF09
|
|
26311
|
+
- \`offset\` \u2014 \u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u30AA\u30D5\u30BB\u30C3\u30C8`
|
|
25655
26312
|
},
|
|
25656
26313
|
tools: tools27
|
|
25657
26314
|
});
|
|
25658
26315
|
|
|
25659
|
-
// ../connectors/src/connectors/shopify/
|
|
25660
|
-
var
|
|
25661
|
-
|
|
25662
|
-
|
|
25663
|
-
|
|
25664
|
-
|
|
25665
|
-
|
|
25666
|
-
|
|
25667
|
-
|
|
25668
|
-
|
|
25669
|
-
|
|
25670
|
-
|
|
25671
|
-
|
|
25672
|
-
|
|
25673
|
-
|
|
25674
|
-
|
|
25675
|
-
|
|
25676
|
-
|
|
25677
|
-
|
|
25678
|
-
|
|
25679
|
-
|
|
25680
|
-
|
|
26316
|
+
// ../connectors/src/connectors/shopify/setup.ts
|
|
26317
|
+
var shopifyOnboarding = new ConnectorOnboarding({
|
|
26318
|
+
dataOverviewInstructions: {
|
|
26319
|
+
en: `1. Call shopify_request with GET /admin/api/2024-10/products.json?limit=5 to explore products structure
|
|
26320
|
+
2. Call shopify_request with GET /admin/api/2024-10/orders.json?limit=5&status=any to explore orders structure
|
|
26321
|
+
3. Explore other endpoints (customers, inventory, collections) as needed`,
|
|
26322
|
+
ja: `1. shopify_request \u3067 GET /admin/api/2024-10/products.json?limit=5 \u3092\u547C\u3073\u51FA\u3057\u3001\u5546\u54C1\u306E\u69CB\u9020\u3092\u78BA\u8A8D
|
|
26323
|
+
2. shopify_request \u3067 GET /admin/api/2024-10/orders.json?limit=5&status=any \u3092\u547C\u3073\u51FA\u3057\u3001\u6CE8\u6587\u306E\u69CB\u9020\u3092\u78BA\u8A8D
|
|
26324
|
+
3. \u5FC5\u8981\u306B\u5FDC\u3058\u3066\u4ED6\u306E\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\uFF08\u9867\u5BA2\u3001\u5728\u5EAB\u3001\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\uFF09\u3092\u63A2\u7D22`
|
|
26325
|
+
}
|
|
26326
|
+
});
|
|
26327
|
+
|
|
26328
|
+
// ../connectors/src/connectors/shopify/parameters.ts
|
|
26329
|
+
var parameters28 = {
|
|
26330
|
+
storeDomain: new ParameterDefinition({
|
|
26331
|
+
slug: "store-domain",
|
|
26332
|
+
name: "Shop Name",
|
|
26333
|
+
description: 'Your Shopify store name (the subdomain part of your .myshopify.com URL, e.g., "mystore" for mystore.myshopify.com).',
|
|
26334
|
+
envVarBaseKey: "SHOPIFY_STORE_DOMAIN",
|
|
26335
|
+
type: "text",
|
|
26336
|
+
secret: false,
|
|
26337
|
+
required: true
|
|
26338
|
+
}),
|
|
26339
|
+
clientId: new ParameterDefinition({
|
|
26340
|
+
slug: "client-id",
|
|
26341
|
+
name: "Client ID",
|
|
26342
|
+
description: "The Client ID (API Key) of your Shopify Custom App.",
|
|
26343
|
+
envVarBaseKey: "SHOPIFY_CLIENT_ID",
|
|
26344
|
+
type: "text",
|
|
26345
|
+
secret: false,
|
|
26346
|
+
required: true
|
|
26347
|
+
}),
|
|
26348
|
+
clientSecret: new ParameterDefinition({
|
|
26349
|
+
slug: "client-secret",
|
|
26350
|
+
name: "Client Secret",
|
|
26351
|
+
description: "The Client Secret (API Secret Key) of your Shopify Custom App.",
|
|
26352
|
+
envVarBaseKey: "SHOPIFY_CLIENT_SECRET",
|
|
26353
|
+
type: "text",
|
|
26354
|
+
secret: true,
|
|
26355
|
+
required: true
|
|
26356
|
+
})
|
|
26357
|
+
};
|
|
26358
|
+
|
|
26359
|
+
// ../connectors/src/connectors/shopify/tools/request.ts
|
|
26360
|
+
import { z as z32 } from "zod";
|
|
26361
|
+
var REQUEST_TIMEOUT_MS21 = 6e4;
|
|
26362
|
+
var inputSchema32 = z32.object({
|
|
26363
|
+
toolUseIntent: z32.string().optional().describe(
|
|
26364
|
+
"Brief description of what you intend to accomplish with this tool call"
|
|
26365
|
+
),
|
|
26366
|
+
connectionId: z32.string().describe("ID of the Shopify connection to use"),
|
|
26367
|
+
method: z32.enum(["GET", "POST", "PUT", "DELETE"]).describe(
|
|
26368
|
+
"HTTP method. GET for reading resources (products, orders, customers), POST for creating, PUT for updating, DELETE for removing."
|
|
26369
|
+
),
|
|
26370
|
+
path: z32.string().describe(
|
|
26371
|
+
"API path including version (e.g., '/admin/api/2024-10/products.json', '/admin/api/2024-10/orders.json?limit=50')"
|
|
26372
|
+
),
|
|
26373
|
+
body: z32.record(z32.string(), z32.unknown()).optional().describe("Request body (JSON) for POST/PUT requests")
|
|
26374
|
+
});
|
|
26375
|
+
var outputSchema32 = z32.discriminatedUnion("success", [
|
|
26376
|
+
z32.object({
|
|
26377
|
+
success: z32.literal(true),
|
|
26378
|
+
status: z32.number(),
|
|
26379
|
+
data: z32.record(z32.string(), z32.unknown())
|
|
26380
|
+
}),
|
|
26381
|
+
z32.object({
|
|
26382
|
+
success: z32.literal(false),
|
|
26383
|
+
error: z32.string()
|
|
26384
|
+
})
|
|
26385
|
+
]);
|
|
26386
|
+
var requestTool15 = new ConnectorTool({
|
|
26387
|
+
name: "request",
|
|
26388
|
+
description: `Send authenticated requests to the Shopify Admin REST API.
|
|
26389
|
+
Authentication is handled automatically using Custom App credentials (Client ID + Client Secret). An access token is obtained on each request.
|
|
26390
|
+
The store domain is resolved from the connection \u2014 only provide the path starting with /admin/api/.
|
|
26391
|
+
Use this tool for all Shopify API interactions: listing products, orders, customers, inventory, collections, and more.`,
|
|
26392
|
+
inputSchema: inputSchema32,
|
|
26393
|
+
outputSchema: outputSchema32,
|
|
26394
|
+
async execute({ connectionId, method, path: path5, body }, connections) {
|
|
26395
|
+
const connection = connections.find((c) => c.id === connectionId);
|
|
26396
|
+
if (!connection) {
|
|
26397
|
+
return {
|
|
26398
|
+
success: false,
|
|
26399
|
+
error: `Connection ${connectionId} not found`
|
|
26400
|
+
};
|
|
26401
|
+
}
|
|
26402
|
+
console.log(
|
|
26403
|
+
`[connector-request] shopify/${connection.name}: ${method} ${path5}`
|
|
26404
|
+
);
|
|
26405
|
+
try {
|
|
26406
|
+
const storeDomain = parameters28.storeDomain.getValue(connection);
|
|
26407
|
+
const clientId = parameters28.clientId.getValue(connection);
|
|
26408
|
+
const clientSecret = parameters28.clientSecret.getValue(connection);
|
|
26409
|
+
const tokenRes = await fetch(
|
|
26410
|
+
`https://${storeDomain}/admin/oauth/access_token`,
|
|
26411
|
+
{
|
|
26412
|
+
method: "POST",
|
|
26413
|
+
headers: { "Content-Type": "application/json" },
|
|
26414
|
+
body: JSON.stringify({
|
|
26415
|
+
client_id: clientId,
|
|
26416
|
+
client_secret: clientSecret
|
|
26417
|
+
})
|
|
26418
|
+
}
|
|
26419
|
+
);
|
|
26420
|
+
if (!tokenRes.ok) {
|
|
26421
|
+
const tokenBody = await tokenRes.text().catch(() => "(unreadable body)");
|
|
26422
|
+
return {
|
|
26423
|
+
success: false,
|
|
26424
|
+
error: `Failed to obtain access token: ${tokenRes.status} ${tokenRes.statusText} \u2014 ${tokenBody}`
|
|
26425
|
+
};
|
|
26426
|
+
}
|
|
26427
|
+
const tokenJson = await tokenRes.json();
|
|
26428
|
+
if (!tokenJson.access_token) {
|
|
26429
|
+
return {
|
|
26430
|
+
success: false,
|
|
26431
|
+
error: "access_token not found in token response"
|
|
26432
|
+
};
|
|
26433
|
+
}
|
|
26434
|
+
const url = `https://${storeDomain}${path5}`;
|
|
26435
|
+
const controller = new AbortController();
|
|
26436
|
+
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS21);
|
|
26437
|
+
try {
|
|
26438
|
+
const response = await fetch(url, {
|
|
26439
|
+
method,
|
|
26440
|
+
headers: {
|
|
26441
|
+
"X-Shopify-Access-Token": tokenJson.access_token,
|
|
26442
|
+
"Content-Type": "application/json"
|
|
26443
|
+
},
|
|
26444
|
+
body: body ? JSON.stringify(body) : void 0,
|
|
26445
|
+
signal: controller.signal
|
|
26446
|
+
});
|
|
26447
|
+
const data = await response.json();
|
|
26448
|
+
if (!response.ok) {
|
|
26449
|
+
const errorMessage = typeof data?.errors === "string" ? data.errors : typeof data?.error === "string" ? data.error : `HTTP ${response.status} ${response.statusText}`;
|
|
26450
|
+
return { success: false, error: errorMessage };
|
|
26451
|
+
}
|
|
26452
|
+
return { success: true, status: response.status, data };
|
|
26453
|
+
} finally {
|
|
26454
|
+
clearTimeout(timeout);
|
|
26455
|
+
}
|
|
26456
|
+
} catch (err) {
|
|
26457
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
26458
|
+
return { success: false, error: msg };
|
|
26459
|
+
}
|
|
26460
|
+
}
|
|
26461
|
+
});
|
|
26462
|
+
|
|
25681
26463
|
// ../connectors/src/connectors/shopify/index.ts
|
|
25682
|
-
var tools28 = {};
|
|
26464
|
+
var tools28 = { request: requestTool15 };
|
|
25683
26465
|
var shopifyConnector = new ConnectorPlugin({
|
|
25684
26466
|
slug: "shopify",
|
|
25685
26467
|
authType: null,
|
|
@@ -25688,89 +26470,152 @@ var shopifyConnector = new ConnectorPlugin({
|
|
|
25688
26470
|
iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/57KEjZCBskKgSxgKyU4Sm0/117d681a410f48dc36f97cdd9c0593c5/shopify-icon.svg",
|
|
25689
26471
|
parameters: parameters28,
|
|
25690
26472
|
releaseFlag: { dev1: true, dev2: false, prod: false },
|
|
26473
|
+
onboarding: shopifyOnboarding,
|
|
25691
26474
|
systemPrompt: {
|
|
25692
|
-
en: `###
|
|
25693
|
-
|
|
26475
|
+
en: `### Tools
|
|
26476
|
+
|
|
26477
|
+
- \`shopify_request\`: The only way to call the Shopify Admin REST API. Use it to query products, orders, customers, inventory, collections, and more. Authentication (Custom App Client ID + Client Secret) is configured automatically \u2014 an access token is obtained on each request. Only provide the path starting with \`/admin/api/\`. Shopify uses cursor-based pagination via the \`page_info\` query parameter (obtained from the Link header in the response).
|
|
26478
|
+
|
|
26479
|
+
### Business Logic
|
|
26480
|
+
|
|
26481
|
+
The business logic type for this connector is "typescript". Use the connector SDK in your handler. Do NOT read credentials from environment variables.
|
|
26482
|
+
|
|
26483
|
+
SDK methods (client created via \`connection(connectionId)\`):
|
|
26484
|
+
- \`client.request(path, init?)\` \u2014 low-level authenticated fetch
|
|
26485
|
+
- \`client.listProducts(options?)\` \u2014 list products with filters (status, date range) and pagination
|
|
26486
|
+
- \`client.getProduct(productId)\` \u2014 fetch a single product
|
|
26487
|
+
- \`client.listOrders(options?)\` \u2014 list orders with filters (status, financial_status, fulfillment_status, date range)
|
|
26488
|
+
- \`client.getOrder(orderId)\` \u2014 fetch a single order
|
|
26489
|
+
- \`client.listCustomers(options?)\` \u2014 list customers with filters and pagination
|
|
26490
|
+
- \`client.getCustomer(customerId)\` \u2014 fetch a single customer
|
|
26491
|
+
- \`client.listCustomCollections(options?)\` \u2014 list custom collections
|
|
26492
|
+
- \`client.listSmartCollections(options?)\` \u2014 list smart collections
|
|
25694
26493
|
|
|
25695
26494
|
\`\`\`ts
|
|
26495
|
+
import type { Context } from "hono";
|
|
25696
26496
|
import { connection } from "@squadbase/vite-server/connectors/shopify";
|
|
25697
26497
|
|
|
25698
|
-
const
|
|
26498
|
+
const shopify = connection("<connectionId>");
|
|
25699
26499
|
|
|
25700
|
-
|
|
25701
|
-
const
|
|
25702
|
-
|
|
25703
|
-
|
|
25704
|
-
|
|
25705
|
-
|
|
25706
|
-
|
|
25707
|
-
|
|
25708
|
-
|
|
25709
|
-
)
|
|
25710
|
-
|
|
26500
|
+
export default async function handler(c: Context) {
|
|
26501
|
+
const { status = "active", limit = 50 } = await c.req.json<{
|
|
26502
|
+
status?: "active" | "draft" | "archived";
|
|
26503
|
+
limit?: number;
|
|
26504
|
+
}>();
|
|
26505
|
+
|
|
26506
|
+
const { products } = await shopify.listProducts({ status, limit });
|
|
26507
|
+
|
|
26508
|
+
return c.json({
|
|
26509
|
+
products: products.map((p: Record<string, unknown>) => ({
|
|
26510
|
+
id: p.id,
|
|
26511
|
+
title: p.title,
|
|
26512
|
+
status: p.status,
|
|
26513
|
+
vendor: p.vendor,
|
|
26514
|
+
created_at: p.created_at,
|
|
26515
|
+
})),
|
|
26516
|
+
});
|
|
26517
|
+
}
|
|
25711
26518
|
\`\`\`
|
|
25712
26519
|
|
|
25713
|
-
###
|
|
25714
|
-
- GET \`/products.json\` \u2014 List products
|
|
25715
|
-
- GET \`/products/{id}.json\` \u2014 Get a product
|
|
25716
|
-
- GET \`/orders.json\` \u2014 List orders
|
|
25717
|
-
- GET \`/orders/{id}.json\` \u2014 Get an order
|
|
25718
|
-
- GET \`/customers.json\` \u2014 List customers
|
|
25719
|
-
- GET \`/customers/{id}.json\` \u2014 Get a customer
|
|
25720
|
-
- GET \`/inventory_items.json?ids={ids}\` \u2014 List inventory items
|
|
25721
|
-
- GET \`/locations.json\` \u2014 List locations
|
|
25722
|
-
- GET \`/collects.json\` \u2014 List collects
|
|
25723
|
-
- GET \`/custom_collections.json\` \u2014 List custom collections
|
|
25724
|
-
- GET \`/smart_collections.json\` \u2014 List smart collections
|
|
26520
|
+
### Shopify Admin REST API Reference
|
|
25725
26521
|
|
|
25726
|
-
|
|
26522
|
+
- Base URL: \`https://{storeDomain}/admin/api/2024-10\`
|
|
26523
|
+
- Authentication: Custom App (Client ID + Client Secret \u2192 access token obtained per request)
|
|
26524
|
+
- Pagination: cursor-based via \`page_info\` query parameter (from Link header)
|
|
26525
|
+
- Max 250 records per page
|
|
26526
|
+
|
|
26527
|
+
#### Common Endpoints
|
|
26528
|
+
- GET \`/admin/api/2024-10/products.json\` \u2014 List products
|
|
26529
|
+
- GET \`/admin/api/2024-10/products/{id}.json\` \u2014 Get a product
|
|
26530
|
+
- GET \`/admin/api/2024-10/orders.json\` \u2014 List orders
|
|
26531
|
+
- GET \`/admin/api/2024-10/orders/{id}.json\` \u2014 Get an order
|
|
26532
|
+
- GET \`/admin/api/2024-10/customers.json\` \u2014 List customers
|
|
26533
|
+
- GET \`/admin/api/2024-10/customers/{id}.json\` \u2014 Get a customer
|
|
26534
|
+
- GET \`/admin/api/2024-10/inventory_items.json?ids={ids}\` \u2014 List inventory items
|
|
26535
|
+
- GET \`/admin/api/2024-10/locations.json\` \u2014 List locations
|
|
26536
|
+
- GET \`/admin/api/2024-10/collects.json\` \u2014 List collects
|
|
26537
|
+
- GET \`/admin/api/2024-10/custom_collections.json\` \u2014 List custom collections
|
|
26538
|
+
- GET \`/admin/api/2024-10/smart_collections.json\` \u2014 List smart collections
|
|
26539
|
+
|
|
26540
|
+
#### Common Query Parameters
|
|
25727
26541
|
- \`limit\` \u2014 Max records per page (max 250)
|
|
25728
26542
|
- \`page_info\` \u2014 Cursor for pagination (from Link header)
|
|
25729
26543
|
- \`fields\` \u2014 Comma-separated list of fields to return
|
|
25730
|
-
- \`created_at_min\`, \`created_at_max\` \u2014 Date filters
|
|
25731
|
-
- \`updated_at_min\`, \`updated_at_max\` \u2014 Date filters
|
|
25732
|
-
- \`status\` \u2014 Filter by status (e.g., active, draft, archived for products)`,
|
|
25733
|
-
ja: `###
|
|
25734
|
-
|
|
26544
|
+
- \`created_at_min\`, \`created_at_max\` \u2014 Date filters (ISO 8601)
|
|
26545
|
+
- \`updated_at_min\`, \`updated_at_max\` \u2014 Date filters (ISO 8601)
|
|
26546
|
+
- \`status\` \u2014 Filter by status (e.g., active, draft, archived for products; open, closed, cancelled, any for orders)`,
|
|
26547
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
26548
|
+
|
|
26549
|
+
- \`shopify_request\`: Shopify Admin REST API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u5546\u54C1\u3001\u6CE8\u6587\u3001\u9867\u5BA2\u3001\u5728\u5EAB\u3001\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u306A\u3069\u306E\u30AF\u30A8\u30EA\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08\u30AB\u30B9\u30BF\u30E0\u30A2\u30D7\u30EA\u306E Client ID + Client Secret\uFF09\u306F\u81EA\u52D5\u7684\u306B\u8A2D\u5B9A\u3055\u308C\u3001\u30EA\u30AF\u30A8\u30B9\u30C8\u3054\u3068\u306B\u30A2\u30AF\u30BB\u30B9\u30C8\u30FC\u30AF\u30F3\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002\`/admin/api/\` \u304B\u3089\u59CB\u307E\u308B\u30D1\u30B9\u306E\u307F\u3092\u6307\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002Shopify\u306F\u30EC\u30B9\u30DD\u30F3\u30B9\u306E Link \u30D8\u30C3\u30C0\u30FC\u304B\u3089\u53D6\u5F97\u3059\u308B \`page_info\` \u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF\u306B\u3088\u308B\u30AB\u30FC\u30BD\u30EB\u30D9\u30FC\u30B9\u306E\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002
|
|
26550
|
+
|
|
26551
|
+
### Business Logic
|
|
26552
|
+
|
|
26553
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u30B3\u30CD\u30AF\u30BFSDK\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u8A8D\u8A3C\u60C5\u5831\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
26554
|
+
|
|
26555
|
+
SDK\u30E1\u30BD\u30C3\u30C9 (\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8):
|
|
26556
|
+
- \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304Dfetch
|
|
26557
|
+
- \`client.listProducts(options?)\` \u2014 \u30D5\u30A3\u30EB\u30BF\uFF08\u30B9\u30C6\u30FC\u30BF\u30B9\u3001\u65E5\u4ED8\u7BC4\u56F2\uFF09\u3068\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u4ED8\u304D\u3067\u5546\u54C1\u3092\u4E00\u89A7\u53D6\u5F97
|
|
26558
|
+
- \`client.getProduct(productId)\` \u2014 \u5358\u4E00\u5546\u54C1\u3092\u53D6\u5F97
|
|
26559
|
+
- \`client.listOrders(options?)\` \u2014 \u30D5\u30A3\u30EB\u30BF\uFF08\u30B9\u30C6\u30FC\u30BF\u30B9\u3001\u652F\u6255\u3044\u72B6\u6CC1\u3001\u914D\u9001\u72B6\u6CC1\u3001\u65E5\u4ED8\u7BC4\u56F2\uFF09\u4ED8\u304D\u3067\u6CE8\u6587\u3092\u4E00\u89A7\u53D6\u5F97
|
|
26560
|
+
- \`client.getOrder(orderId)\` \u2014 \u5358\u4E00\u6CE8\u6587\u3092\u53D6\u5F97
|
|
26561
|
+
- \`client.listCustomers(options?)\` \u2014 \u30D5\u30A3\u30EB\u30BF\u3068\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u4ED8\u304D\u3067\u9867\u5BA2\u3092\u4E00\u89A7\u53D6\u5F97
|
|
26562
|
+
- \`client.getCustomer(customerId)\` \u2014 \u5358\u4E00\u9867\u5BA2\u3092\u53D6\u5F97
|
|
26563
|
+
- \`client.listCustomCollections(options?)\` \u2014 \u30AB\u30B9\u30BF\u30E0\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u4E00\u89A7\u53D6\u5F97
|
|
26564
|
+
- \`client.listSmartCollections(options?)\` \u2014 \u30B9\u30DE\u30FC\u30C8\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u3092\u4E00\u89A7\u53D6\u5F97
|
|
25735
26565
|
|
|
25736
26566
|
\`\`\`ts
|
|
26567
|
+
import type { Context } from "hono";
|
|
25737
26568
|
import { connection } from "@squadbase/vite-server/connectors/shopify";
|
|
25738
26569
|
|
|
25739
|
-
const
|
|
26570
|
+
const shopify = connection("<connectionId>");
|
|
25740
26571
|
|
|
25741
|
-
|
|
25742
|
-
const
|
|
25743
|
-
|
|
25744
|
-
|
|
25745
|
-
|
|
25746
|
-
|
|
25747
|
-
|
|
25748
|
-
|
|
25749
|
-
|
|
25750
|
-
)
|
|
25751
|
-
|
|
26572
|
+
export default async function handler(c: Context) {
|
|
26573
|
+
const { status = "active", limit = 50 } = await c.req.json<{
|
|
26574
|
+
status?: "active" | "draft" | "archived";
|
|
26575
|
+
limit?: number;
|
|
26576
|
+
}>();
|
|
26577
|
+
|
|
26578
|
+
const { products } = await shopify.listProducts({ status, limit });
|
|
26579
|
+
|
|
26580
|
+
return c.json({
|
|
26581
|
+
products: products.map((p: Record<string, unknown>) => ({
|
|
26582
|
+
id: p.id,
|
|
26583
|
+
title: p.title,
|
|
26584
|
+
status: p.status,
|
|
26585
|
+
vendor: p.vendor,
|
|
26586
|
+
created_at: p.created_at,
|
|
26587
|
+
})),
|
|
26588
|
+
});
|
|
26589
|
+
}
|
|
25752
26590
|
\`\`\`
|
|
25753
26591
|
|
|
25754
|
-
### \
|
|
25755
|
-
|
|
25756
|
-
-
|
|
25757
|
-
-
|
|
25758
|
-
-
|
|
25759
|
-
-
|
|
25760
|
-
|
|
25761
|
-
|
|
25762
|
-
- GET \`/
|
|
25763
|
-
- GET \`/
|
|
25764
|
-
- GET \`/
|
|
25765
|
-
- GET \`/
|
|
25766
|
-
|
|
25767
|
-
|
|
26592
|
+
### Shopify Admin REST API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
26593
|
+
|
|
26594
|
+
- \u30D9\u30FC\u30B9URL: \`https://{storeDomain}/admin/api/2024-10\`
|
|
26595
|
+
- \u8A8D\u8A3C: \u30AB\u30B9\u30BF\u30E0\u30A2\u30D7\u30EA\uFF08Client ID + Client Secret \u2192 \u30EA\u30AF\u30A8\u30B9\u30C8\u3054\u3068\u306B\u30A2\u30AF\u30BB\u30B9\u30C8\u30FC\u30AF\u30F3\u53D6\u5F97\uFF09
|
|
26596
|
+
- \u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3: Link \u30D8\u30C3\u30C0\u30FC\u304B\u3089\u306E \`page_info\` \u306B\u3088\u308B\u30AB\u30FC\u30BD\u30EB\u30D9\u30FC\u30B9
|
|
26597
|
+
- \u30DA\u30FC\u30B8\u3042\u305F\u308A\u6700\u5927250\u30EC\u30B3\u30FC\u30C9
|
|
26598
|
+
|
|
26599
|
+
#### \u4E3B\u8981\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
|
|
26600
|
+
- GET \`/admin/api/2024-10/products.json\` \u2014 \u5546\u54C1\u4E00\u89A7
|
|
26601
|
+
- GET \`/admin/api/2024-10/products/{id}.json\` \u2014 \u5546\u54C1\u306E\u53D6\u5F97
|
|
26602
|
+
- GET \`/admin/api/2024-10/orders.json\` \u2014 \u6CE8\u6587\u4E00\u89A7
|
|
26603
|
+
- GET \`/admin/api/2024-10/orders/{id}.json\` \u2014 \u6CE8\u6587\u306E\u53D6\u5F97
|
|
26604
|
+
- GET \`/admin/api/2024-10/customers.json\` \u2014 \u9867\u5BA2\u4E00\u89A7
|
|
26605
|
+
- GET \`/admin/api/2024-10/customers/{id}.json\` \u2014 \u9867\u5BA2\u306E\u53D6\u5F97
|
|
26606
|
+
- GET \`/admin/api/2024-10/inventory_items.json?ids={ids}\` \u2014 \u5728\u5EAB\u30A2\u30A4\u30C6\u30E0\u4E00\u89A7
|
|
26607
|
+
- GET \`/admin/api/2024-10/locations.json\` \u2014 \u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u4E00\u89A7
|
|
26608
|
+
- GET \`/admin/api/2024-10/collects.json\` \u2014 \u30B3\u30EC\u30AF\u30C8\u4E00\u89A7
|
|
26609
|
+
- GET \`/admin/api/2024-10/custom_collections.json\` \u2014 \u30AB\u30B9\u30BF\u30E0\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u4E00\u89A7
|
|
26610
|
+
- GET \`/admin/api/2024-10/smart_collections.json\` \u2014 \u30B9\u30DE\u30FC\u30C8\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u4E00\u89A7
|
|
26611
|
+
|
|
26612
|
+
#### \u4E3B\u8981\u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF
|
|
25768
26613
|
- \`limit\` \u2014 \u30DA\u30FC\u30B8\u3042\u305F\u308A\u306E\u6700\u5927\u30EC\u30B3\u30FC\u30C9\u6570\uFF08\u6700\u5927250\uFF09
|
|
25769
26614
|
- \`page_info\` \u2014 \u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u7528\u30AB\u30FC\u30BD\u30EB\uFF08Link\u30D8\u30C3\u30C0\u30FC\u304B\u3089\u53D6\u5F97\uFF09
|
|
25770
26615
|
- \`fields\` \u2014 \u8FD4\u5374\u3059\u308B\u30D5\u30A3\u30FC\u30EB\u30C9\u306E\u30AB\u30F3\u30DE\u533A\u5207\u308A\u30EA\u30B9\u30C8
|
|
25771
|
-
- \`created_at_min\`, \`created_at_max\` \u2014 \u4F5C\u6210\u65E5\u30D5\u30A3\u30EB\u30BF\u30FC
|
|
25772
|
-
- \`updated_at_min\`, \`updated_at_max\` \u2014 \u66F4\u65B0\u65E5\u30D5\u30A3\u30EB\u30BF\u30FC
|
|
25773
|
-
- \`status\` \u2014 \u30B9\u30C6\u30FC\u30BF\u30B9\u3067\u30D5\u30A3\u30EB\u30BF\u30FC\uFF08\u4F8B: \u5546\u54C1\u306E\u5834\u5408 active, draft, archived\uFF09`
|
|
26616
|
+
- \`created_at_min\`, \`created_at_max\` \u2014 \u4F5C\u6210\u65E5\u30D5\u30A3\u30EB\u30BF\u30FC\uFF08ISO 8601\uFF09
|
|
26617
|
+
- \`updated_at_min\`, \`updated_at_max\` \u2014 \u66F4\u65B0\u65E5\u30D5\u30A3\u30EB\u30BF\u30FC\uFF08ISO 8601\uFF09
|
|
26618
|
+
- \`status\` \u2014 \u30B9\u30C6\u30FC\u30BF\u30B9\u3067\u30D5\u30A3\u30EB\u30BF\u30FC\uFF08\u4F8B: \u5546\u54C1\u306E\u5834\u5408 active, draft, archived\u3001\u6CE8\u6587\u306E\u5834\u5408 open, closed, cancelled, any\uFF09`
|
|
25774
26619
|
},
|
|
25775
26620
|
tools: tools28
|
|
25776
26621
|
});
|
|
@@ -25943,8 +26788,8 @@ const data = await res.json();
|
|
|
25943
26788
|
});
|
|
25944
26789
|
|
|
25945
26790
|
// ../connectors/src/connectors/shopify-oauth/tools/request.ts
|
|
25946
|
-
import { z as
|
|
25947
|
-
var
|
|
26791
|
+
import { z as z33 } from "zod";
|
|
26792
|
+
var REQUEST_TIMEOUT_MS22 = 6e4;
|
|
25948
26793
|
var cachedToken13 = null;
|
|
25949
26794
|
async function getProxyToken13(config) {
|
|
25950
26795
|
if (cachedToken13 && cachedToken13.expiresAt > Date.now() + 6e4) {
|
|
@@ -25976,35 +26821,35 @@ async function getProxyToken13(config) {
|
|
|
25976
26821
|
};
|
|
25977
26822
|
return data.token;
|
|
25978
26823
|
}
|
|
25979
|
-
var
|
|
25980
|
-
toolUseIntent:
|
|
26824
|
+
var inputSchema33 = z33.object({
|
|
26825
|
+
toolUseIntent: z33.string().optional().describe(
|
|
25981
26826
|
"Brief description of what you intend to accomplish with this tool call"
|
|
25982
26827
|
),
|
|
25983
|
-
connectionId:
|
|
25984
|
-
method:
|
|
25985
|
-
path:
|
|
26828
|
+
connectionId: z33.string().describe("ID of the Shopify OAuth connection to use"),
|
|
26829
|
+
method: z33.enum(["GET", "POST", "PUT", "DELETE"]).describe("HTTP method"),
|
|
26830
|
+
path: z33.string().describe(
|
|
25986
26831
|
"API path (e.g., '/admin/api/2024-10/products.json', '/admin/api/2024-10/orders.json')"
|
|
25987
26832
|
),
|
|
25988
|
-
queryParams:
|
|
25989
|
-
body:
|
|
25990
|
-
});
|
|
25991
|
-
var
|
|
25992
|
-
|
|
25993
|
-
success:
|
|
25994
|
-
status:
|
|
25995
|
-
data:
|
|
26833
|
+
queryParams: z33.record(z33.string(), z33.string()).optional().describe("Query parameters to append to the URL"),
|
|
26834
|
+
body: z33.record(z33.string(), z33.unknown()).optional().describe("Request body (JSON) for POST/PUT requests")
|
|
26835
|
+
});
|
|
26836
|
+
var outputSchema33 = z33.discriminatedUnion("success", [
|
|
26837
|
+
z33.object({
|
|
26838
|
+
success: z33.literal(true),
|
|
26839
|
+
status: z33.number(),
|
|
26840
|
+
data: z33.record(z33.string(), z33.unknown())
|
|
25996
26841
|
}),
|
|
25997
|
-
|
|
25998
|
-
success:
|
|
25999
|
-
error:
|
|
26842
|
+
z33.object({
|
|
26843
|
+
success: z33.literal(false),
|
|
26844
|
+
error: z33.string()
|
|
26000
26845
|
})
|
|
26001
26846
|
]);
|
|
26002
|
-
var
|
|
26847
|
+
var requestTool16 = new ConnectorTool({
|
|
26003
26848
|
name: "request",
|
|
26004
26849
|
description: `Send authenticated requests to the Shopify Admin API.
|
|
26005
26850
|
Authentication is handled automatically via OAuth proxy.`,
|
|
26006
|
-
inputSchema:
|
|
26007
|
-
outputSchema:
|
|
26851
|
+
inputSchema: inputSchema33,
|
|
26852
|
+
outputSchema: outputSchema33,
|
|
26008
26853
|
async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
|
|
26009
26854
|
const connection = connections.find((c) => c.id === connectionId);
|
|
26010
26855
|
if (!connection) {
|
|
@@ -26025,7 +26870,7 @@ Authentication is handled automatically via OAuth proxy.`,
|
|
|
26025
26870
|
const token = await getProxyToken13(config.oauthProxy);
|
|
26026
26871
|
const proxyUrl = `https://${config.oauthProxy.sandboxId}.${config.oauthProxy.previewBaseDomain}/_sqcore/connections/${connectionId}/request`;
|
|
26027
26872
|
const controller = new AbortController();
|
|
26028
|
-
const timeout = setTimeout(() => controller.abort(),
|
|
26873
|
+
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS22);
|
|
26029
26874
|
try {
|
|
26030
26875
|
const response = await fetch(proxyUrl, {
|
|
26031
26876
|
method: "POST",
|
|
@@ -26057,7 +26902,7 @@ Authentication is handled automatically via OAuth proxy.`,
|
|
|
26057
26902
|
});
|
|
26058
26903
|
|
|
26059
26904
|
// ../connectors/src/connectors/shopify-oauth/setup.ts
|
|
26060
|
-
var requestToolName5 = `shopify-oauth_${
|
|
26905
|
+
var requestToolName5 = `shopify-oauth_${requestTool16.name}`;
|
|
26061
26906
|
var shopifyOauthOnboarding = new ConnectorOnboarding({
|
|
26062
26907
|
connectionSetupInstructions: {
|
|
26063
26908
|
ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3067Shopify\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30BB\u30C3\u30C8\u30A2\u30C3\u30D7\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002
|
|
@@ -26101,7 +26946,7 @@ var shopifyOauthOnboarding = new ConnectorOnboarding({
|
|
|
26101
26946
|
var parameters30 = {};
|
|
26102
26947
|
|
|
26103
26948
|
// ../connectors/src/connectors/shopify-oauth/index.ts
|
|
26104
|
-
var tools30 = { request:
|
|
26949
|
+
var tools30 = { request: requestTool16 };
|
|
26105
26950
|
var shopifyOauthConnector = new ConnectorPlugin({
|
|
26106
26951
|
slug: "shopify",
|
|
26107
26952
|
authType: AUTH_TYPES.OAUTH,
|
|
@@ -26120,9 +26965,13 @@ var shopifyOauthConnector = new ConnectorPlugin({
|
|
|
26120
26965
|
]
|
|
26121
26966
|
},
|
|
26122
26967
|
systemPrompt: {
|
|
26123
|
-
en: `###
|
|
26968
|
+
en: `### Tools
|
|
26969
|
+
|
|
26970
|
+
- \`shopify-oauth_request\`: The only way to call the Shopify Admin REST API. Use it to query products, orders, customers, inventory, collections, and more. Authentication is configured automatically via OAuth proxy. Shopify uses cursor-based pagination via the \`page_info\` query parameter (obtained from the Link header in the response).
|
|
26124
26971
|
|
|
26125
|
-
###
|
|
26972
|
+
### Shopify Admin REST API Reference
|
|
26973
|
+
|
|
26974
|
+
#### Available Endpoints (API version: 2024-10)
|
|
26126
26975
|
- GET \`/admin/api/2024-10/shop.json\` \u2014 Get shop info
|
|
26127
26976
|
- GET \`/admin/api/2024-10/products.json\` \u2014 List products
|
|
26128
26977
|
- GET \`/admin/api/2024-10/products/{id}.json\` \u2014 Get a product
|
|
@@ -26163,9 +27012,13 @@ const shopify = connection("<connectionId>");
|
|
|
26163
27012
|
const res = await shopify.request("/admin/api/2024-10/products.json?limit=10");
|
|
26164
27013
|
const data = await res.json();
|
|
26165
27014
|
\`\`\``,
|
|
26166
|
-
ja: `###
|
|
27015
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
27016
|
+
|
|
27017
|
+
- \`shopify-oauth_request\`: Shopify Admin REST API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u5546\u54C1\u3001\u6CE8\u6587\u3001\u9867\u5BA2\u3001\u5728\u5EAB\u3001\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3\u306A\u3069\u306E\u30AF\u30A8\u30EA\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002OAuth\u30D7\u30ED\u30AD\u30B7\u7D4C\u7531\u3067\u8A8D\u8A3C\u306F\u81EA\u52D5\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002Shopify\u306F\u30EC\u30B9\u30DD\u30F3\u30B9\u306E Link \u30D8\u30C3\u30C0\u30FC\u304B\u3089\u53D6\u5F97\u3059\u308B \`page_info\` \u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF\u306B\u3088\u308B\u30AB\u30FC\u30BD\u30EB\u30D9\u30FC\u30B9\u306E\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002
|
|
26167
27018
|
|
|
26168
|
-
###
|
|
27019
|
+
### Shopify Admin REST API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
27020
|
+
|
|
27021
|
+
#### \u5229\u7528\u53EF\u80FD\u306A\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8 (API\u30D0\u30FC\u30B8\u30E7\u30F3: 2024-10)
|
|
26169
27022
|
- GET \`/admin/api/2024-10/shop.json\` \u2014 \u30B7\u30E7\u30C3\u30D7\u60C5\u5831\u3092\u53D6\u5F97
|
|
26170
27023
|
- GET \`/admin/api/2024-10/products.json\` \u2014 \u5546\u54C1\u4E00\u89A7\u3092\u53D6\u5F97
|
|
26171
27024
|
- GET \`/admin/api/2024-10/products/{id}.json\` \u2014 \u5546\u54C1\u3092\u53D6\u5F97
|
|
@@ -26424,9 +27277,9 @@ const data = await res.json();
|
|
|
26424
27277
|
});
|
|
26425
27278
|
|
|
26426
27279
|
// ../connectors/src/connectors/ms-teams-oauth/tools/request.ts
|
|
26427
|
-
import { z as
|
|
26428
|
-
var
|
|
26429
|
-
var
|
|
27280
|
+
import { z as z34 } from "zod";
|
|
27281
|
+
var BASE_URL12 = "https://graph.microsoft.com";
|
|
27282
|
+
var REQUEST_TIMEOUT_MS23 = 6e4;
|
|
26430
27283
|
var cachedToken14 = null;
|
|
26431
27284
|
async function getProxyToken14(config) {
|
|
26432
27285
|
if (cachedToken14 && cachedToken14.expiresAt > Date.now() + 6e4) {
|
|
@@ -26458,35 +27311,35 @@ async function getProxyToken14(config) {
|
|
|
26458
27311
|
};
|
|
26459
27312
|
return data.token;
|
|
26460
27313
|
}
|
|
26461
|
-
var
|
|
26462
|
-
toolUseIntent:
|
|
27314
|
+
var inputSchema34 = z34.object({
|
|
27315
|
+
toolUseIntent: z34.string().optional().describe(
|
|
26463
27316
|
"Brief description of what you intend to accomplish with this tool call"
|
|
26464
27317
|
),
|
|
26465
|
-
connectionId:
|
|
26466
|
-
method:
|
|
26467
|
-
path:
|
|
27318
|
+
connectionId: z34.string().describe("ID of the Microsoft Teams OAuth connection to use"),
|
|
27319
|
+
method: z34.enum(["GET", "POST", "PATCH", "DELETE"]).describe("HTTP method"),
|
|
27320
|
+
path: z34.string().describe(
|
|
26468
27321
|
"API path appended to https://graph.microsoft.com (e.g., '/v1.0/me/joinedTeams', '/v1.0/teams/{id}/channels')"
|
|
26469
27322
|
),
|
|
26470
|
-
queryParams:
|
|
26471
|
-
body:
|
|
26472
|
-
});
|
|
26473
|
-
var
|
|
26474
|
-
|
|
26475
|
-
success:
|
|
26476
|
-
status:
|
|
26477
|
-
data:
|
|
27323
|
+
queryParams: z34.record(z34.string(), z34.string()).optional().describe("Query parameters to append to the URL"),
|
|
27324
|
+
body: z34.record(z34.string(), z34.unknown()).optional().describe("Request body (JSON) for POST/PATCH requests")
|
|
27325
|
+
});
|
|
27326
|
+
var outputSchema34 = z34.discriminatedUnion("success", [
|
|
27327
|
+
z34.object({
|
|
27328
|
+
success: z34.literal(true),
|
|
27329
|
+
status: z34.number(),
|
|
27330
|
+
data: z34.record(z34.string(), z34.unknown())
|
|
26478
27331
|
}),
|
|
26479
|
-
|
|
26480
|
-
success:
|
|
26481
|
-
error:
|
|
27332
|
+
z34.object({
|
|
27333
|
+
success: z34.literal(false),
|
|
27334
|
+
error: z34.string()
|
|
26482
27335
|
})
|
|
26483
27336
|
]);
|
|
26484
|
-
var
|
|
27337
|
+
var requestTool17 = new ConnectorTool({
|
|
26485
27338
|
name: "request",
|
|
26486
27339
|
description: `Send authenticated requests to the Microsoft Graph API.
|
|
26487
27340
|
Authentication is handled automatically via OAuth proxy.`,
|
|
26488
|
-
inputSchema:
|
|
26489
|
-
outputSchema:
|
|
27341
|
+
inputSchema: inputSchema34,
|
|
27342
|
+
outputSchema: outputSchema34,
|
|
26490
27343
|
async execute({ connectionId, method, path: path5, queryParams, body }, connections, config) {
|
|
26491
27344
|
const connection = connections.find((c) => c.id === connectionId);
|
|
26492
27345
|
if (!connection) {
|
|
@@ -26499,7 +27352,7 @@ Authentication is handled automatically via OAuth proxy.`,
|
|
|
26499
27352
|
`[connector-request] ms-teams-oauth/${connection.name}: ${method} ${path5}`
|
|
26500
27353
|
);
|
|
26501
27354
|
try {
|
|
26502
|
-
let url = `${
|
|
27355
|
+
let url = `${BASE_URL12}${path5.startsWith("/") ? "" : "/"}${path5}`;
|
|
26503
27356
|
if (queryParams) {
|
|
26504
27357
|
const searchParams = new URLSearchParams(queryParams);
|
|
26505
27358
|
url += `?${searchParams.toString()}`;
|
|
@@ -26507,7 +27360,7 @@ Authentication is handled automatically via OAuth proxy.`,
|
|
|
26507
27360
|
const token = await getProxyToken14(config.oauthProxy);
|
|
26508
27361
|
const proxyUrl = `https://${config.oauthProxy.sandboxId}.${config.oauthProxy.previewBaseDomain}/_sqcore/connections/${connectionId}/request`;
|
|
26509
27362
|
const controller = new AbortController();
|
|
26510
|
-
const timeout = setTimeout(() => controller.abort(),
|
|
27363
|
+
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS23);
|
|
26511
27364
|
try {
|
|
26512
27365
|
const response = await fetch(proxyUrl, {
|
|
26513
27366
|
method: "POST",
|
|
@@ -26539,7 +27392,7 @@ Authentication is handled automatically via OAuth proxy.`,
|
|
|
26539
27392
|
});
|
|
26540
27393
|
|
|
26541
27394
|
// ../connectors/src/connectors/ms-teams-oauth/setup.ts
|
|
26542
|
-
var requestToolName6 = `microsoft-teams-oauth_${
|
|
27395
|
+
var requestToolName6 = `microsoft-teams-oauth_${requestTool17.name}`;
|
|
26543
27396
|
var msTeamsOauthOnboarding = new ConnectorOnboarding({
|
|
26544
27397
|
connectionSetupInstructions: {
|
|
26545
27398
|
ja: `\u4EE5\u4E0B\u306E\u624B\u9806\u3092\u6B63\u78BA\u306B\u5B9F\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u624B\u9806\u306B\u8A18\u8F09\u306E\u306A\u3044\u8FFD\u52A0\u306EAPI\u30EA\u30AF\u30A8\u30B9\u30C8\u306F\u4E00\u5207\u884C\u308F\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
@@ -26585,7 +27438,7 @@ var msTeamsOauthOnboarding = new ConnectorOnboarding({
|
|
|
26585
27438
|
var parameters32 = {};
|
|
26586
27439
|
|
|
26587
27440
|
// ../connectors/src/connectors/ms-teams-oauth/index.ts
|
|
26588
|
-
var tools32 = { request:
|
|
27441
|
+
var tools32 = { request: requestTool17 };
|
|
26589
27442
|
var msTeamsOauthConnector = new ConnectorPlugin({
|
|
26590
27443
|
slug: "microsoft-teams",
|
|
26591
27444
|
authType: AUTH_TYPES.OAUTH,
|
|
@@ -26719,6 +27572,257 @@ const data = await res.json();
|
|
|
26719
27572
|
}
|
|
26720
27573
|
});
|
|
26721
27574
|
|
|
27575
|
+
// ../connectors/src/connectors/hubspot/setup.ts
|
|
27576
|
+
var hubspotOnboarding2 = new ConnectorOnboarding({
|
|
27577
|
+
dataOverviewInstructions: {
|
|
27578
|
+
en: `1. Call hubspot_request with GET /crm/v3/objects/contacts?limit=5 to explore contacts structure
|
|
27579
|
+
2. Call hubspot_request with GET /crm/v3/objects/deals?limit=5 to explore deals structure
|
|
27580
|
+
3. Explore other object types (companies, tickets, etc.) as needed to understand available data`,
|
|
27581
|
+
ja: `1. hubspot_request \u3067 GET /crm/v3/objects/contacts?limit=5 \u3092\u547C\u3073\u51FA\u3057\u3001\u30B3\u30F3\u30BF\u30AF\u30C8\u306E\u69CB\u9020\u3092\u78BA\u8A8D
|
|
27582
|
+
2. hubspot_request \u3067 GET /crm/v3/objects/deals?limit=5 \u3092\u547C\u3073\u51FA\u3057\u3001\u53D6\u5F15\u306E\u69CB\u9020\u3092\u78BA\u8A8D
|
|
27583
|
+
3. \u5FC5\u8981\u306B\u5FDC\u3058\u3066\u4ED6\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u30BF\u30A4\u30D7\uFF08\u4F01\u696D\u3001\u30C1\u30B1\u30C3\u30C8\u306A\u3069\uFF09\u3092\u63A2\u7D22\u3057\u3001\u5229\u7528\u53EF\u80FD\u306A\u30C7\u30FC\u30BF\u3092\u628A\u63E1`
|
|
27584
|
+
}
|
|
27585
|
+
});
|
|
27586
|
+
|
|
27587
|
+
// ../connectors/src/connectors/hubspot/parameters.ts
|
|
27588
|
+
var parameters33 = {
|
|
27589
|
+
apiKey: new ParameterDefinition({
|
|
27590
|
+
slug: "api-key",
|
|
27591
|
+
name: "HubSpot Private App Access Token",
|
|
27592
|
+
description: "The HubSpot private app access token for authentication (starts with pat-).",
|
|
27593
|
+
envVarBaseKey: "HUBSPOT_API_KEY",
|
|
27594
|
+
type: "text",
|
|
27595
|
+
secret: true,
|
|
27596
|
+
required: true
|
|
27597
|
+
})
|
|
27598
|
+
};
|
|
27599
|
+
|
|
27600
|
+
// ../connectors/src/connectors/hubspot/tools/request.ts
|
|
27601
|
+
import { z as z35 } from "zod";
|
|
27602
|
+
var BASE_URL13 = "https://api.hubapi.com";
|
|
27603
|
+
var REQUEST_TIMEOUT_MS24 = 6e4;
|
|
27604
|
+
var inputSchema35 = z35.object({
|
|
27605
|
+
toolUseIntent: z35.string().optional().describe(
|
|
27606
|
+
"Brief description of what you intend to accomplish with this tool call"
|
|
27607
|
+
),
|
|
27608
|
+
connectionId: z35.string().describe("ID of the HubSpot connection to use"),
|
|
27609
|
+
method: z35.enum(["GET", "POST", "PATCH", "DELETE"]).describe(
|
|
27610
|
+
"HTTP method. GET for reading resources, POST for creating or searching, PATCH for updating, DELETE for removing."
|
|
27611
|
+
),
|
|
27612
|
+
path: z35.string().describe(
|
|
27613
|
+
"API path appended to https://api.hubapi.com (e.g., '/crm/v3/objects/contacts', '/crm/v3/objects/deals', '/crm/v3/objects/contacts/search')"
|
|
27614
|
+
),
|
|
27615
|
+
body: z35.record(z35.string(), z35.unknown()).optional().describe("Request body (JSON) for POST/PATCH requests")
|
|
27616
|
+
});
|
|
27617
|
+
var outputSchema35 = z35.discriminatedUnion("success", [
|
|
27618
|
+
z35.object({
|
|
27619
|
+
success: z35.literal(true),
|
|
27620
|
+
status: z35.number(),
|
|
27621
|
+
data: z35.record(z35.string(), z35.unknown())
|
|
27622
|
+
}),
|
|
27623
|
+
z35.object({
|
|
27624
|
+
success: z35.literal(false),
|
|
27625
|
+
error: z35.string()
|
|
27626
|
+
})
|
|
27627
|
+
]);
|
|
27628
|
+
var requestTool18 = new ConnectorTool({
|
|
27629
|
+
name: "request",
|
|
27630
|
+
description: `Send authenticated requests to the HubSpot API.
|
|
27631
|
+
Authentication is handled automatically using the Private App Access Token (Bearer token).
|
|
27632
|
+
Use this tool for all HubSpot API interactions: querying contacts, deals, companies, tickets, and other CRM objects.
|
|
27633
|
+
Use the search endpoint (POST /crm/v3/objects/{objectType}/search) for complex queries with filters.`,
|
|
27634
|
+
inputSchema: inputSchema35,
|
|
27635
|
+
outputSchema: outputSchema35,
|
|
27636
|
+
async execute({ connectionId, method, path: path5, body }, connections) {
|
|
27637
|
+
const connection = connections.find((c) => c.id === connectionId);
|
|
27638
|
+
if (!connection) {
|
|
27639
|
+
return {
|
|
27640
|
+
success: false,
|
|
27641
|
+
error: `Connection ${connectionId} not found`
|
|
27642
|
+
};
|
|
27643
|
+
}
|
|
27644
|
+
console.log(
|
|
27645
|
+
`[connector-request] hubspot/${connection.name}: ${method} ${path5}`
|
|
27646
|
+
);
|
|
27647
|
+
try {
|
|
27648
|
+
const apiKey = parameters33.apiKey.getValue(connection);
|
|
27649
|
+
const url = `${BASE_URL13}${path5.startsWith("/") ? "" : "/"}${path5}`;
|
|
27650
|
+
const controller = new AbortController();
|
|
27651
|
+
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS24);
|
|
27652
|
+
try {
|
|
27653
|
+
const response = await fetch(url, {
|
|
27654
|
+
method,
|
|
27655
|
+
headers: {
|
|
27656
|
+
Authorization: `Bearer ${apiKey}`,
|
|
27657
|
+
"Content-Type": "application/json"
|
|
27658
|
+
},
|
|
27659
|
+
body: body ? JSON.stringify(body) : void 0,
|
|
27660
|
+
signal: controller.signal
|
|
27661
|
+
});
|
|
27662
|
+
const data = await response.json();
|
|
27663
|
+
if (!response.ok) {
|
|
27664
|
+
const errorMessage = typeof data?.message === "string" ? data.message : typeof data?.error === "string" ? data.error : `HTTP ${response.status} ${response.statusText}`;
|
|
27665
|
+
return { success: false, error: errorMessage };
|
|
27666
|
+
}
|
|
27667
|
+
return { success: true, status: response.status, data };
|
|
27668
|
+
} finally {
|
|
27669
|
+
clearTimeout(timeout);
|
|
27670
|
+
}
|
|
27671
|
+
} catch (err) {
|
|
27672
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
27673
|
+
return { success: false, error: msg };
|
|
27674
|
+
}
|
|
27675
|
+
}
|
|
27676
|
+
});
|
|
27677
|
+
|
|
27678
|
+
// ../connectors/src/connectors/hubspot/index.ts
|
|
27679
|
+
var tools33 = { request: requestTool18 };
|
|
27680
|
+
var hubspotConnector = new ConnectorPlugin({
|
|
27681
|
+
slug: "hubspot",
|
|
27682
|
+
authType: null,
|
|
27683
|
+
name: "HubSpot",
|
|
27684
|
+
description: "Connect to HubSpot CRM for contacts, deals, companies, and marketing data using a Private App Access Token.",
|
|
27685
|
+
iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/5UcSkKkzhUMA4RsM45ynuo/43b967e36915ca0fc5d277684b204320/hubspot.svg",
|
|
27686
|
+
parameters: parameters33,
|
|
27687
|
+
releaseFlag: { dev1: true, dev2: false, prod: false },
|
|
27688
|
+
onboarding: hubspotOnboarding2,
|
|
27689
|
+
systemPrompt: {
|
|
27690
|
+
en: `### Tools
|
|
27691
|
+
|
|
27692
|
+
- \`hubspot_request\`: The only way to call the HubSpot API. Use it to query contacts, deals, companies, tickets, and other CRM objects. Authentication (Bearer token) is configured automatically. HubSpot uses cursor-based pagination with the \`after\` parameter from \`paging.next.after\` in the response. Use the search endpoint for complex queries with filters.
|
|
27693
|
+
|
|
27694
|
+
### Business Logic
|
|
27695
|
+
|
|
27696
|
+
The business logic type for this connector is "typescript". Use the connector SDK in your handler. Do NOT read credentials from environment variables.
|
|
27697
|
+
|
|
27698
|
+
SDK methods (client created via \`connection(connectionId)\`):
|
|
27699
|
+
- \`client.request(path, init?)\` \u2014 low-level authenticated fetch
|
|
27700
|
+
- \`client.listObjects(objectType, options?)\` \u2014 list CRM objects with pagination (limit, after, properties, associations)
|
|
27701
|
+
- \`client.getObject(objectType, objectId, options?)\` \u2014 fetch a single CRM object
|
|
27702
|
+
- \`client.searchObjects(objectType, options?)\` \u2014 search CRM objects with filters, sorts, and pagination
|
|
27703
|
+
|
|
27704
|
+
\`\`\`ts
|
|
27705
|
+
import type { Context } from "hono";
|
|
27706
|
+
import { connection } from "@squadbase/vite-server/connectors/hubspot";
|
|
27707
|
+
|
|
27708
|
+
const hubspot = connection("<connectionId>");
|
|
27709
|
+
|
|
27710
|
+
export default async function handler(c: Context) {
|
|
27711
|
+
const { limit = 10 } = await c.req.json<{ limit?: number }>();
|
|
27712
|
+
|
|
27713
|
+
const { results, paging } = await hubspot.listObjects("contacts", {
|
|
27714
|
+
limit,
|
|
27715
|
+
properties: ["email", "firstname", "lastname"],
|
|
27716
|
+
});
|
|
27717
|
+
|
|
27718
|
+
return c.json({
|
|
27719
|
+
contacts: results,
|
|
27720
|
+
nextPage: paging?.next?.after,
|
|
27721
|
+
});
|
|
27722
|
+
}
|
|
27723
|
+
\`\`\`
|
|
27724
|
+
|
|
27725
|
+
### HubSpot API Reference
|
|
27726
|
+
|
|
27727
|
+
- Base URL: \`https://api.hubapi.com\`
|
|
27728
|
+
- Authentication: Bearer token (handled automatically)
|
|
27729
|
+
- Pagination: cursor-based with \`after\` parameter from \`paging.next.after\`
|
|
27730
|
+
|
|
27731
|
+
#### Common Endpoints
|
|
27732
|
+
- GET \`/crm/v3/objects/contacts\` \u2014 List contacts
|
|
27733
|
+
- GET \`/crm/v3/objects/contacts/{contactId}\` \u2014 Get a contact
|
|
27734
|
+
- GET \`/crm/v3/objects/deals\` \u2014 List deals
|
|
27735
|
+
- GET \`/crm/v3/objects/deals/{dealId}\` \u2014 Get a deal
|
|
27736
|
+
- GET \`/crm/v3/objects/companies\` \u2014 List companies
|
|
27737
|
+
- GET \`/crm/v3/objects/companies/{companyId}\` \u2014 Get a company
|
|
27738
|
+
- POST \`/crm/v3/objects/contacts\` \u2014 Create a contact
|
|
27739
|
+
- POST \`/crm/v3/objects/deals\` \u2014 Create a deal
|
|
27740
|
+
- PATCH \`/crm/v3/objects/contacts/{contactId}\` \u2014 Update a contact
|
|
27741
|
+
- PATCH \`/crm/v3/objects/deals/{dealId}\` \u2014 Update a deal
|
|
27742
|
+
- POST \`/crm/v3/objects/{objectType}/search\` \u2014 Search objects
|
|
27743
|
+
|
|
27744
|
+
#### Query Parameters
|
|
27745
|
+
- \`limit\` \u2014 Number of results per page (max 100)
|
|
27746
|
+
- \`after\` \u2014 Pagination cursor
|
|
27747
|
+
- \`properties\` \u2014 Comma-separated list of properties to return
|
|
27748
|
+
- \`associations\` \u2014 Comma-separated list of association types to include
|
|
27749
|
+
|
|
27750
|
+
#### Search Body (POST /crm/v3/objects/{objectType}/search)
|
|
27751
|
+
- \`filterGroups\` \u2014 Array of filter groups with \`filters\` (propertyName, operator, value)
|
|
27752
|
+
- \`sorts\` \u2014 Array of sort specifications
|
|
27753
|
+
- \`properties\` \u2014 Array of properties to return
|
|
27754
|
+
- \`limit\` \u2014 Max results per page (max 100)
|
|
27755
|
+
- \`after\` \u2014 Pagination offset`,
|
|
27756
|
+
ja: `### \u30C4\u30FC\u30EB
|
|
27757
|
+
|
|
27758
|
+
- \`hubspot_request\`: HubSpot API\u3092\u547C\u3073\u51FA\u3059\u552F\u4E00\u306E\u624B\u6BB5\u3067\u3059\u3002\u30B3\u30F3\u30BF\u30AF\u30C8\u3001\u53D6\u5F15\u3001\u4F1A\u793E\u3001\u30C1\u30B1\u30C3\u30C8\u3001\u305D\u306E\u4ED6\u306ECRM\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u30AF\u30A8\u30EA\u306B\u4F7F\u7528\u3057\u307E\u3059\u3002\u8A8D\u8A3C\uFF08Bearer\u30C8\u30FC\u30AF\u30F3\uFF09\u306F\u81EA\u52D5\u7684\u306B\u8A2D\u5B9A\u3055\u308C\u307E\u3059\u3002HubSpot\u306F\u30EC\u30B9\u30DD\u30F3\u30B9\u306E \`paging.next.after\` \u304B\u3089\u306E \`after\` \u30D1\u30E9\u30E1\u30FC\u30BF\u306B\u3088\u308B\u30AB\u30FC\u30BD\u30EB\u30D9\u30FC\u30B9\u306E\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002\u8907\u96D1\u306A\u30AF\u30A8\u30EA\u306B\u306F\u30D5\u30A3\u30EB\u30BF\u4ED8\u304D\u306Esearch\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002
|
|
27759
|
+
|
|
27760
|
+
### Business Logic
|
|
27761
|
+
|
|
27762
|
+
\u3053\u306E\u30B3\u30CD\u30AF\u30BF\u306E\u30D3\u30B8\u30CD\u30B9\u30ED\u30B8\u30C3\u30AF\u30BF\u30A4\u30D7\u306F "typescript" \u3067\u3059\u3002\u30CF\u30F3\u30C9\u30E9\u5185\u3067\u306F\u30B3\u30CD\u30AF\u30BFSDK\u3092\u4F7F\u7528\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u74B0\u5883\u5909\u6570\u304B\u3089\u8A8D\u8A3C\u60C5\u5831\u3092\u8AAD\u307F\u53D6\u3089\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002
|
|
27763
|
+
|
|
27764
|
+
SDK\u30E1\u30BD\u30C3\u30C9 (\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8):
|
|
27765
|
+
- \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304Dfetch
|
|
27766
|
+
- \`client.listObjects(objectType, options?)\` \u2014 \u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u4ED8\u304D\u3067CRM\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u4E00\u89A7\u53D6\u5F97\uFF08limit, after, properties, associations\uFF09
|
|
27767
|
+
- \`client.getObject(objectType, objectId, options?)\` \u2014 \u5358\u4E00CRM\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u53D6\u5F97
|
|
27768
|
+
- \`client.searchObjects(objectType, options?)\` \u2014 \u30D5\u30A3\u30EB\u30BF\u3001\u30BD\u30FC\u30C8\u3001\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u4ED8\u304D\u3067CRM\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u691C\u7D22
|
|
27769
|
+
|
|
27770
|
+
\`\`\`ts
|
|
27771
|
+
import type { Context } from "hono";
|
|
27772
|
+
import { connection } from "@squadbase/vite-server/connectors/hubspot";
|
|
27773
|
+
|
|
27774
|
+
const hubspot = connection("<connectionId>");
|
|
27775
|
+
|
|
27776
|
+
export default async function handler(c: Context) {
|
|
27777
|
+
const { limit = 10 } = await c.req.json<{ limit?: number }>();
|
|
27778
|
+
|
|
27779
|
+
const { results, paging } = await hubspot.listObjects("contacts", {
|
|
27780
|
+
limit,
|
|
27781
|
+
properties: ["email", "firstname", "lastname"],
|
|
27782
|
+
});
|
|
27783
|
+
|
|
27784
|
+
return c.json({
|
|
27785
|
+
contacts: results,
|
|
27786
|
+
nextPage: paging?.next?.after,
|
|
27787
|
+
});
|
|
27788
|
+
}
|
|
27789
|
+
\`\`\`
|
|
27790
|
+
|
|
27791
|
+
### HubSpot API \u30EA\u30D5\u30A1\u30EC\u30F3\u30B9
|
|
27792
|
+
|
|
27793
|
+
- \u30D9\u30FC\u30B9URL: \`https://api.hubapi.com\`
|
|
27794
|
+
- \u8A8D\u8A3C: Bearer\u30C8\u30FC\u30AF\u30F3\uFF08\u81EA\u52D5\u8A2D\u5B9A\uFF09
|
|
27795
|
+
- \u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3: \`paging.next.after\` \u304B\u3089\u306E \`after\` \u30D1\u30E9\u30E1\u30FC\u30BF\u306B\u3088\u308B\u30AB\u30FC\u30BD\u30EB\u30D9\u30FC\u30B9
|
|
27796
|
+
|
|
27797
|
+
#### \u4E3B\u8981\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
|
|
27798
|
+
- GET \`/crm/v3/objects/contacts\` \u2014 \u30B3\u30F3\u30BF\u30AF\u30C8\u4E00\u89A7\u3092\u53D6\u5F97
|
|
27799
|
+
- GET \`/crm/v3/objects/contacts/{contactId}\` \u2014 \u30B3\u30F3\u30BF\u30AF\u30C8\u3092\u53D6\u5F97
|
|
27800
|
+
- GET \`/crm/v3/objects/deals\` \u2014 \u53D6\u5F15\u4E00\u89A7\u3092\u53D6\u5F97
|
|
27801
|
+
- GET \`/crm/v3/objects/deals/{dealId}\` \u2014 \u53D6\u5F15\u3092\u53D6\u5F97
|
|
27802
|
+
- GET \`/crm/v3/objects/companies\` \u2014 \u4F1A\u793E\u4E00\u89A7\u3092\u53D6\u5F97
|
|
27803
|
+
- GET \`/crm/v3/objects/companies/{companyId}\` \u2014 \u4F1A\u793E\u3092\u53D6\u5F97
|
|
27804
|
+
- POST \`/crm/v3/objects/contacts\` \u2014 \u30B3\u30F3\u30BF\u30AF\u30C8\u3092\u4F5C\u6210
|
|
27805
|
+
- POST \`/crm/v3/objects/deals\` \u2014 \u53D6\u5F15\u3092\u4F5C\u6210
|
|
27806
|
+
- PATCH \`/crm/v3/objects/contacts/{contactId}\` \u2014 \u30B3\u30F3\u30BF\u30AF\u30C8\u3092\u66F4\u65B0
|
|
27807
|
+
- PATCH \`/crm/v3/objects/deals/{dealId}\` \u2014 \u53D6\u5F15\u3092\u66F4\u65B0
|
|
27808
|
+
- POST \`/crm/v3/objects/{objectType}/search\` \u2014 \u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3092\u691C\u7D22
|
|
27809
|
+
|
|
27810
|
+
#### \u30AF\u30A8\u30EA\u30D1\u30E9\u30E1\u30FC\u30BF
|
|
27811
|
+
- \`limit\` \u2014 \u30DA\u30FC\u30B8\u3042\u305F\u308A\u306E\u7D50\u679C\u6570\uFF08\u6700\u5927100\uFF09
|
|
27812
|
+
- \`after\` \u2014 \u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u30AB\u30FC\u30BD\u30EB
|
|
27813
|
+
- \`properties\` \u2014 \u8FD4\u5374\u3059\u308B\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u30AB\u30F3\u30DE\u533A\u5207\u308A\u30EA\u30B9\u30C8
|
|
27814
|
+
- \`associations\` \u2014 \u542B\u3081\u308B\u30A2\u30BD\u30B7\u30A8\u30FC\u30B7\u30E7\u30F3\u30BF\u30A4\u30D7\u306E\u30AB\u30F3\u30DE\u533A\u5207\u308A\u30EA\u30B9\u30C8
|
|
27815
|
+
|
|
27816
|
+
#### \u691C\u7D22\u30DC\u30C7\u30A3 (POST /crm/v3/objects/{objectType}/search)
|
|
27817
|
+
- \`filterGroups\` \u2014 \u30D5\u30A3\u30EB\u30BF\u30B0\u30EB\u30FC\u30D7\u306E\u914D\u5217\uFF08\`filters\`: propertyName, operator, value\uFF09
|
|
27818
|
+
- \`sorts\` \u2014 \u30BD\u30FC\u30C8\u6307\u5B9A\u306E\u914D\u5217
|
|
27819
|
+
- \`properties\` \u2014 \u8FD4\u5374\u3059\u308B\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u914D\u5217
|
|
27820
|
+
- \`limit\` \u2014 \u30DA\u30FC\u30B8\u3042\u305F\u308A\u306E\u6700\u5927\u7D50\u679C\u6570\uFF08\u6700\u5927100\uFF09
|
|
27821
|
+
- \`after\` \u2014 \u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3\u30AA\u30D5\u30BB\u30C3\u30C8`
|
|
27822
|
+
},
|
|
27823
|
+
tools: tools33
|
|
27824
|
+
});
|
|
27825
|
+
|
|
26722
27826
|
// ../connectors/src/connectors/registry.ts
|
|
26723
27827
|
var plugins = {
|
|
26724
27828
|
snowflake: snowflakeConnector,
|
|
@@ -26752,7 +27856,8 @@ var plugins = {
|
|
|
26752
27856
|
slack: slackConnector,
|
|
26753
27857
|
shopifyOauth: shopifyOauthConnector,
|
|
26754
27858
|
msTeams: msTeamsConnector,
|
|
26755
|
-
msTeamsOauth: msTeamsOauthConnector
|
|
27859
|
+
msTeamsOauth: msTeamsOauthConnector,
|
|
27860
|
+
hubspot: hubspotConnector
|
|
26756
27861
|
};
|
|
26757
27862
|
var connectors = {
|
|
26758
27863
|
...plugins,
|
|
@@ -26969,62 +28074,62 @@ import { watch as fsWatch2 } from "fs";
|
|
|
26969
28074
|
import path2 from "path";
|
|
26970
28075
|
|
|
26971
28076
|
// src/types/server-logic.ts
|
|
26972
|
-
import { z as
|
|
26973
|
-
var parameterMetaSchema =
|
|
26974
|
-
name:
|
|
26975
|
-
type:
|
|
26976
|
-
description:
|
|
26977
|
-
required:
|
|
26978
|
-
default:
|
|
26979
|
-
});
|
|
26980
|
-
var serverLogicCacheConfigSchema =
|
|
26981
|
-
ttl:
|
|
26982
|
-
staleWhileRevalidate:
|
|
26983
|
-
});
|
|
26984
|
-
var serverLogicSchemaObjectSchema =
|
|
26985
|
-
() =>
|
|
26986
|
-
type:
|
|
26987
|
-
format:
|
|
26988
|
-
description:
|
|
26989
|
-
nullable:
|
|
26990
|
-
enum:
|
|
28077
|
+
import { z as z36 } from "zod";
|
|
28078
|
+
var parameterMetaSchema = z36.object({
|
|
28079
|
+
name: z36.string(),
|
|
28080
|
+
type: z36.enum(["string", "number", "boolean"]),
|
|
28081
|
+
description: z36.string(),
|
|
28082
|
+
required: z36.boolean().optional(),
|
|
28083
|
+
default: z36.union([z36.string(), z36.number(), z36.boolean()]).optional()
|
|
28084
|
+
});
|
|
28085
|
+
var serverLogicCacheConfigSchema = z36.object({
|
|
28086
|
+
ttl: z36.number(),
|
|
28087
|
+
staleWhileRevalidate: z36.boolean().optional()
|
|
28088
|
+
});
|
|
28089
|
+
var serverLogicSchemaObjectSchema = z36.lazy(
|
|
28090
|
+
() => z36.object({
|
|
28091
|
+
type: z36.enum(["string", "number", "integer", "boolean", "object", "array", "null"]).optional(),
|
|
28092
|
+
format: z36.string().optional(),
|
|
28093
|
+
description: z36.string().optional(),
|
|
28094
|
+
nullable: z36.boolean().optional(),
|
|
28095
|
+
enum: z36.array(z36.union([z36.string(), z36.number(), z36.boolean(), z36.null()])).optional(),
|
|
26991
28096
|
items: serverLogicSchemaObjectSchema.optional(),
|
|
26992
|
-
properties:
|
|
26993
|
-
required:
|
|
26994
|
-
additionalProperties:
|
|
26995
|
-
minimum:
|
|
26996
|
-
maximum:
|
|
26997
|
-
minLength:
|
|
26998
|
-
maxLength:
|
|
26999
|
-
pattern:
|
|
28097
|
+
properties: z36.record(z36.string(), serverLogicSchemaObjectSchema).optional(),
|
|
28098
|
+
required: z36.array(z36.string()).optional(),
|
|
28099
|
+
additionalProperties: z36.union([z36.boolean(), serverLogicSchemaObjectSchema]).optional(),
|
|
28100
|
+
minimum: z36.number().optional(),
|
|
28101
|
+
maximum: z36.number().optional(),
|
|
28102
|
+
minLength: z36.number().optional(),
|
|
28103
|
+
maxLength: z36.number().optional(),
|
|
28104
|
+
pattern: z36.string().optional()
|
|
27000
28105
|
})
|
|
27001
28106
|
);
|
|
27002
|
-
var serverLogicMediaTypeSchema =
|
|
28107
|
+
var serverLogicMediaTypeSchema = z36.object({
|
|
27003
28108
|
schema: serverLogicSchemaObjectSchema.optional(),
|
|
27004
|
-
example:
|
|
28109
|
+
example: z36.unknown().optional()
|
|
27005
28110
|
});
|
|
27006
|
-
var serverLogicResponseSchema =
|
|
27007
|
-
description:
|
|
27008
|
-
content:
|
|
28111
|
+
var serverLogicResponseSchema = z36.object({
|
|
28112
|
+
description: z36.string().optional(),
|
|
28113
|
+
content: z36.record(z36.string(), serverLogicMediaTypeSchema).optional()
|
|
27009
28114
|
});
|
|
27010
28115
|
var jsonBaseFields = {
|
|
27011
|
-
description:
|
|
27012
|
-
parameters:
|
|
28116
|
+
description: z36.string(),
|
|
28117
|
+
parameters: z36.array(parameterMetaSchema).optional(),
|
|
27013
28118
|
response: serverLogicResponseSchema.optional(),
|
|
27014
28119
|
cache: serverLogicCacheConfigSchema.optional()
|
|
27015
28120
|
};
|
|
27016
|
-
var jsonSqlServerLogicSchema =
|
|
28121
|
+
var jsonSqlServerLogicSchema = z36.object({
|
|
27017
28122
|
...jsonBaseFields,
|
|
27018
|
-
type:
|
|
27019
|
-
query:
|
|
27020
|
-
connectionId:
|
|
28123
|
+
type: z36.literal("sql").optional(),
|
|
28124
|
+
query: z36.string(),
|
|
28125
|
+
connectionId: z36.string()
|
|
27021
28126
|
});
|
|
27022
|
-
var jsonTypeScriptServerLogicSchema =
|
|
28127
|
+
var jsonTypeScriptServerLogicSchema = z36.object({
|
|
27023
28128
|
...jsonBaseFields,
|
|
27024
|
-
type:
|
|
27025
|
-
handlerPath:
|
|
28129
|
+
type: z36.literal("typescript"),
|
|
28130
|
+
handlerPath: z36.string()
|
|
27026
28131
|
});
|
|
27027
|
-
var anyJsonServerLogicSchema =
|
|
28132
|
+
var anyJsonServerLogicSchema = z36.union([
|
|
27028
28133
|
jsonTypeScriptServerLogicSchema,
|
|
27029
28134
|
jsonSqlServerLogicSchema
|
|
27030
28135
|
]);
|