@squadbase/vite-server 0.1.12-dev.a9ac647 → 0.1.17-dev.3b633bb

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/cli/index.js +14375 -1652
  2. package/dist/connectors/airtable-oauth.js +282 -46
  3. package/dist/connectors/airtable.js +319 -51
  4. package/dist/connectors/amplitude.js +322 -47
  5. package/dist/connectors/anthropic.js +135 -47
  6. package/dist/connectors/asana.js +327 -49
  7. package/dist/connectors/attio.js +302 -49
  8. package/dist/connectors/aws-billing.js +287 -46
  9. package/dist/connectors/azure-sql.js +421 -102
  10. package/dist/connectors/backlog-api-key.js +317 -47
  11. package/dist/connectors/clickup.js +338 -49
  12. package/dist/connectors/cosmosdb.js +305 -50
  13. package/dist/connectors/customerio.js +319 -47
  14. package/dist/connectors/dbt.js +340 -47
  15. package/dist/connectors/freshdesk.js +342 -53
  16. package/dist/connectors/freshsales.js +333 -52
  17. package/dist/connectors/freshservice.js +361 -53
  18. package/dist/connectors/gamma.js +327 -52
  19. package/dist/connectors/gemini.js +134 -47
  20. package/dist/connectors/github.js +386 -49
  21. package/dist/connectors/gmail-oauth.js +204 -7
  22. package/dist/connectors/gmail.js +350 -47
  23. package/dist/connectors/google-ads.js +288 -46
  24. package/dist/connectors/google-analytics-oauth.js +310 -46
  25. package/dist/connectors/google-analytics.js +547 -87
  26. package/dist/connectors/google-audit-log.js +438 -47
  27. package/dist/connectors/google-calendar-oauth.js +259 -46
  28. package/dist/connectors/google-calendar.js +359 -47
  29. package/dist/connectors/google-docs.js +220 -6
  30. package/dist/connectors/google-drive.js +262 -5
  31. package/dist/connectors/google-search-console-oauth.js +256 -46
  32. package/dist/connectors/google-sheets.js +272 -47
  33. package/dist/connectors/google-slides.js +205 -6
  34. package/dist/connectors/grafana.js +332 -49
  35. package/dist/connectors/hubspot-oauth.js +208 -5
  36. package/dist/connectors/hubspot.js +306 -49
  37. package/dist/connectors/influxdb.js +416 -51
  38. package/dist/connectors/intercom-oauth.js +210 -5
  39. package/dist/connectors/intercom.js +302 -49
  40. package/dist/connectors/jdbc.js +762 -110
  41. package/dist/connectors/jira-api-key.js +326 -47
  42. package/dist/connectors/kintone-api-token.js +281 -47
  43. package/dist/connectors/kintone.js +328 -47
  44. package/dist/connectors/linear.js +330 -49
  45. package/dist/connectors/linkedin-ads.js +268 -50
  46. package/dist/connectors/mailchimp-oauth.js +268 -46
  47. package/dist/connectors/mailchimp.js +320 -49
  48. package/dist/connectors/meta-ads-oauth.js +273 -48
  49. package/dist/connectors/meta-ads.js +285 -50
  50. package/dist/connectors/mixpanel.js +338 -47
  51. package/dist/connectors/monday.js +360 -49
  52. package/dist/connectors/mongodb.js +319 -57
  53. package/dist/connectors/notion-oauth.js +231 -5
  54. package/dist/connectors/notion.js +323 -51
  55. package/dist/connectors/openai.js +134 -47
  56. package/dist/connectors/oracle.js +454 -103
  57. package/dist/connectors/outlook-oauth.js +204 -5
  58. package/dist/connectors/powerbi-oauth.js +498 -5
  59. package/dist/connectors/salesforce.js +384 -49
  60. package/dist/connectors/semrush.js +609 -49
  61. package/dist/connectors/sentry.js +289 -50
  62. package/dist/connectors/shopify-oauth.js +187 -5
  63. package/dist/connectors/shopify.js +357 -47
  64. package/dist/connectors/sqlserver.js +415 -102
  65. package/dist/connectors/stripe-api-key.js +269 -46
  66. package/dist/connectors/stripe-oauth.js +202 -5
  67. package/dist/connectors/supabase.js +303 -48
  68. package/dist/connectors/tableau.js +536 -163
  69. package/dist/connectors/tiktok-ads.js +279 -48
  70. package/dist/connectors/wix-store.js +320 -49
  71. package/dist/connectors/zendesk-oauth.js +239 -5
  72. package/dist/connectors/zendesk.js +358 -47
  73. package/dist/index.d.ts +149 -1
  74. package/dist/index.js +15057 -2117
  75. package/dist/main.js +15005 -2073
  76. package/dist/vite-plugin.js +14752 -2019
  77. 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 = class {
3
- slug;
4
- name;
5
- description;
6
- envVarBaseKey;
7
- type;
8
- secret;
9
- required;
10
- constructor(config) {
11
- this.slug = config.slug;
12
- this.name = config.name;
13
- this.description = config.description;
14
- this.envVarBaseKey = config.envVarBaseKey;
15
- this.type = config.type;
16
- this.secret = config.secret;
17
- this.required = config.required;
18
- }
19
- /**
20
- * Get the parameter value from a ConnectorConnectionObject.
21
- */
22
- getValue(connection2) {
23
- const param = connection2.parameters.find(
24
- (p) => p.parameterSlug === this.slug
25
- );
26
- if (!param || param.value == null) {
27
- throw new Error(
28
- `Parameter "${this.slug}" not found or has no value in connection "${connection2.id}"`
29
- );
30
- }
31
- return param.value;
32
- }
33
- /**
34
- * Try to get the parameter value. Returns undefined if not found (for optional params).
35
- */
36
- tryGetValue(connection2) {
37
- const param = connection2.parameters.find(
38
- (p) => p.parameterSlug === this.slug
39
- );
40
- if (!param || param.value == null) return void 0;
41
- return param.value;
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/openai/parameters.ts
57
+ init_parameter_definition();
46
58
  var parameters = {
47
59
  apiKey: new ParameterDefinition({
48
60
  slug: "api-key",
@@ -83,6 +95,28 @@ var ConnectorPlugin = class _ConnectorPlugin {
83
95
  tools;
84
96
  query;
85
97
  checkConnection;
98
+ /**
99
+ * SQPD-1212: Logic-based, rule-driven connection setup. Connectors that
100
+ * implement this expose a step-by-step exploration flow (database/schema/
101
+ * table/etc. discovery) that the dashboard backend drives via the
102
+ * `/connections/:connectionId/setup` endpoint. Implement by delegating to
103
+ * `runSetupFlow` from `setup-flow.ts`.
104
+ */
105
+ setup;
106
+ /**
107
+ * Opt-out of the default "verify before save" behavior on connection
108
+ * creation. The backend invokes `checkConnection` synchronously while
109
+ * creating the connection and aborts (no row inserted) if it fails — this
110
+ * flag disables that for connectors where the check cannot succeed pre-save:
111
+ *
112
+ * - `squadbase-db` populates `connection-url` only after Neon provisioning
113
+ * - OAuth connectors require an OAuth-aware proxyFetch keyed by the
114
+ * connectionId, which doesn't exist until the row is saved
115
+ *
116
+ * Exceptions are the explicit position; new credential-input connectors get
117
+ * the default verify-on-create behavior without opt-in.
118
+ */
119
+ skipConnectionCheckOnCreate;
86
120
  constructor(config) {
87
121
  this.slug = config.slug;
88
122
  this.authType = config.authType;
@@ -99,6 +133,8 @@ var ConnectorPlugin = class _ConnectorPlugin {
99
133
  this.tools = config.tools;
100
134
  this.query = config.query;
101
135
  this.checkConnection = config.checkConnection;
136
+ this.setup = config.setup;
137
+ this.skipConnectionCheckOnCreate = config.skipConnectionCheckOnCreate;
102
138
  }
103
139
  get connectorKey() {
104
140
  return _ConnectorPlugin.deriveKey(this.slug, this.authType);
@@ -232,7 +268,38 @@ export default async function handler(c: Context) {
232
268
  }
233
269
  \`\`\``
234
270
  },
235
- tools
271
+ tools,
272
+ async checkConnection(params, _config) {
273
+ try {
274
+ const apiKey = params[parameters.apiKey.slug];
275
+ if (!apiKey) {
276
+ return {
277
+ success: false,
278
+ error: "Missing required parameter: api-key"
279
+ };
280
+ }
281
+ const res = await fetch("https://api.openai.com/v1/models", {
282
+ method: "GET",
283
+ headers: {
284
+ Authorization: `Bearer ${apiKey}`,
285
+ Accept: "application/json"
286
+ }
287
+ });
288
+ if (!res.ok) {
289
+ const errorText = await res.text().catch(() => res.statusText);
290
+ return {
291
+ success: false,
292
+ error: `OpenAI API failed: HTTP ${res.status} ${errorText}`
293
+ };
294
+ }
295
+ return { success: true };
296
+ } catch (error) {
297
+ return {
298
+ success: false,
299
+ error: error instanceof Error ? error.message : String(error)
300
+ };
301
+ }
302
+ }
236
303
  });
237
304
 
238
305
  // src/connectors/create-connector-sdk.ts
@@ -261,6 +328,7 @@ function resolveEnvVarOptional(entry, key) {
261
328
  import { getContext } from "hono/context-storage";
262
329
  import { getCookie } from "hono/cookie";
263
330
  var APP_SESSION_COOKIE_NAME = "__Host-squadbase-session";
331
+ var TABLEAU_SESSION_SENTINEL_URL = "squadbase://tableau-session/";
264
332
  function normalizeHeaders(input) {
265
333
  const out = {};
266
334
  if (!input) return out;
@@ -269,6 +337,11 @@ function normalizeHeaders(input) {
269
337
  });
270
338
  return out;
271
339
  }
340
+ function extractInputUrl(input) {
341
+ if (typeof input === "string") return input;
342
+ if (input instanceof URL) return input.href;
343
+ return input.url;
344
+ }
272
345
  function createSandboxProxyFetch(connectionId) {
273
346
  return async (input, init) => {
274
347
  const token = process.env.INTERNAL_SQUADBASE_OAUTH_MACHINE_CREDENTIAL;
@@ -278,10 +351,17 @@ function createSandboxProxyFetch(connectionId) {
278
351
  "Connection proxy is not configured. Please check your deployment settings."
279
352
  );
280
353
  }
281
- const originalUrl = typeof input === "string" ? input : input instanceof URL ? input.href : input.url;
354
+ const originalUrl = extractInputUrl(input);
355
+ const baseDomain = process.env["SQUADBASE_PREVIEW_BASE_DOMAIN"] ?? "preview.app.squadbase.dev";
356
+ if (originalUrl === TABLEAU_SESSION_SENTINEL_URL) {
357
+ const sessionUrl = `https://${sandboxId}.${baseDomain}/_sqcore/connections/${connectionId}/tableau-session`;
358
+ return fetch(sessionUrl, {
359
+ method: "POST",
360
+ headers: { Authorization: `Bearer ${token}` }
361
+ });
362
+ }
282
363
  const originalMethod = init?.method ?? "GET";
283
364
  const originalBody = init?.body ? JSON.parse(init.body) : void 0;
284
- const baseDomain = process.env["SQUADBASE_PREVIEW_BASE_DOMAIN"] ?? "preview.app.squadbase.dev";
285
365
  const proxyUrl = `https://${sandboxId}.${baseDomain}/_sqcore/connections/${connectionId}/request`;
286
366
  return fetch(proxyUrl, {
287
367
  method: "POST",
@@ -307,10 +387,9 @@ function createDeployedAppProxyFetch(connectionId) {
307
387
  }
308
388
  const baseDomain = process.env["SQUADBASE_APP_BASE_DOMAIN"] ?? "squadbase.app";
309
389
  const proxyUrl = `https://${projectId}.${baseDomain}/_sqcore/connections/${connectionId}/request`;
390
+ const sessionUrl = `https://${projectId}.${baseDomain}/_sqcore/connections/${connectionId}/tableau-session`;
310
391
  return async (input, init) => {
311
- const originalUrl = typeof input === "string" ? input : input instanceof URL ? input.href : input.url;
312
- const originalMethod = init?.method ?? "GET";
313
- const originalBody = init?.body ? JSON.parse(init.body) : void 0;
392
+ const originalUrl = extractInputUrl(input);
314
393
  const c = getContext();
315
394
  const appSession = getCookie(c, APP_SESSION_COOKIE_NAME);
316
395
  if (!appSession) {
@@ -318,6 +397,14 @@ function createDeployedAppProxyFetch(connectionId) {
318
397
  "No authentication method available for connection proxy."
319
398
  );
320
399
  }
400
+ if (originalUrl === TABLEAU_SESSION_SENTINEL_URL) {
401
+ return fetch(sessionUrl, {
402
+ method: "POST",
403
+ headers: { Authorization: `Bearer ${appSession}` }
404
+ });
405
+ }
406
+ const originalMethod = init?.method ?? "GET";
407
+ const originalBody = init?.body ? JSON.parse(init.body) : void 0;
321
408
  return fetch(proxyUrl, {
322
409
  method: "POST",
323
410
  headers: {