@squadbase/vite-server 0.1.9-dev.08f5c5f → 0.1.9-dev.3841401
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 +586 -343
- package/dist/connectors/azure-sql.js +13 -2
- package/dist/connectors/clickup.js +1 -1
- package/dist/connectors/freshdesk.js +2 -2
- package/dist/connectors/freshsales.js +28 -28
- package/dist/connectors/freshservice.js +1 -1
- package/dist/connectors/github.js +1 -1
- package/dist/connectors/google-search-console-oauth.js +39 -8
- package/dist/connectors/jdbc.js +510 -98
- package/dist/connectors/monday.js +44 -4
- package/dist/connectors/oracle.js +13 -2
- package/dist/connectors/sqlserver.js +13 -2
- package/dist/connectors/supabase.js +1 -1
- package/dist/index.js +586 -343
- package/dist/main.js +586 -343
- package/dist/vite-plugin.js +586 -343
- package/package.json +1 -1
|
@@ -470,7 +470,8 @@ The business logic type for this connector is "sql".
|
|
|
470
470
|
- List user tables: \`SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA NOT IN ('sys', 'INFORMATION_SCHEMA')\`
|
|
471
471
|
- List columns: \`SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'xxx'\`
|
|
472
472
|
- Cross-database queries are not supported on Azure SQL Database (single-DB scope per connection); always reference objects within the connected database.
|
|
473
|
-
- Always bound results with \`TOP\` in queries
|
|
473
|
+
- Always bound results with \`TOP\` in queries.
|
|
474
|
+
- Row-limit compatibility: the platform's server-logic schema inference may wrap your query as \`SELECT * FROM (<inner>) AS _sq LIMIT N\`. T-SQL does not understand \`LIMIT\`, so the connector detects this exact wrapper at \`query()\` time, executes \`<inner>\` directly, and slices the first N rows in JS. You do not need to handle this \u2014 but do not author your own \`LIMIT\` clauses; use \`TOP\` / \`OFFSET ... FETCH NEXT\` in queries you write.`,
|
|
474
475
|
ja: `### \u30C4\u30FC\u30EB
|
|
475
476
|
|
|
476
477
|
- \`azure-sql_executeQuery\`: Azure SQL Database \u306B\u5BFE\u3057\u3066 T-SQL \u30AF\u30A8\u30EA\u3092\u5B9F\u884C\u3057\u3001\u884C\u30C7\u30FC\u30BF\u3092\u8FD4\u3057\u307E\u3059\u3002\`INFORMATION_SCHEMA\` \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\u3002Azure SQL \u56FA\u6709\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
|
|
@@ -486,7 +487,8 @@ The business logic type for this connector is "sql".
|
|
|
486
487
|
- \u30E6\u30FC\u30B6\u30FC\u30C6\u30FC\u30D6\u30EB\u4E00\u89A7: \`SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA NOT IN ('sys', 'INFORMATION_SCHEMA')\`
|
|
487
488
|
- \u30AB\u30E9\u30E0\u4E00\u89A7: \`SELECT COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'xxx'\`
|
|
488
489
|
- Azure SQL Database \u3067\u306F\u8907\u6570DB\u3092\u307E\u305F\u3044\u3060\u30AF\u30A8\u30EA\u306F\u3067\u304D\u307E\u305B\u3093\uFF08\u63A5\u7D9A\u5358\u4F4D\u30671DB\uFF09\u3002\u63A5\u7D9A\u4E2D\u306E\u30C7\u30FC\u30BF\u30D9\u30FC\u30B9\u5185\u306E\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306E\u307F\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
489
|
-
- \u7D50\u679C\u4EF6\u6570\u306F\u5FC5\u305A \`TOP\` \u3067\u5236\u9650\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
490
|
+
- \u7D50\u679C\u4EF6\u6570\u306F\u5FC5\u305A \`TOP\` \u3067\u5236\u9650\u3057\u3066\u304F\u3060\u3055\u3044\u3002
|
|
491
|
+
- \u884C\u6570\u5236\u9650\u306E\u4E92\u63DB\u6027: \u30D7\u30E9\u30C3\u30C8\u30D5\u30A9\u30FC\u30E0\u306E server-logic \u30B9\u30AD\u30FC\u30DE\u63A8\u8AD6\u306F\u3001\u30AF\u30A8\u30EA\u3092 \`SELECT * FROM (<inner>) AS _sq LIMIT N\` \u306E\u5F62\u3067\u30E9\u30C3\u30D7\u3057\u3066\u304F\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002T-SQL \u306B\u306F \`LIMIT\` \u304C\u7121\u3044\u305F\u3081\u3001\u30B3\u30CD\u30AF\u30BF\u306F \`query()\` \u5185\u3067\u3053\u306E\u30E9\u30C3\u30D1\u3092\u691C\u51FA\u3057\u3001\`<inner>\` \u3092\u305D\u306E\u307E\u307E\u5B9F\u884C\u3057\u3066 JS \u5074\u3067\u5148\u982D N \u884C\u306B\u5207\u308A\u8A70\u3081\u307E\u3059\u3002\u5229\u7528\u8005\u5074\u3067\u5BFE\u51E6\u3059\u308B\u5FC5\u8981\u306F\u3042\u308A\u307E\u305B\u3093\u304C\u3001\u81EA\u5206\u3067\u66F8\u304F SQL \u3067\u306F \`LIMIT\` \u3092\u4F7F\u308F\u305A \`TOP\` / \`OFFSET ... FETCH NEXT\` \u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002`
|
|
490
492
|
},
|
|
491
493
|
tools,
|
|
492
494
|
async checkConnection(params, _config) {
|
|
@@ -504,6 +506,15 @@ The business logic type for this connector is "sql".
|
|
|
504
506
|
username: params[parameters.username.slug],
|
|
505
507
|
password: params[parameters.password.slug]
|
|
506
508
|
});
|
|
509
|
+
const wrapper = sql.match(
|
|
510
|
+
/^\s*SELECT\s+\*\s+FROM\s+\(([\s\S]+)\)\s+AS\s+_sq\s+LIMIT\s+(\d+)\s*;?\s*$/i
|
|
511
|
+
);
|
|
512
|
+
if (wrapper) {
|
|
513
|
+
const inner = wrapper[1].trim();
|
|
514
|
+
const limit = Number.parseInt(wrapper[2], 10);
|
|
515
|
+
const result = await runMssqlQuery(parsed, inner, { forceEncrypt: true });
|
|
516
|
+
return { rows: result.rows.slice(0, limit) };
|
|
517
|
+
}
|
|
507
518
|
return runMssqlQuery(parsed, sql, { forceEncrypt: true });
|
|
508
519
|
}
|
|
509
520
|
});
|
|
@@ -521,7 +521,7 @@ var clickupConnector = new ConnectorPlugin({
|
|
|
521
521
|
description: "Connect to ClickUp for project management, task tracking, time tracking, and team collaboration data via Personal API Token.",
|
|
522
522
|
iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/5bzXkRjOeFJ7KoWdN55RAK/8b9270e4b09a9760912edae36d805fe4/clickup-icon.webp",
|
|
523
523
|
parameters,
|
|
524
|
-
releaseFlag: { dev1: true, dev2:
|
|
524
|
+
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
525
525
|
categories: ["productivity"],
|
|
526
526
|
onboarding: clickupOnboarding,
|
|
527
527
|
systemPrompt: {
|
|
@@ -531,8 +531,8 @@ var freshdeskConnector = new ConnectorPlugin({
|
|
|
531
531
|
description: "Connect to Freshdesk for customer support ticket, contact, and company data via API key.",
|
|
532
532
|
iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/1PSjIfQJgTYmiWriNTx4uE/26905f4120713bda0afd0b23d02a154e/freshdesk-icon.png",
|
|
533
533
|
parameters,
|
|
534
|
-
releaseFlag: { dev1: true, dev2:
|
|
535
|
-
categories: ["
|
|
534
|
+
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
535
|
+
categories: ["crm"],
|
|
536
536
|
onboarding: freshdeskOnboarding,
|
|
537
537
|
systemPrompt: {
|
|
538
538
|
en: `### Tools
|
|
@@ -121,7 +121,7 @@ function createClient(params) {
|
|
|
121
121
|
return fetch(`${baseUrl}${path2}`, { ...init, headers });
|
|
122
122
|
},
|
|
123
123
|
async listContactViews() {
|
|
124
|
-
const res = await fetch(`${baseUrl}/contacts/
|
|
124
|
+
const res = await fetch(`${baseUrl}/contacts/filters`, {
|
|
125
125
|
method: "GET",
|
|
126
126
|
headers: authHeaders()
|
|
127
127
|
});
|
|
@@ -174,7 +174,7 @@ function createClient(params) {
|
|
|
174
174
|
return await res.json();
|
|
175
175
|
},
|
|
176
176
|
async listAccountViews() {
|
|
177
|
-
const res = await fetch(`${baseUrl}/sales_accounts/
|
|
177
|
+
const res = await fetch(`${baseUrl}/sales_accounts/filters`, {
|
|
178
178
|
method: "GET",
|
|
179
179
|
headers: authHeaders()
|
|
180
180
|
});
|
|
@@ -195,7 +195,7 @@ function createClient(params) {
|
|
|
195
195
|
return await res.json();
|
|
196
196
|
},
|
|
197
197
|
async listDealViews() {
|
|
198
|
-
const res = await fetch(`${baseUrl}/deals/
|
|
198
|
+
const res = await fetch(`${baseUrl}/deals/filters`, {
|
|
199
199
|
method: "GET",
|
|
200
200
|
headers: authHeaders()
|
|
201
201
|
});
|
|
@@ -403,15 +403,15 @@ function normalizeRequestPath(path2, basePathSegment) {
|
|
|
403
403
|
var freshsalesOnboarding = new ConnectorOnboarding({
|
|
404
404
|
dataOverviewInstructions: {
|
|
405
405
|
en: `1. Call freshsales_request with GET /selector/owners to confirm credentials and discover sales team members.
|
|
406
|
-
2. Call freshsales_request with GET /contacts/
|
|
407
|
-
3. Repeat the same pattern for accounts (GET /sales_accounts/view) and deals (GET /deals/view).
|
|
406
|
+
2. Call freshsales_request with GET /contacts/filters to list available contact views (filters), then GET /contacts/view/{view_id} to fetch contacts in a view (paginated with \`page\` and \`per_page\`, default 25, max 100).
|
|
407
|
+
3. Repeat the same pattern for accounts (GET /sales_accounts/filters \u2192 /sales_accounts/view/{view_id}) and deals (GET /deals/filters \u2192 /deals/view/{view_id}).
|
|
408
408
|
4. To inspect deal pipeline metadata, call GET /selector/deal_pipelines and GET /selector/deal_stages.
|
|
409
|
-
5. Use
|
|
409
|
+
5. Use GET /lookup to find specific records by attribute (e.g., look up a contact by email).`,
|
|
410
410
|
ja: `1. freshsales_request \u3067 GET /selector/owners \u3092\u547C\u3073\u51FA\u3057\u3001\u8A8D\u8A3C\u60C5\u5831\u306E\u78BA\u8A8D\u3068\u55B6\u696D\u30E1\u30F3\u30D0\u30FC\u306E\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u307E\u3059\u3002
|
|
411
|
-
2. freshsales_request \u3067 GET /contacts/
|
|
412
|
-
3. \u540C\u3058\u30D1\u30BF\u30FC\u30F3\u3092\u53D6\u5F15\u5148\uFF08GET /sales_accounts/view\uFF09\u3001\u5546\u8AC7\uFF08GET /deals/view\uFF09\u306B\u3082\u9069\u7528\u3057\u307E\u3059\u3002
|
|
411
|
+
2. freshsales_request \u3067 GET /contacts/filters \u3092\u547C\u3073\u51FA\u3057\u3066\u30D3\u30E5\u30FC\uFF08filters\uFF09\u4E00\u89A7\u3092\u53D6\u5F97\u3057\u3001GET /contacts/view/{view_id} \u3067\u5404\u30D3\u30E5\u30FC\u306E\u9023\u7D61\u5148\u3092\u53D6\u5F97\u3057\u307E\u3059\uFF08\`page\` \u3068 \`per_page\` \u3067\u30DA\u30FC\u30B8\u30F3\u30B0\u3001\u30C7\u30D5\u30A9\u30EB\u30C825\u3001\u6700\u5927100\uFF09\u3002
|
|
412
|
+
3. \u540C\u3058\u30D1\u30BF\u30FC\u30F3\u3092\u53D6\u5F15\u5148\uFF08GET /sales_accounts/filters \u2192 /sales_accounts/view/{view_id}\uFF09\u3001\u5546\u8AC7\uFF08GET /deals/filters \u2192 /deals/view/{view_id}\uFF09\u306B\u3082\u9069\u7528\u3057\u307E\u3059\u3002
|
|
413
413
|
4. \u5546\u8AC7\u30D1\u30A4\u30D7\u30E9\u30A4\u30F3\u306E\u30E1\u30BF\u60C5\u5831\u306F GET /selector/deal_pipelines \u304A\u3088\u3073 GET /selector/deal_stages \u3067\u53D6\u5F97\u3057\u307E\u3059\u3002
|
|
414
|
-
5. \u7279\u5B9A\u30EC\u30B3\u30FC\u30C9\u3092\u5C5E\u6027\u3067\u691C\u7D22\u3059\u308B\u306B\u306F
|
|
414
|
+
5. \u7279\u5B9A\u30EC\u30B3\u30FC\u30C9\u3092\u5C5E\u6027\u3067\u691C\u7D22\u3059\u308B\u306B\u306F GET /lookup \u3092\u4F7F\u7528\u3057\u307E\u3059\uFF08\u4F8B: \u30E1\u30FC\u30EB\u3067\u9023\u7D61\u5148\u3092\u691C\u7D22\uFF09\u3002`
|
|
415
415
|
}
|
|
416
416
|
});
|
|
417
417
|
|
|
@@ -430,10 +430,10 @@ var inputSchema = z.object({
|
|
|
430
430
|
),
|
|
431
431
|
connectionId: z.string().describe("ID of the Freshsales connection to use"),
|
|
432
432
|
method: z.enum(["GET", "POST", "PUT", "DELETE"]).describe(
|
|
433
|
-
"HTTP method. GET for reading resources, POST for creating
|
|
433
|
+
"HTTP method. GET for reading resources (including /lookup), POST for creating, PUT for updating, DELETE for removing."
|
|
434
434
|
),
|
|
435
435
|
path: z.string().describe(
|
|
436
|
-
"API path (e.g., '/contacts', '/contacts/
|
|
436
|
+
"API path (e.g., '/contacts', '/contacts/filters', '/contacts/view/{view_id}', '/deals/{id}', '/lookup'). Append query parameters such as '?page=1&per_page=100'."
|
|
437
437
|
),
|
|
438
438
|
body: z.record(z.string(), z.unknown()).optional().describe(
|
|
439
439
|
'Request body (JSON). For creating a contact: { "contact": { "first_name": "...", "last_name": "...", "email": "..." } }. For lookup: { "q": "john@example.com", "f": "email", "entities": "contact" }.'
|
|
@@ -460,20 +460,20 @@ Authentication uses the \`Authorization: Token token=<API_KEY>\` header (handled
|
|
|
460
460
|
Provide the API path relative to the base URL (https://<bundle>.myfreshworks.com/crm/sales/api).
|
|
461
461
|
|
|
462
462
|
Common endpoints:
|
|
463
|
-
- GET /contacts/
|
|
463
|
+
- GET /contacts/filters \u2014 List contact views (saved filters)
|
|
464
464
|
- GET /contacts/view/{view_id} \u2014 List contacts in a view (paginated)
|
|
465
465
|
- GET /contacts/{id} \u2014 Get a contact (use ?include=owner,creator,deals for related data)
|
|
466
466
|
- POST /contacts \u2014 Create a contact (body: { "contact": { ... } })
|
|
467
467
|
- PUT /contacts/{id} \u2014 Update a contact
|
|
468
|
-
- GET /sales_accounts/
|
|
468
|
+
- GET /sales_accounts/filters \u2014 List account views
|
|
469
469
|
- GET /sales_accounts/view/{view_id} \u2014 Accounts in a view
|
|
470
|
-
- GET /deals/
|
|
470
|
+
- GET /deals/filters \u2014 Deal views
|
|
471
471
|
- GET /deals/view/{view_id} \u2014 Deals in a view
|
|
472
472
|
- GET /deals/{id} \u2014 Get a deal
|
|
473
473
|
- POST /deals \u2014 Create a deal
|
|
474
|
-
- GET /leads/
|
|
474
|
+
- GET /leads/filters \u2014 Lead views (legacy / Sales Cloud only)
|
|
475
475
|
- GET /sales_activities \u2014 List sales activities
|
|
476
|
-
-
|
|
476
|
+
- GET /lookup?q=...&f=email&entities=contact \u2014 Look up a record by attribute
|
|
477
477
|
- GET /selector/owners \u2014 Available owners (sales reps)
|
|
478
478
|
- GET /selector/deal_pipelines \u2014 Deal pipelines
|
|
479
479
|
- GET /selector/deal_stages \u2014 Deal stages
|
|
@@ -544,8 +544,8 @@ var freshsalesConnector = new ConnectorPlugin({
|
|
|
544
544
|
description: "Connect to Freshsales / Freshworks CRM for contact, account, and deal data via API key.",
|
|
545
545
|
iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/4UDOrFPM6wOFekbMVljjgl/4acc6060c3a1ff703980e6f4e76a3cd4/629b6c6f7c5cd817694c321f.png",
|
|
546
546
|
parameters,
|
|
547
|
-
releaseFlag: { dev1: true, dev2:
|
|
548
|
-
categories: ["
|
|
547
|
+
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
548
|
+
categories: ["crm"],
|
|
549
549
|
onboarding: freshsalesOnboarding,
|
|
550
550
|
systemPrompt: {
|
|
551
551
|
en: `### Tools
|
|
@@ -592,26 +592,26 @@ export default async function handler(c: Context) {
|
|
|
592
592
|
#### Resource Endpoints
|
|
593
593
|
|
|
594
594
|
**Contacts**
|
|
595
|
-
- GET \`/contacts/
|
|
595
|
+
- GET \`/contacts/filters\` \u2014 List saved views (a.k.a. filters)
|
|
596
596
|
- GET \`/contacts/view/{view_id}\` \u2014 Contacts in a view (paginated)
|
|
597
597
|
- GET \`/contacts/{id}\` \u2014 Get a contact (use \`?include=owner,creator,deals,sales_accounts\`)
|
|
598
598
|
- POST \`/contacts\` \u2014 Create a contact (body: \`{ "contact": { ... } }\`)
|
|
599
599
|
- PUT \`/contacts/{id}\` \u2014 Update a contact
|
|
600
600
|
|
|
601
601
|
**Sales accounts (companies)**
|
|
602
|
-
- GET \`/sales_accounts/
|
|
602
|
+
- GET \`/sales_accounts/filters\` \u2014 List saved views
|
|
603
603
|
- GET \`/sales_accounts/view/{view_id}\` \u2014 Accounts in a view
|
|
604
604
|
- GET \`/sales_accounts/{id}\` \u2014 Get an account
|
|
605
605
|
- POST \`/sales_accounts\` / PUT \`/sales_accounts/{id}\` \u2014 Write
|
|
606
606
|
|
|
607
607
|
**Deals**
|
|
608
|
-
- GET \`/deals/
|
|
608
|
+
- GET \`/deals/filters\` \u2014 List saved views
|
|
609
609
|
- GET \`/deals/view/{view_id}\` \u2014 Deals in a view
|
|
610
610
|
- GET \`/deals/{id}\` \u2014 Get a deal (use \`?include=owner,deal_stage,sales_account,contacts\`)
|
|
611
611
|
- POST \`/deals\` / PUT \`/deals/{id}\` \u2014 Write
|
|
612
612
|
|
|
613
613
|
**Leads (Sales Cloud only)**
|
|
614
|
-
- GET \`/leads/
|
|
614
|
+
- GET \`/leads/filters\` \u2014 Saved views
|
|
615
615
|
- GET \`/leads/view/{view_id}\` \u2014 Leads in a view
|
|
616
616
|
- GET \`/leads/{id}\` \u2014 Get a lead
|
|
617
617
|
|
|
@@ -622,7 +622,7 @@ export default async function handler(c: Context) {
|
|
|
622
622
|
- POST \`/notes\` \u2014 Create a note (body references a target contact/account/deal)
|
|
623
623
|
|
|
624
624
|
**Search & lookup**
|
|
625
|
-
-
|
|
625
|
+
- GET \`/lookup\` \u2014 Lookup a record by attribute. Query params: \`q\` (value), \`f\` (field \u2014 typically \`email\`/\`mobile_number\`), \`entities\` (\`contact\`/\`sales_account\`/\`deal\`/\`lead\`).
|
|
626
626
|
|
|
627
627
|
**Selector metadata**
|
|
628
628
|
- GET \`/selector/owners\` \u2014 Sales reps available as owners
|
|
@@ -675,26 +675,26 @@ export default async function handler(c: Context) {
|
|
|
675
675
|
#### \u30EA\u30BD\u30FC\u30B9\u30A8\u30F3\u30C9\u30DD\u30A4\u30F3\u30C8
|
|
676
676
|
|
|
677
677
|
**\u9023\u7D61\u5148\uFF08Contacts\uFF09**
|
|
678
|
-
- GET \`/contacts/
|
|
678
|
+
- GET \`/contacts/filters\` \u2014 \u4FDD\u5B58\u30D3\u30E5\u30FC\u4E00\u89A7\uFF08filters\uFF09
|
|
679
679
|
- GET \`/contacts/view/{view_id}\` \u2014 \u30D3\u30E5\u30FC\u5185\u306E\u9023\u7D61\u5148\u4E00\u89A7\uFF08\u30DA\u30FC\u30B8\u30F3\u30B0\uFF09
|
|
680
680
|
- GET \`/contacts/{id}\` \u2014 \u9023\u7D61\u5148\u306E\u53D6\u5F97\uFF08\`?include=owner,creator,deals,sales_accounts\` \u3067\u95A2\u9023\u5C55\u958B\uFF09
|
|
681
681
|
- POST \`/contacts\` \u2014 \u9023\u7D61\u5148\u306E\u4F5C\u6210\uFF08body: \`{ "contact": { ... } }\`\uFF09
|
|
682
682
|
- PUT \`/contacts/{id}\` \u2014 \u9023\u7D61\u5148\u306E\u66F4\u65B0
|
|
683
683
|
|
|
684
684
|
**\u53D6\u5F15\u5148\uFF08Sales accounts / \u4F1A\u793E\uFF09**
|
|
685
|
-
- GET \`/sales_accounts/
|
|
685
|
+
- GET \`/sales_accounts/filters\` \u2014 \u4FDD\u5B58\u30D3\u30E5\u30FC\u4E00\u89A7
|
|
686
686
|
- GET \`/sales_accounts/view/{view_id}\` \u2014 \u30D3\u30E5\u30FC\u5185\u306E\u53D6\u5F15\u5148
|
|
687
687
|
- GET \`/sales_accounts/{id}\` \u2014 \u53D6\u5F15\u5148\u306E\u53D6\u5F97
|
|
688
688
|
- POST \`/sales_accounts\` / PUT \`/sales_accounts/{id}\` \u2014 \u4F5C\u6210\u30FB\u66F4\u65B0
|
|
689
689
|
|
|
690
690
|
**\u5546\u8AC7\uFF08Deals\uFF09**
|
|
691
|
-
- GET \`/deals/
|
|
691
|
+
- GET \`/deals/filters\` \u2014 \u4FDD\u5B58\u30D3\u30E5\u30FC\u4E00\u89A7
|
|
692
692
|
- GET \`/deals/view/{view_id}\` \u2014 \u30D3\u30E5\u30FC\u5185\u306E\u5546\u8AC7
|
|
693
693
|
- GET \`/deals/{id}\` \u2014 \u5546\u8AC7\u306E\u53D6\u5F97\uFF08\`?include=owner,deal_stage,sales_account,contacts\` \u3067\u95A2\u9023\u5C55\u958B\uFF09
|
|
694
694
|
- POST \`/deals\` / PUT \`/deals/{id}\` \u2014 \u4F5C\u6210\u30FB\u66F4\u65B0
|
|
695
695
|
|
|
696
696
|
**\u30EA\u30FC\u30C9\uFF08Leads \u2014 Sales Cloud \u306E\u307F\uFF09**
|
|
697
|
-
- GET \`/leads/
|
|
697
|
+
- GET \`/leads/filters\` \u2014 \u4FDD\u5B58\u30D3\u30E5\u30FC\u4E00\u89A7
|
|
698
698
|
- GET \`/leads/view/{view_id}\` \u2014 \u30D3\u30E5\u30FC\u5185\u306E\u30EA\u30FC\u30C9
|
|
699
699
|
- GET \`/leads/{id}\` \u2014 \u30EA\u30FC\u30C9\u306E\u53D6\u5F97
|
|
700
700
|
|
|
@@ -705,7 +705,7 @@ export default async function handler(c: Context) {
|
|
|
705
705
|
- POST \`/notes\` \u2014 \u30CE\u30FC\u30C8\u306E\u4F5C\u6210\uFF08body \u3067\u9023\u7D61\u5148/\u53D6\u5F15\u5148/\u5546\u8AC7\u3092\u53C2\u7167\uFF09
|
|
706
706
|
|
|
707
707
|
**\u691C\u7D22 & \u30EB\u30C3\u30AF\u30A2\u30C3\u30D7**
|
|
708
|
-
-
|
|
708
|
+
- GET \`/lookup\` \u2014 \u5C5E\u6027\u306B\u3088\u308B\u30EC\u30B3\u30FC\u30C9\u691C\u7D22\u3002\u30AF\u30A8\u30EA: \`q\`\uFF08\u5024\uFF09\u3001\`f\`\uFF08\u30D5\u30A3\u30FC\u30EB\u30C9 \u2014 \u901A\u5E38 \`email\`/\`mobile_number\`\uFF09\u3001\`entities\`\uFF08\`contact\`/\`sales_account\`/\`deal\`/\`lead\`\uFF09\u3002
|
|
709
709
|
|
|
710
710
|
**\u30BB\u30EC\u30AF\u30BF\u30FC\u30E1\u30BF\u60C5\u5831**
|
|
711
711
|
- GET \`/selector/owners\` \u2014 \u30AA\u30FC\u30CA\u30FC\uFF08\u55B6\u696D\u62C5\u5F53\uFF09\u4E00\u89A7
|
|
@@ -501,7 +501,7 @@ var freshserviceConnector = new ConnectorPlugin({
|
|
|
501
501
|
description: "Connect to Freshservice (ITSM) for ticket, agent, asset, and ITIL workflow data via API key.",
|
|
502
502
|
iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/6Tj64HZOoIrGgQYDayBosY/3f45b29d3479726b5d245ac38d5a7036/freshservice-icon.svg",
|
|
503
503
|
parameters,
|
|
504
|
-
releaseFlag: { dev1: true, dev2:
|
|
504
|
+
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
505
505
|
categories: ["productivity"],
|
|
506
506
|
onboarding: freshserviceOnboarding,
|
|
507
507
|
systemPrompt: {
|
|
@@ -592,7 +592,7 @@ var githubConnector = new ConnectorPlugin({
|
|
|
592
592
|
description: "Connect to GitHub for repository, issue, pull request, commit, and search data via Personal Access Token (Classic or fine-grained).",
|
|
593
593
|
iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/2flOAufkhDrLKuOQqEVS3/1f9dcf145680ef77aef149709263e2d4/github-icon.svg",
|
|
594
594
|
parameters,
|
|
595
|
-
releaseFlag: { dev1: true, dev2:
|
|
595
|
+
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
596
596
|
categories: ["productivity"],
|
|
597
597
|
onboarding: githubOnboarding,
|
|
598
598
|
systemPrompt: {
|
|
@@ -85,13 +85,32 @@ function createClient(params, fetchFn = fetch) {
|
|
|
85
85
|
const data = await response.json();
|
|
86
86
|
return data.siteEntry ?? [];
|
|
87
87
|
},
|
|
88
|
-
async querySearchAnalytics(
|
|
89
|
-
|
|
88
|
+
async querySearchAnalytics(arg1, arg2) {
|
|
89
|
+
let siteUrlOverride;
|
|
90
|
+
let body;
|
|
91
|
+
if (typeof arg2 === "string") {
|
|
92
|
+
siteUrlOverride = arg2;
|
|
93
|
+
body = arg1;
|
|
94
|
+
} else {
|
|
95
|
+
const {
|
|
96
|
+
siteUrl: siteUrlField,
|
|
97
|
+
requestBody,
|
|
98
|
+
...rest
|
|
99
|
+
} = arg1 ?? {};
|
|
100
|
+
siteUrlOverride = siteUrlField;
|
|
101
|
+
body = requestBody ?? rest;
|
|
102
|
+
}
|
|
103
|
+
if (!body || !body.startDate || !body.endDate) {
|
|
104
|
+
throw new Error(
|
|
105
|
+
"google-search-console-oauth: querySearchAnalytics requires startDate and endDate. Pass them either as `{ startDate, endDate, ... }` or wrapped in `{ requestBody: { startDate, endDate, ... } }`."
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
const url = resolveSiteUrl(siteUrlOverride);
|
|
90
109
|
const path2 = `/sites/${encodeURIComponent(url)}/searchAnalytics/query`;
|
|
91
110
|
const response = await this.request(path2, {
|
|
92
111
|
method: "POST",
|
|
93
112
|
headers: { "Content-Type": "application/json" },
|
|
94
|
-
body: JSON.stringify(
|
|
113
|
+
body: JSON.stringify(body)
|
|
95
114
|
});
|
|
96
115
|
if (!response.ok) {
|
|
97
116
|
const text = await response.text();
|
|
@@ -574,7 +593,7 @@ var googleSearchConsoleOauthConnector = new ConnectorPlugin({
|
|
|
574
593
|
description: "Connect to Google Search Console for search performance, indexing, and sitemap data using OAuth.",
|
|
575
594
|
iconUrl: "https://images.ctfassets.net/9ncizv60xc5y/3rPusKosno7i1emOCmskTp/9ed092a4dc95efb74e34e83098ef3905/google-search-console-icon.webp",
|
|
576
595
|
parameters,
|
|
577
|
-
releaseFlag: { dev1: true, dev2:
|
|
596
|
+
releaseFlag: { dev1: true, dev2: true, prod: true },
|
|
578
597
|
categories: ["marketing"],
|
|
579
598
|
onboarding: googleSearchConsoleOauthOnboarding,
|
|
580
599
|
proxyPolicy: {
|
|
@@ -637,7 +656,7 @@ The business logic type for this connector is "typescript". Write handler code u
|
|
|
637
656
|
SDK surface (client created via \`connection(connectionId)\`):
|
|
638
657
|
- \`client.request(path, init?)\` \u2014 low-level authenticated fetch (\`path\` is appended to \`https://searchconsole.googleapis.com/webmasters/v3\`; \`{siteUrl}\` placeholders are auto-replaced and URL-encoded).
|
|
639
658
|
- \`client.listSites()\` \u2014 list sites accessible by the OAuth user.
|
|
640
|
-
- \`client.querySearchAnalytics(
|
|
659
|
+
- \`client.querySearchAnalytics(args)\` \u2014 query Search Analytics performance data. Pass a single object: \`{ startDate, endDate, dimensions?, rowLimit?, ... }\`. \`siteUrl\` may be set on the same object to override the connection default. The googleapis-style envelope \`{ siteUrl?, requestBody: { startDate, endDate, ... } }\` is also accepted. \`startDate\` and \`endDate\` (\`YYYY-MM-DD\`) are required.
|
|
641
660
|
- \`client.listSitemaps(siteUrl?)\` \u2014 list sitemaps submitted for a site.
|
|
642
661
|
|
|
643
662
|
If a handler test fails with \`Connection proxy is not configured\`, retry \u2014 the sandbox is still initializing. Do NOT abandon the SDK and construct OAuth proxy URLs manually.
|
|
@@ -653,7 +672,7 @@ const gsc = connection("<connectionId>");
|
|
|
653
672
|
const sites = await gsc.listSites();
|
|
654
673
|
console.log(sites.map(s => \`\${s.siteUrl} (\${s.permissionLevel})\`));
|
|
655
674
|
|
|
656
|
-
// Top queries for the last 28 days
|
|
675
|
+
// Top queries for the last 28 days \u2014 flat shape (recommended)
|
|
657
676
|
const { rows } = await gsc.querySearchAnalytics({
|
|
658
677
|
startDate: "2024-01-01",
|
|
659
678
|
endDate: "2024-01-28",
|
|
@@ -662,6 +681,12 @@ const { rows } = await gsc.querySearchAnalytics({
|
|
|
662
681
|
});
|
|
663
682
|
rows?.forEach(r => console.log(r.keys?.[0], r.clicks, r.impressions));
|
|
664
683
|
|
|
684
|
+
// Override the configured site (also accepts requestBody envelope)
|
|
685
|
+
await gsc.querySearchAnalytics({
|
|
686
|
+
siteUrl: "sc-domain:example.com",
|
|
687
|
+
requestBody: { startDate: "2024-01-01", endDate: "2024-01-28", dimensions: ["page"] },
|
|
688
|
+
});
|
|
689
|
+
|
|
665
690
|
// List sitemaps
|
|
666
691
|
const sitemaps = await gsc.listSitemaps();
|
|
667
692
|
sitemaps.forEach(s => console.log(s.path, s.lastSubmitted));
|
|
@@ -717,7 +742,7 @@ sitemaps.forEach(s => console.log(s.path, s.lastSubmitted));
|
|
|
717
742
|
SDK\uFF08\`connection(connectionId)\` \u3067\u4F5C\u6210\u3057\u305F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\uFF09:
|
|
718
743
|
- \`client.request(path, init?)\` \u2014 \u4F4E\u30EC\u30D9\u30EB\u306E\u8A8D\u8A3C\u4ED8\u304D fetch\uFF08\`path\` \u306F \`https://searchconsole.googleapis.com/webmasters/v3\` \u306B\u8FFD\u52A0\u3055\u308C\u3001\`{siteUrl}\` \u30D7\u30EC\u30FC\u30B9\u30DB\u30EB\u30C0\u306F\u81EA\u52D5\u7684\u306BURL\u30A8\u30F3\u30B3\u30FC\u30C9\u3055\u308C\u7F6E\u63DB\u3055\u308C\u307E\u3059\uFF09\u3002
|
|
719
744
|
- \`client.listSites()\` \u2014 OAuth \u30E6\u30FC\u30B6\u30FC\u304C\u30A2\u30AF\u30BB\u30B9\u53EF\u80FD\u306A\u30B5\u30A4\u30C8\u4E00\u89A7\u3092\u53D6\u5F97\u3002
|
|
720
|
-
- \`client.querySearchAnalytics(
|
|
745
|
+
- \`client.querySearchAnalytics(args)\` \u2014 \u691C\u7D22\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u30C7\u30FC\u30BF\u3092\u53D6\u5F97\u3002\u5F15\u6570\u306F\u5358\u4E00\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u3067 \`{ startDate, endDate, dimensions?, rowLimit?, ... }\` \u3092\u6E21\u3057\u307E\u3059\u3002\`siteUrl\` \u3092\u540C\u3058\u30AA\u30D6\u30B8\u30A7\u30AF\u30C8\u306B\u542B\u3081\u308B\u3068\u30B3\u30CD\u30AF\u30B7\u30E7\u30F3\u306E\u30C7\u30D5\u30A9\u30EB\u30C8\u3092\u4E0A\u66F8\u304D\u3067\u304D\u307E\u3059\u3002googleapis \u5F62\u5F0F\u306E \`{ siteUrl?, requestBody: { startDate, endDate, ... } }\` \u3082\u53D7\u3051\u4ED8\u3051\u307E\u3059\u3002\`startDate\` \u3068 \`endDate\`\uFF08\`YYYY-MM-DD\` \u5F62\u5F0F\uFF09\u306F\u5FC5\u9808\u3067\u3059\u3002
|
|
721
746
|
- \`client.listSitemaps(siteUrl?)\` \u2014 \u30B5\u30A4\u30C8\u306B\u63D0\u51FA\u6E08\u307F\u306E\u30B5\u30A4\u30C8\u30DE\u30C3\u30D7\u4E00\u89A7\u3092\u53D6\u5F97\u3002
|
|
722
747
|
|
|
723
748
|
\u30CF\u30F3\u30C9\u30E9\u306E\u30C6\u30B9\u30C8\u304C \`Connection proxy is not configured\` \u3067\u5931\u6557\u3059\u308B\u5834\u5408\u306F\u518D\u8A66\u884C\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u901A\u5E38\u306F\u30B5\u30F3\u30C9\u30DC\u30C3\u30AF\u30B9\u306E\u521D\u671F\u5316\u4E2D\u306B\u8D77\u304D\u307E\u3059\u3002SDK \u3092\u8AE6\u3081\u3066 OAuth \u30D7\u30ED\u30AD\u30B7\u306E URL \u3092\u81EA\u5206\u3067\u7D44\u307F\u7ACB\u3066\u308B\u3053\u3068\u306F **\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044**\u3002
|
|
@@ -733,7 +758,7 @@ const gsc = connection("<connectionId>");
|
|
|
733
758
|
const sites = await gsc.listSites();
|
|
734
759
|
console.log(sites.map(s => \`\${s.siteUrl} (\${s.permissionLevel})\`));
|
|
735
760
|
|
|
736
|
-
// Top queries for the last 28 days
|
|
761
|
+
// Top queries for the last 28 days \u2014 \u30D5\u30E9\u30C3\u30C8\u5F62\u5F0F\uFF08\u63A8\u5968\uFF09
|
|
737
762
|
const { rows } = await gsc.querySearchAnalytics({
|
|
738
763
|
startDate: "2024-01-01",
|
|
739
764
|
endDate: "2024-01-28",
|
|
@@ -742,6 +767,12 @@ const { rows } = await gsc.querySearchAnalytics({
|
|
|
742
767
|
});
|
|
743
768
|
rows?.forEach(r => console.log(r.keys?.[0], r.clicks, r.impressions));
|
|
744
769
|
|
|
770
|
+
// siteUrl \u3092\u4E0A\u66F8\u304D\u3059\u308B\u5834\u5408\uFF08requestBody \u30A8\u30F3\u30D9\u30ED\u30FC\u30D7\u3082\u53EF\uFF09
|
|
771
|
+
await gsc.querySearchAnalytics({
|
|
772
|
+
siteUrl: "sc-domain:example.com",
|
|
773
|
+
requestBody: { startDate: "2024-01-01", endDate: "2024-01-28", dimensions: ["page"] },
|
|
774
|
+
});
|
|
775
|
+
|
|
745
776
|
// List sitemaps
|
|
746
777
|
const sitemaps = await gsc.listSitemaps();
|
|
747
778
|
sitemaps.forEach(s => console.log(s.path, s.lastSubmitted));
|