@squadbase/vite-server 0.1.12-dev.93b8799 → 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 +12128 -934
- package/dist/connectors/airtable-oauth.js +248 -46
- package/dist/connectors/airtable.js +285 -51
- package/dist/connectors/amplitude.js +288 -47
- package/dist/connectors/anthropic.js +126 -47
- package/dist/connectors/asana.js +293 -49
- package/dist/connectors/attio.js +268 -49
- package/dist/connectors/aws-billing.js +253 -46
- package/dist/connectors/azure-sql.js +387 -102
- package/dist/connectors/backlog-api-key.js +283 -47
- package/dist/connectors/clickup.js +304 -49
- package/dist/connectors/cosmosdb.js +271 -50
- package/dist/connectors/customerio.js +285 -47
- package/dist/connectors/dbt.js +306 -47
- package/dist/connectors/freshdesk.js +308 -53
- package/dist/connectors/freshsales.js +299 -52
- package/dist/connectors/freshservice.js +327 -53
- package/dist/connectors/gamma.js +293 -52
- package/dist/connectors/gemini.js +125 -47
- package/dist/connectors/github.js +352 -49
- package/dist/connectors/gmail-oauth.js +170 -7
- package/dist/connectors/gmail.js +316 -47
- package/dist/connectors/google-ads.js +254 -46
- package/dist/connectors/google-analytics-oauth.js +276 -46
- package/dist/connectors/google-analytics.js +378 -49
- package/dist/connectors/google-audit-log.js +404 -47
- package/dist/connectors/google-calendar-oauth.js +225 -46
- package/dist/connectors/google-calendar.js +325 -47
- package/dist/connectors/google-docs.js +186 -6
- package/dist/connectors/google-drive.js +228 -5
- package/dist/connectors/google-search-console-oauth.js +222 -46
- package/dist/connectors/google-sheets.js +238 -47
- package/dist/connectors/google-slides.js +171 -6
- package/dist/connectors/grafana.js +298 -49
- package/dist/connectors/hubspot-oauth.js +174 -5
- package/dist/connectors/hubspot.js +272 -49
- package/dist/connectors/influxdb.js +382 -51
- package/dist/connectors/intercom-oauth.js +176 -5
- package/dist/connectors/intercom.js +268 -49
- package/dist/connectors/jdbc.js +728 -110
- package/dist/connectors/jira-api-key.js +292 -47
- package/dist/connectors/kintone-api-token.js +247 -47
- package/dist/connectors/kintone.js +294 -47
- package/dist/connectors/linear.js +296 -49
- package/dist/connectors/linkedin-ads.js +234 -50
- package/dist/connectors/mailchimp-oauth.js +234 -46
- package/dist/connectors/mailchimp.js +286 -49
- package/dist/connectors/meta-ads-oauth.js +239 -48
- package/dist/connectors/meta-ads.js +251 -50
- package/dist/connectors/mixpanel.js +304 -47
- package/dist/connectors/monday.js +326 -49
- package/dist/connectors/mongodb.js +285 -57
- package/dist/connectors/notion-oauth.js +197 -5
- package/dist/connectors/notion.js +289 -51
- package/dist/connectors/openai.js +125 -47
- package/dist/connectors/oracle.js +405 -103
- package/dist/connectors/outlook-oauth.js +170 -5
- package/dist/connectors/powerbi-oauth.js +217 -5
- package/dist/connectors/salesforce.js +350 -49
- package/dist/connectors/semrush.js +280 -49
- package/dist/connectors/sentry.js +255 -50
- package/dist/connectors/shopify-oauth.js +153 -5
- package/dist/connectors/shopify.js +323 -47
- package/dist/connectors/sqlserver.js +381 -102
- package/dist/connectors/stripe-api-key.js +235 -46
- package/dist/connectors/stripe-oauth.js +168 -5
- package/dist/connectors/supabase.js +269 -48
- package/dist/connectors/tableau.js +337 -206
- package/dist/connectors/tiktok-ads.js +245 -48
- package/dist/connectors/wix-store.js +286 -49
- package/dist/connectors/zendesk-oauth.js +205 -5
- package/dist/connectors/zendesk.js +324 -47
- package/dist/index.d.ts +149 -1
- package/dist/index.js +18297 -6886
- package/dist/main.js +12785 -1382
- package/dist/vite-plugin.js +12140 -936
- 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",
|
|
@@ -266,6 +278,20 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
266
278
|
* `runSetupFlow` from `setup-flow.ts`.
|
|
267
279
|
*/
|
|
268
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;
|
|
269
295
|
constructor(config) {
|
|
270
296
|
this.slug = config.slug;
|
|
271
297
|
this.authType = config.authType;
|
|
@@ -283,6 +309,7 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
283
309
|
this.query = config.query;
|
|
284
310
|
this.checkConnection = config.checkConnection;
|
|
285
311
|
this.setup = config.setup;
|
|
312
|
+
this.skipConnectionCheckOnCreate = config.skipConnectionCheckOnCreate;
|
|
286
313
|
}
|
|
287
314
|
get connectorKey() {
|
|
288
315
|
return _ConnectorPlugin.deriveKey(this.slug, this.authType);
|
|
@@ -347,6 +374,46 @@ var ConnectorPlugin = class _ConnectorPlugin {
|
|
|
347
374
|
}
|
|
348
375
|
};
|
|
349
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
|
+
|
|
350
417
|
// ../connectors/src/auth-types.ts
|
|
351
418
|
var AUTH_TYPES = {
|
|
352
419
|
OAUTH: "oauth",
|
|
@@ -369,9 +436,120 @@ var wixStoreOnboarding = new ConnectorOnboarding({
|
|
|
369
436
|
}
|
|
370
437
|
});
|
|
371
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
|
+
|
|
372
550
|
// ../connectors/src/connectors/wix-store/tools/request.ts
|
|
373
551
|
import { z } from "zod";
|
|
374
|
-
var
|
|
552
|
+
var BASE_URL2 = "https://www.wixapis.com/";
|
|
375
553
|
var REQUEST_TIMEOUT_MS = 6e4;
|
|
376
554
|
var inputSchema = z.object({
|
|
377
555
|
toolUseIntent: z.string().optional().describe("Brief description of what you intend to accomplish with this tool call"),
|
|
@@ -406,7 +584,7 @@ Authentication is handled automatically using the API Key and Site ID.`,
|
|
|
406
584
|
try {
|
|
407
585
|
const apiKey = parameters.apiKey.getValue(connection2);
|
|
408
586
|
const siteId = parameters.siteId.getValue(connection2);
|
|
409
|
-
const url = `${
|
|
587
|
+
const url = `${BASE_URL2}${path2}`;
|
|
410
588
|
const controller = new AbortController();
|
|
411
589
|
const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);
|
|
412
590
|
try {
|
|
@@ -601,7 +779,46 @@ export default async function handler(c: Context) {
|
|
|
601
779
|
- \`POST stores/v2/inventoryItems/query\`
|
|
602
780
|
- Body: \`{ "query": { "paging": { "limit": 50 } } }\``
|
|
603
781
|
},
|
|
604
|
-
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
|
+
}
|
|
605
822
|
});
|
|
606
823
|
|
|
607
824
|
// src/connectors/create-connector-sdk.ts
|
|
@@ -630,6 +847,7 @@ function resolveEnvVarOptional(entry, key) {
|
|
|
630
847
|
import { getContext } from "hono/context-storage";
|
|
631
848
|
import { getCookie } from "hono/cookie";
|
|
632
849
|
var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
|
|
850
|
+
var TABLEAU_SESSION_SENTINEL_URL = "squadbase://tableau-session/";
|
|
633
851
|
function normalizeHeaders(input) {
|
|
634
852
|
const out = {};
|
|
635
853
|
if (!input) return out;
|
|
@@ -638,6 +856,11 @@ function normalizeHeaders(input) {
|
|
|
638
856
|
});
|
|
639
857
|
return out;
|
|
640
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
|
+
}
|
|
641
864
|
function createSandboxProxyFetch(connectionId) {
|
|
642
865
|
return async (input, init) => {
|
|
643
866
|
const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
|
|
@@ -647,10 +870,17 @@ function createSandboxProxyFetch(connectionId) {
|
|
|
647
870
|
"Connection proxy is not configured. Please check your deployment settings."
|
|
648
871
|
);
|
|
649
872
|
}
|
|
650
|
-
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
|
+
}
|
|
651
882
|
const originalMethod = init?.method ?? "GET";
|
|
652
883
|
const originalBody = init?.body ? JSON.parse(init.body) : void 0;
|
|
653
|
-
const baseDomain = process.env["SQUADBASE_PREVIEW_BASE_DOMAIN"] ?? "preview.app.squadbase.dev";
|
|
654
884
|
const proxyUrl = `https://${sandboxId}.${baseDomain}/_sqcore/connections/${connectionId}/request`;
|
|
655
885
|
return fetch(proxyUrl, {
|
|
656
886
|
method: "POST",
|
|
@@ -676,10 +906,9 @@ function createDeployedAppProxyFetch(connectionId) {
|
|
|
676
906
|
}
|
|
677
907
|
const baseDomain = process.env["SQUADBASE_APP_BASE_DOMAIN"] ?? "squadbase.app";
|
|
678
908
|
const proxyUrl = `https://${projectId}.${baseDomain}/_sqcore/connections/${connectionId}/request`;
|
|
909
|
+
const sessionUrl = `https://${projectId}.${baseDomain}/_sqcore/connections/${connectionId}/tableau-session`;
|
|
679
910
|
return async (input, init) => {
|
|
680
|
-
const originalUrl =
|
|
681
|
-
const originalMethod = init?.method ?? "GET";
|
|
682
|
-
const originalBody = init?.body ? JSON.parse(init.body) : void 0;
|
|
911
|
+
const originalUrl = extractInputUrl(input);
|
|
683
912
|
const c = getContext();
|
|
684
913
|
const appSession = getCookie(c, APP_SESSION_COOKIE_NAME);
|
|
685
914
|
if (!appSession) {
|
|
@@ -687,6 +916,14 @@ function createDeployedAppProxyFetch(connectionId) {
|
|
|
687
916
|
"No authentication method available for connection proxy."
|
|
688
917
|
);
|
|
689
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;
|
|
690
927
|
return fetch(proxyUrl, {
|
|
691
928
|
method: "POST",
|
|
692
929
|
headers: {
|