Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions .github/templates/preview-comment.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,6 @@
<td>$DATABASE_LINK</td>
</tr>
<tr>
<td><img src="https://fly.io/phx/ui/images/favicon/favicon-595d1312b35dfe32838befdf8505515e.ico" width="20" height="20" alt="Fly.io"> <strong>Electric (Fly.io)</strong></td>
<td align="center">$ELECTRIC_STATUS</td>
<td>$ELECTRIC_LINK</td>
</tr>
<tr>
<td><img src="https://vercel.com/favicon.ico" width="20" height="20" alt="Vercel"> <strong>API (Vercel)</strong></td>
<td align="center">$API_STATUS</td>
<td>$API_LINK</td>
Expand Down
12 changes: 0 additions & 12 deletions .github/workflows/cleanup-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,17 +22,6 @@ jobs:
branch: ${{ github.event.pull_request.head.ref }}
api_key: ${{ secrets.NEON_API_KEY }}

- name: Setup Fly CLI
uses: superfly/flyctl-actions/setup-flyctl@master

- name: Delete Electric Fly.io app
id: electric-cleanup
continue-on-error: true
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
run: |
flyctl apps destroy "superset-electric-pr-${{ github.event.pull_request.number }}" --yes

- name: Update comment
if: always()
uses: thollander/actions-comment-pull-request@v3
Expand All @@ -42,7 +31,6 @@ jobs:

The following preview resources have been cleaned up:
- ${{ steps.neon-cleanup.outcome == 'success' && '✅' || '⚠️' }} Neon database branch
- ${{ steps.electric-cleanup.outcome == 'success' && '✅' || '⚠️' }} Electric Fly.io app

Thank you for your contribution! 🎉
comment-tag: "🚀-preview-deployment"
64 changes: 6 additions & 58 deletions .github/workflows/deploy-preview.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ env:
MARKETING_ALIAS: marketing-pr-${{ github.event.pull_request.number }}-superset.vercel.app
ADMIN_ALIAS: admin-pr-${{ github.event.pull_request.number }}-superset.vercel.app
DOCS_ALIAS: docs-pr-${{ github.event.pull_request.number }}-superset.vercel.app
ELECTRIC_URL: https://superset-electric-pr-${{ github.event.pull_request.number }}.fly.dev/v1/shape

jobs:
deploy-database:
Expand Down Expand Up @@ -75,51 +74,6 @@ jobs:
name: database-status
path: database-status.env

deploy-electric:
name: Deploy Electric (Fly.io)
runs-on: ubuntu-latest
needs: deploy-database

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Download database info
uses: actions/download-artifact@v4
with:
name: database-status

- name: Load database URL
run: |
source database-status.env
echo "DATABASE_URL_UNPOOLED=$DATABASE_URL_UNPOOLED" >> $GITHUB_ENV

- name: Deploy Electric to Fly.io
uses: superfly/fly-pr-review-apps@1.3.0
with:
name: superset-electric-pr-${{ github.event.pull_request.number }}
region: iad
org: ${{ vars.FLY_ORG }}
config: fly.toml
secrets: |
DATABASE_URL=${{ env.DATABASE_URL_UNPOOLED }}
ELECTRIC_SECRET=${{ secrets.ELECTRIC_SECRET_PREVIEW }}
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}

- name: Save Electric status
run: |
cat > electric-status.env << EOF
ELECTRIC_STATUS="✅"
ELECTRIC_LINK="<a href=\"https://fly.io/apps/superset-electric-pr-${{ github.event.pull_request.number }}\">View App</a>"
EOF

- name: Upload Electric status
uses: actions/upload-artifact@v4
with:
name: electric-status
path: electric-status.env

deploy-api:
name: Deploy API
runs-on: ubuntu-latest
Expand Down Expand Up @@ -199,8 +153,8 @@ jobs:
QSTASH_TOKEN: ${{ secrets.QSTASH_TOKEN }}
QSTASH_CURRENT_SIGNING_KEY: ${{ secrets.QSTASH_CURRENT_SIGNING_KEY }}
QSTASH_NEXT_SIGNING_KEY: ${{ secrets.QSTASH_NEXT_SIGNING_KEY }}
ELECTRIC_URL: ${{ env.ELECTRIC_URL }}
ELECTRIC_SECRET: ${{ secrets.ELECTRIC_SECRET_PREVIEW }}
ELECTRIC_SOURCE_ID: ${{ secrets.ELECTRIC_SOURCE_ID }}
ELECTRIC_SOURCE_SECRET: ${{ secrets.ELECTRIC_SOURCE_SECRET }}
Comment on lines +156 to +157
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

ELECTRIC_SOURCE_ID / ELECTRIC_SOURCE_SECRET must also be added to the preview GitHub environment.

The deploy-api job runs under environment: preview (Line 80). GitHub Actions resolves ${{ secrets.* }} from the environment that the job is scoped to, so these two secrets must exist in both the preview and production environments.

The post-merge instructions in the PR description only say:

Add these GitHub secrets to production env: ELECTRIC_SOURCE_ID, ELECTRIC_SOURCE_SECRET

If only production is updated, every preview-PR deploy will receive empty values for ELECTRIC_SOURCE_ID and ELECTRIC_SOURCE_SECRET, silently breaking Electric sync for all preview environments after this merges. The same secrets (pointing at the same Electric Cloud source, or a dedicated one) need to be configured in the preview environment too.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/deploy-preview.yml around lines 156 - 157, The deploy job
scoped to environment: preview is using secrets ELECTRIC_SOURCE_ID and
ELECTRIC_SOURCE_SECRET but those secrets were only added to the production
environment; add ELECTRIC_SOURCE_ID and ELECTRIC_SOURCE_SECRET to the preview
GitHub environment as well so the deploy-api job (environment: preview) can
resolve ${{ secrets.ELECTRIC_SOURCE_ID }} and ${{ secrets.ELECTRIC_SOURCE_SECRET
}} during PR preview deploys.

DURABLE_STREAMS_URL: ${{ secrets.DURABLE_STREAMS_URL }}
DURABLE_STREAMS_SECRET: ${{ secrets.DURABLE_STREAMS_SECRET }}
STRIPE_SECRET_KEY: ${{ secrets.STRIPE_SECRET_KEY }}
Expand Down Expand Up @@ -248,8 +202,8 @@ jobs:
--env QSTASH_TOKEN=$QSTASH_TOKEN \
--env QSTASH_CURRENT_SIGNING_KEY=$QSTASH_CURRENT_SIGNING_KEY \
--env QSTASH_NEXT_SIGNING_KEY=$QSTASH_NEXT_SIGNING_KEY \
--env ELECTRIC_URL=$ELECTRIC_URL \
--env ELECTRIC_SECRET=$ELECTRIC_SECRET \
--env ELECTRIC_SOURCE_ID=$ELECTRIC_SOURCE_ID \
--env ELECTRIC_SOURCE_SECRET=$ELECTRIC_SOURCE_SECRET \
--env DURABLE_STREAMS_URL=$DURABLE_STREAMS_URL \
--env DURABLE_STREAMS_SECRET=$DURABLE_STREAMS_SECRET \
--env STRIPE_SECRET_KEY=$STRIPE_SECRET_KEY \
Expand Down Expand Up @@ -671,7 +625,7 @@ jobs:
name: Post Deployment Comment
runs-on: ubuntu-latest
if: always()
needs: [deploy-database, deploy-electric, deploy-api, deploy-web, deploy-marketing, deploy-admin, deploy-docs]
needs: [deploy-database, deploy-api, deploy-web, deploy-marketing, deploy-admin, deploy-docs]
permissions:
contents: read
pull-requests: write
Expand All @@ -690,8 +644,6 @@ jobs:
run: |
DATABASE_STATUS="❌"
DATABASE_LINK="Failed to create"
ELECTRIC_STATUS="❌"
ELECTRIC_LINK="Failed to deploy"
API_STATUS="❌"
API_LINK="Failed to deploy"
WEB_STATUS="❌"
Expand All @@ -707,10 +659,6 @@ jobs:
source database-status.env
fi

if [[ "${{ needs.deploy-electric.result }}" == "success" ]]; then
source electric-status.env
fi

if [[ "${{ needs.deploy-api.result }}" == "success" ]]; then
source api-status.env
fi
Expand All @@ -731,7 +679,7 @@ jobs:
source docs-status.env
fi

export DATABASE_STATUS DATABASE_LINK ELECTRIC_STATUS ELECTRIC_LINK API_STATUS API_LINK WEB_STATUS WEB_LINK MARKETING_STATUS MARKETING_LINK ADMIN_STATUS ADMIN_LINK DOCS_STATUS DOCS_LINK
export DATABASE_STATUS DATABASE_LINK API_STATUS API_LINK WEB_STATUS WEB_LINK MARKETING_STATUS MARKETING_LINK ADMIN_STATUS ADMIN_LINK DOCS_STATUS DOCS_LINK
envsubst < .github/templates/preview-comment.md > final-comment.md

- name: Post final deployment comment
Expand Down
35 changes: 4 additions & 31 deletions .github/workflows/deploy-production.yml
Original file line number Diff line number Diff line change
Expand Up @@ -103,8 +103,8 @@ jobs:
QSTASH_TOKEN: ${{ secrets.QSTASH_TOKEN }}
QSTASH_CURRENT_SIGNING_KEY: ${{ secrets.QSTASH_CURRENT_SIGNING_KEY }}
QSTASH_NEXT_SIGNING_KEY: ${{ secrets.QSTASH_NEXT_SIGNING_KEY }}
ELECTRIC_URL: ${{ secrets.ELECTRIC_URL }}
ELECTRIC_SECRET: ${{ secrets.ELECTRIC_SECRET }}
ELECTRIC_SOURCE_ID: ${{ secrets.ELECTRIC_SOURCE_ID }}
ELECTRIC_SOURCE_SECRET: ${{ secrets.ELECTRIC_SOURCE_SECRET }}
Comment on lines +106 to +107
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Pre-stage ELECTRIC_SOURCE_ID / ELECTRIC_SOURCE_SECRET in the production environment before merging.

The PR description lists adding these secrets as a post-merge step. However, the workflow triggers on every push to main, so the very first production deployment after merge will resolve both secrets to empty strings (${{ secrets.ELECTRIC_SOURCE_ID }}"" when unset). Vercel will deploy successfully with ELECTRIC_SOURCE_ID= and ELECTRIC_SOURCE_SECRET= set to blank — no pipeline failure, but Electric Cloud connectivity will break silently at runtime.

The fix is to add both secrets to the production GitHub environment before this PR is merged, not after.

Also applies to: 155-156

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/deploy-production.yml around lines 106 - 107, Pre-stage
the two secrets ELECTRIC_SOURCE_ID and ELECTRIC_SOURCE_SECRET in the production
GitHub environment before merging (they must exist when the workflow that runs
on pushes to main evaluates ${{ secrets.ELECTRIC_SOURCE_ID }} and ${{
secrets.ELECTRIC_SOURCE_SECRET }}), and update the PR description to explicitly
instruct adding these secrets pre-merge; alternatively, add a runtime guard in
the workflow to fail the job when either secret is empty so a post-merge
blank-secret deploy cannot silently succeed.

DURABLE_STREAMS_URL: ${{ secrets.DURABLE_STREAMS_URL }}
DURABLE_STREAMS_SECRET: ${{ secrets.DURABLE_STREAMS_SECRET }}
STRIPE_SECRET_KEY: ${{ secrets.STRIPE_SECRET_KEY }}
Expand Down Expand Up @@ -152,8 +152,8 @@ jobs:
--env QSTASH_TOKEN=$QSTASH_TOKEN \
--env QSTASH_CURRENT_SIGNING_KEY=$QSTASH_CURRENT_SIGNING_KEY \
--env QSTASH_NEXT_SIGNING_KEY=$QSTASH_NEXT_SIGNING_KEY \
--env ELECTRIC_URL=$ELECTRIC_URL \
--env ELECTRIC_SECRET=$ELECTRIC_SECRET \
--env ELECTRIC_SOURCE_ID=$ELECTRIC_SOURCE_ID \
--env ELECTRIC_SOURCE_SECRET=$ELECTRIC_SOURCE_SECRET \
--env DURABLE_STREAMS_URL=$DURABLE_STREAMS_URL \
--env DURABLE_STREAMS_SECRET=$DURABLE_STREAMS_SECRET \
--env STRIPE_SECRET_KEY=$STRIPE_SECRET_KEY \
Expand Down Expand Up @@ -418,33 +418,6 @@ jobs:
--env SECRETS_ENCRYPTION_KEY=$SECRETS_ENCRYPTION_KEY \
--env ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY

deploy-electric:
name: Deploy Electric to Fly.io
runs-on: ubuntu-latest
environment: production

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Fly CLI
uses: superfly/flyctl-actions/setup-flyctl@master

- name: Stage secrets
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
run: |
flyctl secrets set \
DATABASE_URL="${{ secrets.DATABASE_URL_UNPOOLED }}" \
ELECTRIC_SECRET="${{ secrets.ELECTRIC_SECRET }}" \
--app superset-electric \
--stage

- name: Deploy to Fly.io
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
run: flyctl deploy . --config fly.toml --remote-only

deploy-docs:
name: Deploy Docs to Vercel
runs-on: ubuntu-latest
Expand Down
36 changes: 20 additions & 16 deletions apps/api/src/app/api/electric/[...path]/route.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,22 +24,26 @@ export async function GET(request: Request): Promise<Response> {
return new Response("Not a member of this organization", { status: 403 });
}

const useCloud =
request.headers.get("x-electric-backend") === "cloud" &&
env.ELECTRIC_SOURCE_ID &&
env.ELECTRIC_SOURCE_SECRET;

const originUrl = useCloud
? new URL("/v1/shape", "https://api.electric-sql.cloud")
: new URL(env.ELECTRIC_URL);

if (useCloud) {
// biome-ignore lint/style/noNonNullAssertion: guarded by useCloud check above
originUrl.searchParams.set("source_id", env.ELECTRIC_SOURCE_ID!);
// biome-ignore lint/style/noNonNullAssertion: guarded by useCloud check above
originUrl.searchParams.set("source_secret", env.ELECTRIC_SOURCE_SECRET!);
const {
ELECTRIC_SOURCE_ID,
ELECTRIC_SOURCE_SECRET,
ELECTRIC_URL,
ELECTRIC_SECRET,
} = env;

let originUrl: URL;
if (ELECTRIC_SOURCE_ID && ELECTRIC_SOURCE_SECRET) {
originUrl = new URL("/v1/shape", "https://api.electric-sql.cloud");
originUrl.searchParams.set("source_id", ELECTRIC_SOURCE_ID);
originUrl.searchParams.set("source_secret", ELECTRIC_SOURCE_SECRET);
} else if (ELECTRIC_URL && ELECTRIC_SECRET) {
originUrl = new URL(ELECTRIC_URL);
originUrl.searchParams.set("secret", ELECTRIC_SECRET);
} else {
originUrl.searchParams.set("secret", env.ELECTRIC_SECRET);
return new Response(
"Missing Electric config: set ELECTRIC_SOURCE_ID/SECRET or ELECTRIC_URL/SECRET",
{ status: 500 },
);
}
Comment on lines +35 to 47
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Local Electric URL is missing the /v1/shape path.

The cloud branch (line 36) explicitly constructs new URL("/v1/shape", "https://api.electric-sql.cloud"). The local branch (line 40) does new URL(ELECTRIC_URL) verbatim — no path is appended.

Electric SQL's official auth guide constructs the upstream URL as new URL('http://localhost:3000/v1/shape'), and their blog example uses new URL('/v1/shape', baseUrl) where baseUrl = process.env.ELECTRIC_URL. This treats ELECTRIC_URL as a base origin, not a full endpoint. If a developer follows that convention and sets ELECTRIC_URL=http://localhost:3000, requests will hit the root path and Electric will return a 404/400.

The fix aligns the local branch with both the cloud branch and Electric SQL's documented pattern:

🐛 Proposed fix
-	} else if (ELECTRIC_URL && ELECTRIC_SECRET) {
-		originUrl = new URL(ELECTRIC_URL);
-		originUrl.searchParams.set("secret", ELECTRIC_SECRET);
+	} else if (ELECTRIC_URL && ELECTRIC_SECRET) {
+		originUrl = new URL("/v1/shape", ELECTRIC_URL);
+		originUrl.searchParams.set("secret", ELECTRIC_SECRET);
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
if (ELECTRIC_SOURCE_ID && ELECTRIC_SOURCE_SECRET) {
originUrl = new URL("/v1/shape", "https://api.electric-sql.cloud");
originUrl.searchParams.set("source_id", ELECTRIC_SOURCE_ID);
originUrl.searchParams.set("source_secret", ELECTRIC_SOURCE_SECRET);
} else if (ELECTRIC_URL && ELECTRIC_SECRET) {
originUrl = new URL(ELECTRIC_URL);
originUrl.searchParams.set("secret", ELECTRIC_SECRET);
} else {
originUrl.searchParams.set("secret", env.ELECTRIC_SECRET);
return new Response(
"Missing Electric config: set ELECTRIC_SOURCE_ID/SECRET or ELECTRIC_URL/SECRET",
{ status: 500 },
);
}
if (ELECTRIC_SOURCE_ID && ELECTRIC_SOURCE_SECRET) {
originUrl = new URL("/v1/shape", "https://api.electric-sql.cloud");
originUrl.searchParams.set("source_id", ELECTRIC_SOURCE_ID);
originUrl.searchParams.set("source_secret", ELECTRIC_SOURCE_SECRET);
} else if (ELECTRIC_URL && ELECTRIC_SECRET) {
originUrl = new URL("/v1/shape", ELECTRIC_URL);
originUrl.searchParams.set("secret", ELECTRIC_SECRET);
} else {
return new Response(
"Missing Electric config: set ELECTRIC_SOURCE_ID/SECRET or ELECTRIC_URL/SECRET",
{ status: 500 },
);
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/api/src/app/api/electric/`[...path]/route.ts around lines 35 - 47, The
local branch builds originUrl incorrectly by calling new URL(ELECTRIC_URL) which
omits the '/v1/shape' path; update the branch that handles
ELECTRIC_URL/ELECTRIC_SECRET so originUrl is created using the base plus
'/v1/shape' (e.g., new URL('/v1/shape', ELECTRIC_URL)) and then set the "secret"
search param on that URL (referencing originUrl, ELECTRIC_URL, ELECTRIC_SECRET
in route.ts).


url.searchParams.forEach((value, key) => {
Expand Down Expand Up @@ -85,7 +89,7 @@ export async function GET(request: Request): Promise<Response> {
const response = await fetch(originUrl.toString());

const headers = new Headers(response.headers);
headers.append("Vary", "Authorization, X-Electric-Backend");
headers.append("Vary", "Authorization");

if (headers.get("content-encoding")) {
headers.delete("content-encoding");
Expand Down
4 changes: 2 additions & 2 deletions apps/api/src/env.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ export const env = createEnv({
server: {
DATABASE_URL: z.string(),
DATABASE_URL_UNPOOLED: z.string(),
ELECTRIC_URL: z.string().url(),
ELECTRIC_SECRET: z.string().min(16),
ELECTRIC_SOURCE_ID: z.string().optional(),
ELECTRIC_SOURCE_SECRET: z.string().optional(),
ELECTRIC_URL: z.string().url().optional(),
ELECTRIC_SECRET: z.string().optional(),
Comment on lines +15 to +16
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

ELECTRIC_SECRET loses its minimum-length guard.

The previous z.string().min(16) provided a sanity floor when the secret was provided. The new z.string().optional() accepts any length (including a 1-character value) when set for local dev. Consider z.string().min(16).optional() to preserve the strength check while still allowing the field to be absent.

🛡️ Proposed fix
-		ELECTRIC_SECRET: z.string().optional(),
+		ELECTRIC_SECRET: z.string().min(16).optional(),
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
ELECTRIC_URL: z.string().url().optional(),
ELECTRIC_SECRET: z.string().optional(),
ELECTRIC_URL: z.string().url().optional(),
ELECTRIC_SECRET: z.string().min(16).optional(),
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@apps/api/src/env.ts` around lines 15 - 16, ELECTRIC_SECRET's schema lost its
minimum-length validation; update the zod schema for the ELECTRIC_SECRET entry
in env.ts to require a minimum length when present by changing its validator to
use min(16) before making it optional (i.e., use z.string().min(16).optional()),
so the field can still be omitted but any provided secret must be at least 16
characters.

BLOB_READ_WRITE_TOKEN: z.string(),
GOOGLE_CLIENT_ID: z.string().min(1),
GOOGLE_CLIENT_SECRET: z.string().min(1),
Expand Down
2 changes: 1 addition & 1 deletion apps/api/src/proxy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ function getCorsHeaders(origin: string | null) {
"Access-Control-Allow-Origin": isAllowed ? origin : "",
"Access-Control-Allow-Methods": "GET, POST, PUT, PATCH, DELETE, OPTIONS",
"Access-Control-Allow-Headers":
"Content-Type, Authorization, x-trpc-source, trpc-accept, X-Electric-Backend, Producer-Id, Producer-Epoch, Producer-Seq, Stream-Closed",
"Content-Type, Authorization, x-trpc-source, trpc-accept, Producer-Id, Producer-Epoch, Producer-Seq, Stream-Closed",
"Access-Control-Expose-Headers": [
// Electric sync headers
"electric-offset",
Expand Down
4 changes: 2 additions & 2 deletions apps/desktop/electron.vite.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ export default defineConfig({
),
"process.env.STREAMS_URL": defineEnv(
process.env.STREAMS_URL,
"https://superset-stream.fly.dev",
"https://streams.superset.sh",
),
"process.env.DESKTOP_VITE_PORT": defineEnv(process.env.DESKTOP_VITE_PORT),
"process.env.DESKTOP_NOTIFICATIONS_PORT": defineEnv(
Expand Down Expand Up @@ -178,7 +178,7 @@ export default defineConfig({
),
"process.env.STREAMS_URL": defineEnv(
process.env.STREAMS_URL,
"https://superset-stream.fly.dev",
"https://streams.superset.sh",
),
"process.env.DESKTOP_VITE_PORT": defineEnv(process.env.DESKTOP_VITE_PORT),
"process.env.DESKTOP_NOTIFICATIONS_PORT": defineEnv(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,6 @@ const electricHeaders = {
const token = getAuthToken();
return token ? `Bearer ${token}` : "";
},
"X-Electric-Backend": "cloud",
};

const organizationsCollection = createCollection(
Expand Down
32 changes: 0 additions & 32 deletions fly.toml

This file was deleted.

Loading