Skip to content
Merged

Dev #565

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
913b6bb
fix: use UTC0 for database to prevent /etc/localtime from affecting t…
Oct 21, 2026
003d435
chore(lint): replace ESLint with Biome and keep TypeScript 7
RambokDev Oct 24, 2026
20953a8
fix(deps): upgrade packages with critical and high security advisories
RambokDev Oct 24, 2026
a40703b
chore(deps): bump data, storage and email packages (patch/minor)
RambokDev Oct 24, 2026
1abccb3
chore(deps): bump UI and form packages (patch/minor)
RambokDev Oct 24, 2026
2c21142
chore(deps): align @types/node with the Node 22 runtime, bump dev too…
RambokDev Oct 24, 2026
19059bb
chore(deps): upgrade all Radix primitives together
RambokDev Oct 24, 2026
217728c
chore(deps): upgrade motion to 14 and drop framer-motion
RambokDev Oct 24, 2026
aec8f99
chore(deps): replace deprecated @react-email/components with react-email
RambokDev Oct 24, 2026
d90db77
chore(deps): upgrade dotenv to 18
RambokDev Oct 24, 2026
eace444
chore(deps): upgrade googleapis to 188
RambokDev Oct 24, 2026
45ed485
chore(deps): upgrade OpenTelemetry metrics SDK to 3.0
RambokDev Oct 24, 2026
280cc55
chore(deps): refresh transitive undici where its range allows the patch
RambokDev Oct 24, 2026
39d0442
chore(deps): move the runtime to Node 24
RambokDev Oct 24, 2026
c31986f
Merge pull request #564 from Portabase/chore/dependencies
RambokDev Oct 25, 2026
3865231
Merge pull request #561 from Portabase/fix/localtime-timestamps
RambokDev Oct 25, 2026
300cebe
fix: emails templates
RambokDev Oct 25, 2026
395cb68
fix(security): organization update and delete require an organization…
RambokDev Oct 25, 2026
bd725b2
fix: refactoring
RambokDev Oct 25, 2026
4955ba2
Merge pull request #566 from Portabase/fix/organization-update-author…
RambokDev Oct 25, 2026
204183b
fix(organizations): rename must not wipe an organization's members
RambokDev Oct 25, 2026
aa06b5e
fix: refactoring
RambokDev Oct 25, 2026
c3c1d23
Merge pull request #567 from Portabase/fix/org-rename-member-wipe
RambokDev Oct 25, 2026
bf79744
fix(security): stop sending channel credentials to organization members
RambokDev Oct 25, 2026
ae109e0
fix(database): mask database password in polled database data
RambokDev Oct 25, 2026
09d34ad
Merge pull request #568 from Portabase/fix/channel-config-exposure
RambokDev Oct 25, 2026
3329315
fix: org channels link
RambokDev Oct 25, 2026
94deb3b
fix: tests commit sha
RambokDev Oct 25, 2026
c39a61d
fix: tests commit sha
RambokDev Oct 25, 2026
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
7 changes: 0 additions & 7 deletions .eslintrc.json

This file was deleted.

2 changes: 1 addition & 1 deletion .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ jobs:
run-e2e:
if: github.event.pull_request.head.repo.full_name == github.repository
needs: build-image
uses: portabase/e2e-tests/.github/workflows/run-e2e.yml@fc613d6984ff96d08c219f2459be8ec4b047f929 # main on September 11, 2026
uses: portabase/e2e-tests/.github/workflows/run-e2e.yml@93ea53b60cb00665be9869d62fa50f9a2c539730 # main on October 25, 2026
with:
server_image: ${{ needs.build-image.outputs.image }}
secrets:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
- uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4
- uses: actions/setup-node@v4
with:
node-version: "lts/*"
node-version: "24"
cache: "pnpm"

- run: pnpm install --frozen-lockfile
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ export default async function RoutePage(
),
with: {
databases: true,
storagePolicies: { with: { storageChannel: true } },
alertPolicies: { with: { notificationChannel: true } },
storagePolicies: true,
alertPolicies: true,
retentionPolicy: true,
},
});
Expand Down
10 changes: 7 additions & 3 deletions app/(customer)/dashboard/(organization)/settings/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,14 @@ export default async function RoutePage(props: PageParams<{ slug: string }>) {
notFound();
}

const notificationChannels = await getOrganizationChannels(organization.id);
const storageChannels = await getOrganizationStorageChannels(organization.id);
const agents = await getOrganizationAgents(organization.id);
const permissions = computeOrganizationPermissions(activeMember);
const notificationChannels = permissions.canManageNotifications
? await getOrganizationChannels(organization.id)
: [];
const storageChannels = permissions.canManageStorages
? await getOrganizationStorageChannels(organization.id)
: [];
const agents = await getOrganizationAgents(organization.id);
Comment thread
RambokDev marked this conversation as resolved.

const users = await db.query.user.findMany({
where: (fields) => isNull(fields.deletedAt),
Expand Down
53 changes: 53 additions & 0 deletions biome.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"$schema": "https://biomejs.dev/schemas/2.6.2/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
},
"files": {
"ignoreUnknown": false,
"includes": ["**", "!helm/templates"]
},
"formatter": {
"enabled": false
},
"linter": {
"enabled": true,
"rules": {
"preset": "recommended",
"correctness": {
"noUnusedImports": {
"level": "error",
"fix": "safe"
}
},
"nursery": {
"useTailwindSortedClasses": {
"level": "warn",
"fix": "unsafe"
}
}
}
},
"javascript": {
"formatter": {
"quoteStyle": "double"
}
},
"css": {
"parser": {
"cssModules": true,
"tailwindDirectives": true
}
},
"assist": {
"enabled": true,
"actions": {
"source": {
"organizeImports": "on"
}
}
},
"tailwind": { "mergeFunctions": ["clsx", "cn", "tw"], "variantFunctions": ["cva"] }
}
12 changes: 5 additions & 7 deletions docker/dockerfile/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM --platform=$BUILDPLATFORM node:22-slim AS runtime-base
FROM --platform=$BUILDPLATFORM node:24-bookworm-slim AS runtime-base

ARG NGINX_VERSION=1.30.4

Expand Down Expand Up @@ -82,7 +82,7 @@ COPY --from=tusd-base /tusddist/tusd /tusd

FROM build-base AS build-env

RUN corepack enable && corepack prepare pnpm@latest --activate
RUN corepack enable

FROM build-env AS deps

Expand Down Expand Up @@ -139,12 +139,10 @@ ENV SHARP_IGNORE_GLOBAL_LIBVIPS=1
RUN mkdir -p /tmp/sharp-install \
&& cd /tmp/sharp-install \
&& npm init -y >/dev/null 2>&1 \
&& npm install --no-save --no-package-lock sharp@0.35.3 \
&& npm install --no-save --no-package-lock sharp@0.35.5 \
&& rm -rf /app/node_modules/sharp /app/node_modules/@img \
&& cp -R /tmp/sharp-install/node_modules/. /app/node_modules/ \
&& chown -R 1001:1001 \
/app/node_modules/sharp /app/node_modules/@img \
/app/node_modules/detect-libc /app/node_modules/semver /app/node_modules/tslib \
&& chown -R 1001:1001 /tmp/sharp-install/node_modules \
&& cp -a /tmp/sharp-install/node_modules/. /app/node_modules/ \
&& rm -rf /tmp/sharp-install

COPY --from=tusd-dist /tusd /usr/local/bin/tusd
Expand Down
14 changes: 0 additions & 14 deletions eslint.config.mjs

This file was deleted.

136 changes: 67 additions & 69 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"dev": "next dev --turbopack -p 8887",
"build": "next build --experimental-build-mode compile",
"start": "next start",
"lint": "next lint",
"lint": "biome lint .",
"email": "email dev --dir ./src/components/emails",
"db:generate": "drizzle-kit generate",
"db:migrate": "drizzle-kit migrate",
Expand All @@ -16,106 +16,104 @@
},
"dependencies": {
"@asteasolutions/zod-to-openapi": "^9.1.0",
"@azure/storage-blob": "^12.33.0",
"@better-auth/api-key": "^1.7.4",
"@better-auth/core": "^1.7.4",
"@better-auth/passkey": "^1.7.4",
"@better-auth/sso": "^1.7.4",
"@google-cloud/storage": "^8.1.0",
"@hookform/resolvers": "^5.9.1",
"@modelcontextprotocol/sdk": "^1.30.0",
"@azure/storage-blob": "^12.34.0",
"@better-auth/api-key": "^1.7.12",
"@better-auth/core": "^1.7.12",
"@better-auth/passkey": "^1.7.12",
"@better-auth/sso": "^1.7.12",
"@google-cloud/storage": "^8.4.0",
"@hookform/resolvers": "^6.0.0",
"@modelcontextprotocol/sdk": "^1.32.2",
"@onboardjs/react": "1.0.0-rc.5",
"@opentelemetry/api": "^1.9.1",
"@opentelemetry/exporter-metrics-otlp-http": "^0.221.0",
"@opentelemetry/resources": "^2.11.0",
"@opentelemetry/sdk-metrics": "^2.11.0",
"@opentelemetry/api": "^1.10.0",
"@opentelemetry/exporter-metrics-otlp-http": "^0.300.0",
"@opentelemetry/resources": "^3.0.0",
"@opentelemetry/sdk-metrics": "^3.0.0",
"@opentelemetry/semantic-conventions": "^1.43.0",
"@radix-ui/react-accordion": "^1.2.20",
"@radix-ui/react-alert-dialog": "^1.1.23",
"@radix-ui/react-avatar": "^1.2.6",
"@radix-ui/react-checkbox": "^1.3.11",
"@radix-ui/react-collapsible": "^1.1.20",
"@radix-ui/react-dialog": "^1.1.23",
"@radix-ui/react-dropdown-menu": "^2.1.24",
"@radix-ui/react-accordion": "^1.3.1",
"@radix-ui/react-alert-dialog": "^1.2.1",
"@radix-ui/react-avatar": "^1.3.1",
"@radix-ui/react-checkbox": "^1.4.1",
"@radix-ui/react-collapsible": "^1.2.1",
"@radix-ui/react-dialog": "^1.3.1",
"@radix-ui/react-dropdown-menu": "^2.2.1",
"@radix-ui/react-icons": "^1.3.2",
"@radix-ui/react-label": "^2.1.15",
"@radix-ui/react-popover": "^1.1.23",
"@radix-ui/react-progress": "^1.1.16",
"@radix-ui/react-radio-group": "^1.4.7",
"@radix-ui/react-scroll-area": "^1.2.18",
"@radix-ui/react-select": "^2.3.7",
"@radix-ui/react-separator": "^1.1.15",
"@radix-ui/react-slot": "^1.3.3",
"@radix-ui/react-switch": "^1.3.7",
"@radix-ui/react-tabs": "^1.1.21",
"@radix-ui/react-toggle": "^1.1.18",
"@radix-ui/react-tooltip": "^1.2.16",
"@react-email/components": "^1.0.12",
"@radix-ui/react-label": "^2.1.17",
"@radix-ui/react-popover": "^1.3.1",
"@radix-ui/react-progress": "^1.2.1",
"@radix-ui/react-radio-group": "^1.5.1",
"@radix-ui/react-scroll-area": "^1.4.0",
"@radix-ui/react-select": "^2.4.1",
"@radix-ui/react-separator": "^1.2.0",
"@radix-ui/react-slot": "^1.5.0",
"@radix-ui/react-switch": "^1.4.1",
"@radix-ui/react-tabs": "^1.2.1",
"@radix-ui/react-toggle": "^1.2.1",
"@radix-ui/react-tooltip": "^1.4.1",
"@t3-oss/env-nextjs": "^0.13.11",
"@tanstack/react-query": "^5.102.8",
"@tanstack/react-table": "^9.2.4",
"@types/nodemailer": "^8.0.1",
"better-auth": "^1.7.4",
"@tanstack/react-query": "^5.104.5",
"@tanstack/react-table": "^9.3.1",
"better-auth": "^1.7.12",
"canvas-confetti": "^1.9.4",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cmdk": "^1.1.1",
"date-fns": "^4.4.0",
"dotenv": "^17.4.2",
"drizzle-orm": "0.45.2",
"dotenv": "^18.0.9",
"drizzle-orm": "0.45.4",
"drizzle-zod": "0.8.3",
"googleapis": "^175.0.0",
"googleapis": "^188.0.0",
"input-otp": "^1.5.0",
"lucide-react": "^1.45.0",
"lucide-react": "^1.61.0",
"minio": "^8.0.7",
"motion": "^13.2.0",
"next": "^16.3.5",
"motion": "^14.6.0",
"next": "^16.4.3",
"next-safe-action": "^8.7.3",
"next-themes": "^0.4.6",
"node-cron": "^4.6.0",
"nodemailer": "^9.1.1",
"p-limit": "^7.3.2",
"pg": "^8.23.0",
"pino": "^10.3.1",
"react": "^19.3.0",
"react-dom": "^19.3.0",
"react-dropzone": "^20.1.1",
"react-email": "^6.9.5",
"react-hook-form": "^7.88.0",
"nodemailer": "^10.2.1",
"p-limit": "^7.3.3",
"pg": "^8.23.1",
"pino": "^10.4.0",
"react": "^19.3.1",
"react-dom": "^19.3.1",
"react-dropzone": "^20.1.4",
"react-email": "^6.11.3",
"react-hook-form": "^7.90.0",
"react-qr-code": "^2.2.0",
"react-twc": "^1.5.1",
"recharts": "^3.10.1",
"server-only": "^0.0.1",
"sharp": "^0.35.4",
"sharp": "^0.35.5",
"sonner": "^2.0.8",
"tailwind-merge": "^3.7.0",
"tar-stream": "^3.2.1",
"uuid": "^14.0.2",
"zod": "4.4.3"
"tar-stream": "^3.2.2",
"uuid": "^14.0.3",
"zod": "4.6.7"
},
"devDependencies": {
"@iconify/react": "^6.0.2",
"@react-email/render": "^2.1.0",
"@release-it/bumper": "^8.0.0",
"@release-it/conventional-changelog": "^12.0.0",
"@biomejs/biome": "^2.6.2",
"@iconify/react": "^6.0.3",
"@release-it/bumper": "^8.0.1",
"@release-it/conventional-changelog": "^12.0.2",
"@tailwindcss/postcss": "^4.3.3",
"@types/canvas-confetti": "^1.9.0",
"@types/node": "^26.5.1",
"@types/node": "^24.19.2",
"@types/pg": "^8.23.1",
"@types/react": "^19.3.0",
"@types/react-dom": "^19.3.0",
"@types/tar-stream": "^3.1.4",
"drizzle-kit": "^0.31.10",
"eslint": "^10.10.0",
"eslint-config-next": "^16.3.5",
"framer-motion": "^13.2.0",
"pino-pretty": "^13.1.3",
"postcss": "^8.5.28",
"@types/tar-stream": "^3.1.5",
"drizzle-kit": "^0.31.11",
"pino-pretty": "^13.2.0",
"postcss": "^8.5.31",
"postcss-load-config": "^6.0.1",
"release-it": "^21.0.2",
"release-it": "^21.1.1",
"tailwindcss": "^4.3.3",
"tw-animate-css": "^1.4.0",
"typescript": "^7.0.2"
},
"engines": {
"node": ">=24.0.0"
},
"packageManager": "pnpm@12.3.4+sha512.961aa41fb077da3a04a441d9f8e15ebc0c96da8ef710b2eb67bf9ee7cb0610eabd48f1fd85f51cffe73846785fa0f87c56a3a872a1d893f8446741b5cce45457"
}
Loading
Loading