@squadbase/vite-server 0.1.12-dev.a9ac647 → 0.1.17-dev.24af54e
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 +12374 -883
- package/dist/connectors/airtable-oauth.js +257 -46
- package/dist/connectors/airtable.js +294 -51
- package/dist/connectors/amplitude.js +297 -47
- package/dist/connectors/anthropic.js +135 -47
- package/dist/connectors/asana.js +302 -49
- package/dist/connectors/attio.js +277 -49
- package/dist/connectors/aws-billing.js +262 -46
- package/dist/connectors/azure-sql.js +396 -102
- package/dist/connectors/backlog-api-key.js +292 -47
- package/dist/connectors/clickup.js +313 -49
- package/dist/connectors/cosmosdb.js +280 -50
- package/dist/connectors/customerio.js +294 -47
- package/dist/connectors/dbt.js +315 -47
- package/dist/connectors/freshdesk.js +317 -53
- package/dist/connectors/freshsales.js +308 -52
- package/dist/connectors/freshservice.js +336 -53
- package/dist/connectors/gamma.js +302 -52
- package/dist/connectors/gemini.js +134 -47
- package/dist/connectors/github.js +361 -49
- package/dist/connectors/gmail-oauth.js +179 -7
- package/dist/connectors/gmail.js +325 -47
- package/dist/connectors/google-ads.js +263 -46
- package/dist/connectors/google-analytics-oauth.js +285 -46
- package/dist/connectors/google-analytics.js +387 -49
- package/dist/connectors/google-audit-log.js +413 -47
- package/dist/connectors/google-calendar-oauth.js +234 -46
- package/dist/connectors/google-calendar.js +334 -47
- package/dist/connectors/google-docs.js +195 -6
- package/dist/connectors/google-drive.js +237 -5
- package/dist/connectors/google-search-console-oauth.js +231 -46
- package/dist/connectors/google-sheets.js +247 -47
- package/dist/connectors/google-slides.js +180 -6
- package/dist/connectors/grafana.js +307 -49
- package/dist/connectors/hubspot-oauth.js +183 -5
- package/dist/connectors/hubspot.js +281 -49
- package/dist/connectors/influxdb.js +391 -51
- package/dist/connectors/intercom-oauth.js +185 -5
- package/dist/connectors/intercom.js +277 -49
- package/dist/connectors/jdbc.js +737 -110
- package/dist/connectors/jira-api-key.js +301 -47
- package/dist/connectors/kintone-api-token.js +256 -47
- package/dist/connectors/kintone.js +303 -47
- package/dist/connectors/linear.js +305 -49
- package/dist/connectors/linkedin-ads.js +243 -50
- package/dist/connectors/mailchimp-oauth.js +243 -46
- package/dist/connectors/mailchimp.js +295 -49
- package/dist/connectors/meta-ads-oauth.js +248 -48
- package/dist/connectors/meta-ads.js +260 -50
- package/dist/connectors/mixpanel.js +313 -47
- package/dist/connectors/monday.js +335 -49
- package/dist/connectors/mongodb.js +294 -57
- package/dist/connectors/notion-oauth.js +206 -5
- package/dist/connectors/notion.js +298 -51
- package/dist/connectors/openai.js +134 -47
- package/dist/connectors/oracle.js +414 -103
- package/dist/connectors/outlook-oauth.js +179 -5
- package/dist/connectors/powerbi-oauth.js +226 -5
- package/dist/connectors/salesforce.js +359 -49
- package/dist/connectors/semrush.js +289 -49
- package/dist/connectors/sentry.js +264 -50
- package/dist/connectors/shopify-oauth.js +162 -5
- package/dist/connectors/shopify.js +332 -47
- package/dist/connectors/sqlserver.js +390 -102
- package/dist/connectors/stripe-api-key.js +244 -46
- package/dist/connectors/stripe-oauth.js +177 -5
- package/dist/connectors/supabase.js +278 -48
- package/dist/connectors/tableau.js +389 -184
- package/dist/connectors/tiktok-ads.js +254 -48
- package/dist/connectors/wix-store.js +295 -49
- package/dist/connectors/zendesk-oauth.js +214 -5
- package/dist/connectors/zendesk.js +333 -47
- package/dist/index.d.ts +149 -1
- package/dist/index.js +13677 -1969
- package/dist/main.js +13627 -1927
- package/dist/vite-plugin.js +12391 -890
- package/package.json +1 -1
|
@@ -1,48 +1,60 @@
|
|
|
1
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
2
|
+
var __esm = (fn, res) => function __init() {
|
|
3
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
4
|
+
};
|
|
5
|
+
|
|
1
6
|
// ../connectors/src/parameter-definition.ts
|
|
2
|
-
var ParameterDefinition
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
7
|
+
var ParameterDefinition;
|
|
8
|
+
var init_parameter_definition = __esm({
|
|
9
|
+
"../connectors/src/parameter-definition.ts"() {
|
|
10
|
+
"use strict";
|
|
11
|
+
ParameterDefinition = class {
|
|
12
|
+
slug;
|
|
13
|
+
name;
|
|
14
|
+
description;
|
|
15
|
+
envVarBaseKey;
|
|
16
|
+
type;
|
|
17
|
+
secret;
|
|
18
|
+
required;
|
|
19
|
+
constructor(config) {
|
|
20
|
+
this.slug = config.slug;
|
|
21
|
+
this.name = config.name;
|
|
22
|
+
this.description = config.description;
|
|
23
|
+
this.envVarBaseKey = config.envVarBaseKey;
|
|
24
|
+
this.type = config.type;
|
|
25
|
+
this.secret = config.secret;
|
|
26
|
+
this.required = config.required;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Get the parameter value from a ConnectorConnectionObject.
|
|
30
|
+
*/
|
|
31
|
+
getValue(connection2) {
|
|
32
|
+
const param = connection2.parameters.find(
|
|
33
|
+
(p) => p.parameterSlug === this.slug
|
|
34
|
+
);
|
|
35
|
+
if (!param || param.value == null) {
|
|
36
|
+
throw new Error(
|
|
37
|
+
`Parameter "${this.slug}" not found or has no value in connection "${connection2.id}"`
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
return param.value;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Try to get the parameter value. Returns undefined if not found (for optional params).
|
|
44
|
+
*/
|
|
45
|
+
tryGetValue(connection2) {
|
|
46
|
+
const param = connection2.parameters.find(
|
|
47
|
+
(p) => p.parameterSlug === this.slug
|
|
48
|
+
);
|
|
49
|
+
if (!param || param.value == null) return void 0;
|
|
50
|
+
return param.value;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
42
53
|
}
|
|
43
|
-
};
|
|
54
|
+
});
|
|
44
55
|
|
|
45
56
|
// ../connectors/src/connectors/wix-store/parameters.ts
|
|
57
|
+
init_parameter_definition();
|
|
46
58
|
var parameters = {
|
|
47
59
|
accountId: new ParameterDefinition({
|
|
48
60
|
slug: "account-id",
|
|
@@ -258,6 +270,28 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
258
270
|
tools;
|
|
259
271
|
query;
|
|
260
272
|
checkConnection;
|
|
273
|
+
/**
|
|
274
|
+
* SQPD-1212: Logic-based, rule-driven connection setup. Connectors that
|
|
275
|
+
* implement this expose a step-by-step exploration flow (database/schema/
|
|
276
|
+
* table/etc. discovery) that the dashboard backend drives via the
|
|
277
|
+
* `/connections/:connectionId/setup` endpoint. Implement by delegating to
|
|
278
|
+
* `runSetupFlow` from `setup-flow.ts`.
|
|
279
|
+
*/
|
|
280
|
+
setup;
|
|
281
|
+
/**
|
|
282
|
+
* Opt-out of the default "verify before save" behavior on connection
|
|
283
|
+
* creation. The backend invokes `checkConnection` synchronously while
|
|
284
|
+
* creating the connection and aborts (no row inserted) if it fails — this
|
|
285
|
+
* flag disables that for connectors where the check cannot succeed pre-save:
|
|
286
|
+
*
|
|
287
|
+
* - `squadbase-db` populates `connection-url` only after Neon provisioning
|
|
288
|
+
* - OAuth connectors require an OAuth-aware proxyFetch keyed by the
|
|
289
|
+
* connectionId, which doesn't exist until the row is saved
|
|
290
|
+
*
|
|
291
|
+
* Exceptions are the explicit position; new credential-input connectors get
|
|
292
|
+
* the default verify-on-create behavior without opt-in.
|
|
293
|
+
*/
|
|
294
|
+
skipConnectionCheckOnCreate;
|
|
261
295
|
constructor(config) {
|
|
262
296
|
this.slug = config.slug;
|
|
263
297
|
this.authType = config.authType;
|
|
@@ -274,6 +308,8 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
274
308
|
this.tools = config.tools;
|
|
275
309
|
this.query = config.query;
|
|
276
310
|
this.checkConnection = config.checkConnection;
|
|
311
|
+
this.setup = config.setup;
|
|
312
|
+
this.skipConnectionCheckOnCreate = config.skipConnectionCheckOnCreate;
|
|
277
313
|
}
|
|
278
314
|
get connectorKey() {
|
|
279
315
|
return _ConnectorPlugin.deriveKey(this.slug, this.authType);
|
|
@@ -338,6 +374,46 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
338
374
|
}
|
|
339
375
|
};
|
|
340
376
|
|
|
377
|
+
// ../connectors/src/setup-flow.ts
|
|
378
|
+
async function runSetupFlow(flow, params, ctx, config) {
|
|
379
|
+
const runtime = {
|
|
380
|
+
params,
|
|
381
|
+
language: ctx.language,
|
|
382
|
+
config
|
|
383
|
+
};
|
|
384
|
+
let state = flow.initialState();
|
|
385
|
+
let answerIdx = 0;
|
|
386
|
+
for (const step of flow.steps) {
|
|
387
|
+
const ans = ctx.answers[answerIdx];
|
|
388
|
+
if (ans && ans.questionSlug === step.slug) {
|
|
389
|
+
state = step.applyAnswer(state, ans.answer);
|
|
390
|
+
answerIdx += 1;
|
|
391
|
+
continue;
|
|
392
|
+
}
|
|
393
|
+
if (step.type === "text") {
|
|
394
|
+
return {
|
|
395
|
+
type: "nextQuestion",
|
|
396
|
+
questionSlug: step.slug,
|
|
397
|
+
question: step.question[ctx.language],
|
|
398
|
+
questionType: "text"
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
const options = step.fetchOptions ? await step.fetchOptions(state, runtime) : [];
|
|
402
|
+
if (options.length === 0) {
|
|
403
|
+
continue;
|
|
404
|
+
}
|
|
405
|
+
return {
|
|
406
|
+
type: "nextQuestion",
|
|
407
|
+
questionSlug: step.slug,
|
|
408
|
+
question: step.question[ctx.language],
|
|
409
|
+
questionType: step.type,
|
|
410
|
+
options
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
const dataInvestigationResult = await flow.finalize(state, runtime);
|
|
414
|
+
return { type: "fulfilled", dataInvestigationResult };
|
|
415
|
+
}
|
|
416
|
+
|
|
341
417
|
// ../connectors/src/auth-types.ts
|
|
342
418
|
var AUTH_TYPES = {
|
|
343
419
|
OAUTH: "oauth",
|
|
@@ -360,9 +436,120 @@ var wixStoreOnboarding = new ConnectorOnboarding({
|
|
|
360
436
|
}
|
|
361
437
|
});
|
|
362
438
|
|
|
439
|
+
// ../connectors/src/connectors/wix-store/utils.ts
|
|
440
|
+
var BASE_URL = "https://www.wixapis.com";
|
|
441
|
+
async function apiFetch(params, path2, init) {
|
|
442
|
+
const apiKey = params[parameters.apiKey.slug];
|
|
443
|
+
const siteId = params[parameters.siteId.slug];
|
|
444
|
+
if (!apiKey || !siteId) {
|
|
445
|
+
throw new Error(
|
|
446
|
+
"wix-store: missing required parameters: api-key and site-id"
|
|
447
|
+
);
|
|
448
|
+
}
|
|
449
|
+
const url = `${BASE_URL}${path2.startsWith("/") ? "" : "/"}${path2}`;
|
|
450
|
+
const headers = new Headers(init?.headers);
|
|
451
|
+
headers.set("Authorization", apiKey);
|
|
452
|
+
headers.set("wix-site-id", siteId);
|
|
453
|
+
if (!headers.has("Content-Type")) {
|
|
454
|
+
headers.set("Content-Type", "application/json");
|
|
455
|
+
}
|
|
456
|
+
return fetch(url, { ...init, headers });
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
// ../connectors/src/connectors/wix-store/setup-flow.ts
|
|
460
|
+
var WIX_STORE_SETUP_MAX_ENTITIES = 10;
|
|
461
|
+
var ENTITY_LABELS = {
|
|
462
|
+
products: { en: "Products", ja: "Products (\u5546\u54C1)" },
|
|
463
|
+
orders: { en: "Orders", ja: "Orders (\u6CE8\u6587)" },
|
|
464
|
+
collections: { en: "Collections", ja: "Collections (\u30B3\u30EC\u30AF\u30B7\u30E7\u30F3)" },
|
|
465
|
+
inventory: { en: "Inventory items", ja: "Inventory items (\u5728\u5EAB)" }
|
|
466
|
+
};
|
|
467
|
+
var ENTITY_VALUES = [
|
|
468
|
+
"products",
|
|
469
|
+
"orders",
|
|
470
|
+
"collections",
|
|
471
|
+
"inventory"
|
|
472
|
+
];
|
|
473
|
+
var QUERY_SPECS = {
|
|
474
|
+
products: {
|
|
475
|
+
path: "/stores/v1/products/query",
|
|
476
|
+
body: { query: { paging: { limit: 1, offset: 0 } } },
|
|
477
|
+
totalField: "totalResults"
|
|
478
|
+
},
|
|
479
|
+
orders: {
|
|
480
|
+
path: "/ecom/v1/orders/search",
|
|
481
|
+
body: { search: { cursorPaging: { limit: 1 } } },
|
|
482
|
+
totalField: "pagingMetadata.total"
|
|
483
|
+
},
|
|
484
|
+
collections: {
|
|
485
|
+
path: "/stores/v1/collections/query",
|
|
486
|
+
body: { query: { paging: { limit: 1 } } },
|
|
487
|
+
totalField: "totalResults"
|
|
488
|
+
},
|
|
489
|
+
inventory: {
|
|
490
|
+
path: "/stores/v2/inventoryItems/query",
|
|
491
|
+
body: { query: { paging: { limit: 1 } } },
|
|
492
|
+
totalField: "totalResults"
|
|
493
|
+
}
|
|
494
|
+
};
|
|
495
|
+
function lookupNumeric(data, path2) {
|
|
496
|
+
const parts = path2.split(".");
|
|
497
|
+
let cur = data;
|
|
498
|
+
for (const p of parts) {
|
|
499
|
+
if (!cur || typeof cur !== "object") return void 0;
|
|
500
|
+
cur = cur[p];
|
|
501
|
+
}
|
|
502
|
+
return typeof cur === "number" ? cur : void 0;
|
|
503
|
+
}
|
|
504
|
+
var wixStoreSetupFlow = {
|
|
505
|
+
initialState: () => ({}),
|
|
506
|
+
steps: [
|
|
507
|
+
{
|
|
508
|
+
slug: "entities",
|
|
509
|
+
type: "multiSelect",
|
|
510
|
+
question: {
|
|
511
|
+
ja: "\u5BFE\u8C61\u306E\u30A8\u30F3\u30C6\u30A3\u30C6\u30A3\u3092\u9078\u3093\u3067\u304F\u3060\u3055\u3044\uFF08\u8907\u6570\u9078\u629E\u53EF\uFF09",
|
|
512
|
+
en: "Select target entities (multi-select allowed)"
|
|
513
|
+
},
|
|
514
|
+
async fetchOptions(_state, rt) {
|
|
515
|
+
return ENTITY_VALUES.map((value) => ({
|
|
516
|
+
value,
|
|
517
|
+
label: ENTITY_LABELS[value][rt.language]
|
|
518
|
+
}));
|
|
519
|
+
},
|
|
520
|
+
applyAnswer: (state, answer) => ({ ...state, entities: answer })
|
|
521
|
+
}
|
|
522
|
+
],
|
|
523
|
+
async finalize(state, rt) {
|
|
524
|
+
if (!state.entities) {
|
|
525
|
+
throw new Error("Wix Store setup: incomplete state on finalize");
|
|
526
|
+
}
|
|
527
|
+
const selected = state.entities.filter((e) => ENTITY_VALUES.includes(e)).slice(0, WIX_STORE_SETUP_MAX_ENTITIES);
|
|
528
|
+
const sections = ["## Wix Store", ""];
|
|
529
|
+
for (const entity of selected) {
|
|
530
|
+
const spec = QUERY_SPECS[entity];
|
|
531
|
+
let count = "available";
|
|
532
|
+
const res = await apiFetch(rt.params, spec.path, {
|
|
533
|
+
method: "POST",
|
|
534
|
+
body: JSON.stringify(spec.body)
|
|
535
|
+
});
|
|
536
|
+
if (res.ok) {
|
|
537
|
+
const data = await res.json();
|
|
538
|
+
const total = lookupNumeric(data, spec.totalField);
|
|
539
|
+
if (typeof total === "number") count = String(total);
|
|
540
|
+
} else {
|
|
541
|
+
count = "unavailable";
|
|
542
|
+
}
|
|
543
|
+
sections.push(`### ${ENTITY_LABELS[entity].en}`, "");
|
|
544
|
+
sections.push(`Count: ${count}`, "");
|
|
545
|
+
}
|
|
546
|
+
return sections.join("\n");
|
|
547
|
+
}
|
|
548
|
+
};
|
|
549
|
+
|
|
363
550
|
// ../connectors/src/connectors/wix-store/tools/request.ts
|
|
364
551
|
import { z } from "zod";
|
|
365
|
-
var
|
|
552
|
+
var BASE_URL2 = "https://www.wixapis.com/";
|
|
366
553
|
var REQUEST_TIMEOUT_MS = 6e4;
|
|
367
554
|
var inputSchema = z.object({
|
|
368
555
|
toolUseIntent: z.string().optional().describe("Brief description of what you intend to accomplish with this tool call"),
|
|
@@ -397,7 +584,7 @@ Authentication is handled automatically using the API Key and Site ID.`,
|
|
|
397
584
|
try {
|
|
398
585
|
const apiKey = parameters.apiKey.getValue(connection2);
|
|
399
586
|
const siteId = parameters.siteId.getValue(connection2);
|
|
400
|
-
const url = `${
|
|
587
|
+
const url = `${BASE_URL2}${path2}`;
|
|
401
588
|
const controller = new AbortController();
|
|
402
589
|
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
403
590
|
try {
|
|
@@ -592,7 +779,46 @@ export default async function handler(c: Context) {
|
|
|
592
779
|
- \`POST stores/v2/inventoryItems/query\`
|
|
593
780
|
- Body: \`{ "query": { "paging": { "limit": 50 } } }\``
|
|
594
781
|
},
|
|
595
|
-
tools
|
|
782
|
+
tools,
|
|
783
|
+
setup: (params, ctx, config) => runSetupFlow(wixStoreSetupFlow, params, ctx, config),
|
|
784
|
+
async checkConnection(params, _config) {
|
|
785
|
+
const apiKey = params[parameters.apiKey.slug];
|
|
786
|
+
const siteId = params[parameters.siteId.slug];
|
|
787
|
+
if (!apiKey || !siteId) {
|
|
788
|
+
return {
|
|
789
|
+
success: false,
|
|
790
|
+
error: "Missing required parameters: api-key and site-id"
|
|
791
|
+
};
|
|
792
|
+
}
|
|
793
|
+
try {
|
|
794
|
+
const res = await fetch(
|
|
795
|
+
"https://www.wixapis.com/stores/v1/products/query",
|
|
796
|
+
{
|
|
797
|
+
method: "POST",
|
|
798
|
+
headers: {
|
|
799
|
+
Authorization: apiKey,
|
|
800
|
+
"wix-site-id": siteId,
|
|
801
|
+
"Content-Type": "application/json",
|
|
802
|
+
Accept: "application/json"
|
|
803
|
+
},
|
|
804
|
+
body: JSON.stringify({ query: { paging: { limit: 1, offset: 0 } } })
|
|
805
|
+
}
|
|
806
|
+
);
|
|
807
|
+
if (!res.ok) {
|
|
808
|
+
const errorText = await res.text().catch(() => res.statusText);
|
|
809
|
+
return {
|
|
810
|
+
success: false,
|
|
811
|
+
error: `Wix Store API failed: HTTP ${res.status} ${errorText}`
|
|
812
|
+
};
|
|
813
|
+
}
|
|
814
|
+
return { success: true };
|
|
815
|
+
} catch (error) {
|
|
816
|
+
return {
|
|
817
|
+
success: false,
|
|
818
|
+
error: error instanceof Error ? error.message : String(error)
|
|
819
|
+
};
|
|
820
|
+
}
|
|
821
|
+
}
|
|
596
822
|
});
|
|
597
823
|
|
|
598
824
|
// src/connectors/create-connector-sdk.ts
|
|
@@ -621,6 +847,7 @@ function resolveEnvVarOptional(entry, key) {
|
|
|
621
847
|
import { getContext } from "hono/context-storage";
|
|
622
848
|
import { getCookie } from "hono/cookie";
|
|
623
849
|
var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
|
|
850
|
+
var TABLEAU_SESSION_SENTINEL_URL = "squadbase://tableau-session/";
|
|
624
851
|
function normalizeHeaders(input) {
|
|
625
852
|
const out = {};
|
|
626
853
|
if (!input) return out;
|
|
@@ -629,6 +856,11 @@ function normalizeHeaders(input) {
|
|
|
629
856
|
});
|
|
630
857
|
return out;
|
|
631
858
|
}
|
|
859
|
+
function extractInputUrl(input) {
|
|
860
|
+
if (typeof input === "string") return input;
|
|
861
|
+
if (input instanceof URL) return input.href;
|
|
862
|
+
return input.url;
|
|
863
|
+
}
|
|
632
864
|
function createSandboxProxyFetch(connectionId) {
|
|
633
865
|
return async (input, init) => {
|
|
634
866
|
const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
|
|
@@ -638,10 +870,17 @@ function createSandboxProxyFetch(connectionId) {
|
|
|
638
870
|
"Connection proxy is not configured. Please check your deployment settings."
|
|
639
871
|
);
|
|
640
872
|
}
|
|
641
|
-
const originalUrl =
|
|
873
|
+
const originalUrl = extractInputUrl(input);
|
|
874
|
+
const baseDomain = process.env["SQUADBASE_PREVIEW_BASE_DOMAIN"] ?? "preview.app.squadbase.dev";
|
|
875
|
+
if (originalUrl === TABLEAU_SESSION_SENTINEL_URL) {
|
|
876
|
+
const sessionUrl = `https://${sandboxId}.${baseDomain}/_sqcore/connections/${connectionId}/tableau-session`;
|
|
877
|
+
return fetch(sessionUrl, {
|
|
878
|
+
method: "POST",
|
|
879
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
880
|
+
});
|
|
881
|
+
}
|
|
642
882
|
const originalMethod = init?.method ?? "GET";
|
|
643
883
|
const originalBody = init?.body ? JSON.parse(init.body) : void 0;
|
|
644
|
-
const baseDomain = process.env["SQUADBASE_PREVIEW_BASE_DOMAIN"] ?? "preview.app.squadbase.dev";
|
|
645
884
|
const proxyUrl = `https://${sandboxId}.${baseDomain}/_sqcore/connections/${connectionId}/request`;
|
|
646
885
|
return fetch(proxyUrl, {
|
|
647
886
|
method: "POST",
|
|
@@ -667,10 +906,9 @@ function createDeployedAppProxyFetch(connectionId) {
|
|
|
667
906
|
}
|
|
668
907
|
const baseDomain = process.env["SQUADBASE_APP_BASE_DOMAIN"] ?? "squadbase.app";
|
|
669
908
|
const proxyUrl = `https://${projectId}.${baseDomain}/_sqcore/connections/${connectionId}/request`;
|
|
909
|
+
const sessionUrl = `https://${projectId}.${baseDomain}/_sqcore/connections/${connectionId}/tableau-session`;
|
|
670
910
|
return async (input, init) => {
|
|
671
|
-
const originalUrl =
|
|
672
|
-
const originalMethod = init?.method ?? "GET";
|
|
673
|
-
const originalBody = init?.body ? JSON.parse(init.body) : void 0;
|
|
911
|
+
const originalUrl = extractInputUrl(input);
|
|
674
912
|
const c = getContext();
|
|
675
913
|
const appSession = getCookie(c, APP_SESSION_COOKIE_NAME);
|
|
676
914
|
if (!appSession) {
|
|
@@ -678,6 +916,14 @@ function createDeployedAppProxyFetch(connectionId) {
|
|
|
678
916
|
"No authentication method available for connection proxy."
|
|
679
917
|
);
|
|
680
918
|
}
|
|
919
|
+
if (originalUrl === TABLEAU_SESSION_SENTINEL_URL) {
|
|
920
|
+
return fetch(sessionUrl, {
|
|
921
|
+
method: "POST",
|
|
922
|
+
headers: { Authorization: `Bearer ${appSession}` }
|
|
923
|
+
});
|
|
924
|
+
}
|
|
925
|
+
const originalMethod = init?.method ?? "GET";
|
|
926
|
+
const originalBody = init?.body ? JSON.parse(init.body) : void 0;
|
|
681
927
|
return fetch(proxyUrl, {
|
|
682
928
|
method: "POST",
|
|
683
929
|
headers: {
|