devpush 0.0.0-stage → 1.0.0-beta.4
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/README.md +22 -2
- package/agent-release.json +37 -0
- package/dist/package/LICENSE.md +21 -0
- package/dist/package/migrate.mjs +182 -0
- package/dist/package/plugins.mjs +125 -0
- package/dist/package/vite.mjs +439 -0
- package/package.json +168 -3
- package/public/apple-touch-icon.png +0 -0
- package/public/favicon.svg +1 -0
- package/public/logo-email.png +0 -0
- package/public/robots.txt +3 -0
- package/public/social.png +0 -0
- package/src/cloudflare-runtime.d.ts +78 -0
- package/src/components/about-dialog.tsx +70 -0
- package/src/components/copy-button.tsx +74 -0
- package/src/components/logo-mark.tsx +20 -0
- package/src/components/pending-collection.tsx +103 -0
- package/src/components/resource-avatar.tsx +65 -0
- package/src/components/route-error-state.tsx +95 -0
- package/src/components/section-navigation.tsx +39 -0
- package/src/components/settings-layout.tsx +111 -0
- package/src/components/storage-capabilities.tsx +11 -0
- package/src/components/table-pager.tsx +101 -0
- package/src/components/ui/alert-dialog.tsx +180 -0
- package/src/components/ui/alert.tsx +78 -0
- package/src/components/ui/avatar.tsx +58 -0
- package/src/components/ui/badge.tsx +49 -0
- package/src/components/ui/button-group.tsx +38 -0
- package/src/components/ui/button.tsx +67 -0
- package/src/components/ui/card.tsx +82 -0
- package/src/components/ui/chart.tsx +307 -0
- package/src/components/ui/checkbox.tsx +30 -0
- package/src/components/ui/combobox.tsx +256 -0
- package/src/components/ui/dialog.tsx +163 -0
- package/src/components/ui/dropdown-menu.tsx +110 -0
- package/src/components/ui/empty.tsx +65 -0
- package/src/components/ui/field.tsx +192 -0
- package/src/components/ui/input-group.tsx +118 -0
- package/src/components/ui/input-otp.tsx +70 -0
- package/src/components/ui/input.tsx +19 -0
- package/src/components/ui/label.tsx +24 -0
- package/src/components/ui/pagination.tsx +34 -0
- package/src/components/ui/popover.tsx +86 -0
- package/src/components/ui/select.tsx +145 -0
- package/src/components/ui/skeleton.tsx +19 -0
- package/src/components/ui/sonner.tsx +47 -0
- package/src/components/ui/switch.tsx +31 -0
- package/src/components/ui/table.tsx +81 -0
- package/src/components/ui/textarea.tsx +18 -0
- package/src/components/ui/tooltip.tsx +55 -0
- package/src/features/admin/admin-settings.tsx +1048 -0
- package/src/features/auth/current-user-context-query.ts +11 -0
- package/src/features/auth/login-form.tsx +442 -0
- package/src/features/auth/sign-out-menu-item.tsx +42 -0
- package/src/features/deployments/deployment-actions.tsx +336 -0
- package/src/features/deployments/deployment-alias-badge.tsx +35 -0
- package/src/features/deployments/deployment-detail.tsx +596 -0
- package/src/features/deployments/deployment-filters.ts +66 -0
- package/src/features/deployments/deployment-list.tsx +465 -0
- package/src/features/deployments/deployment-visit-links.tsx +104 -0
- package/src/features/deployments/deployments-page.tsx +376 -0
- package/src/features/logs/log-scroll-area.tsx +69 -0
- package/src/features/notifications/email-preferences.tsx +232 -0
- package/src/features/onboarding/profile-onboarding.tsx +162 -0
- package/src/features/plugins/contributions.tsx +118 -0
- package/src/features/projects/backup-job-logs.tsx +143 -0
- package/src/features/projects/backup-policy-delete-dialog.tsx +82 -0
- package/src/features/projects/backup-restore-actions.tsx +573 -0
- package/src/features/projects/backup-status-icon.tsx +33 -0
- package/src/features/projects/backup-target-list.tsx +222 -0
- package/src/features/projects/backup-timestamp.tsx +32 -0
- package/src/features/projects/backup-volume-picker.tsx +158 -0
- package/src/features/projects/compose-service-input.tsx +64 -0
- package/src/features/projects/deploy-readiness.ts +28 -0
- package/src/features/projects/environment-dot.tsx +91 -0
- package/src/features/projects/log-keyword-filter.tsx +48 -0
- package/src/features/projects/manual-deploy-dialog.tsx +563 -0
- package/src/features/projects/pending-section.ts +26 -0
- package/src/features/projects/project-backup-details-pending.tsx +305 -0
- package/src/features/projects/project-backup-details.tsx +936 -0
- package/src/features/projects/project-backup-policy.tsx +644 -0
- package/src/features/projects/project-backup-utils.ts +190 -0
- package/src/features/projects/project-backups-pending.tsx +136 -0
- package/src/features/projects/project-backups.tsx +876 -0
- package/src/features/projects/project-environment-settings.tsx +1128 -0
- package/src/features/projects/project-heading.tsx +68 -0
- package/src/features/projects/project-layout.tsx +188 -0
- package/src/features/projects/project-logs.tsx +461 -0
- package/src/features/projects/project-overview.tsx +280 -0
- package/src/features/projects/project-route-pending.tsx +1064 -0
- package/src/features/projects/project-routing-settings.tsx +663 -0
- package/src/features/projects/project-settings-section.tsx +64 -0
- package/src/features/projects/project-settings-utils.ts +101 -0
- package/src/features/projects/project-settings.tsx +1472 -0
- package/src/features/projects/repository-picker-dialog.tsx +404 -0
- package/src/features/repositories/new-project-dialog-launcher.tsx +44 -0
- package/src/features/repositories/new-project-dialog.tsx +1204 -0
- package/src/features/repositories/new-project-pending.tsx +28 -0
- package/src/features/repositories/repository-list-pending.tsx +59 -0
- package/src/features/servers/server-availability-alert.tsx +44 -0
- package/src/features/servers/server-availability.ts +29 -0
- package/src/features/servers/server-avatar.tsx +52 -0
- package/src/features/servers/server-detail-pending.tsx +315 -0
- package/src/features/servers/server-detail.tsx +855 -0
- package/src/features/servers/server-metric-chart-pending.tsx +38 -0
- package/src/features/servers/server-metric-chart.tsx +182 -0
- package/src/features/servers/server-metric-format.ts +50 -0
- package/src/features/servers/server-metrics-pending.tsx +75 -0
- package/src/features/servers/server-metrics.tsx +136 -0
- package/src/features/servers/team-servers.tsx +432 -0
- package/src/features/settings/settings-route-pending.tsx +406 -0
- package/src/features/teams/backup-storage-settings.tsx +483 -0
- package/src/features/teams/navigation.ts +51 -0
- package/src/features/teams/new-team-dialog.tsx +132 -0
- package/src/features/teams/pending-section.ts +19 -0
- package/src/features/teams/team-header.tsx +1286 -0
- package/src/features/teams/team-heading.tsx +57 -0
- package/src/features/teams/team-home.tsx +391 -0
- package/src/features/teams/team-invite.tsx +155 -0
- package/src/features/teams/team-route-pending.tsx +505 -0
- package/src/features/teams/team-settings.tsx +1555 -0
- package/src/features/teams/use-workspace-updates.ts +126 -0
- package/src/features/users/api-keys-settings.tsx +544 -0
- package/src/features/users/api-scope-selection.tsx +269 -0
- package/src/features/users/connected-apps-settings.tsx +449 -0
- package/src/features/users/mcp-consent.tsx +220 -0
- package/src/features/users/profile-picture.tsx +171 -0
- package/src/features/users/user-settings.tsx +1064 -0
- package/src/lib/account-settings-schema.ts +78 -0
- package/src/lib/action-feedback.ts +81 -0
- package/src/lib/admin-search-schema.ts +8 -0
- package/src/lib/agent-release.d.mts +21 -0
- package/src/lib/agent-release.mjs +90 -0
- package/src/lib/allowlist-schema.ts +79 -0
- package/src/lib/api-key-schema.ts +176 -0
- package/src/lib/auth/client.ts +20 -0
- package/src/lib/avatar-schema.ts +11 -0
- package/src/lib/backup-cron.ts +118 -0
- package/src/lib/backup-database.ts +41 -0
- package/src/lib/backup-feature.ts +2 -0
- package/src/lib/backup-paths.ts +7 -0
- package/src/lib/backup-policy-schema.ts +85 -0
- package/src/lib/backup-resource-schema.ts +12 -0
- package/src/lib/backup-restore-schema.ts +15 -0
- package/src/lib/backup-storage-schema.ts +55 -0
- package/src/lib/deferred-module.ts +38 -0
- package/src/lib/deployment-logs-query.ts +63 -0
- package/src/lib/display-name.ts +7 -0
- package/src/lib/error-message.ts +119 -0
- package/src/lib/form-errors.ts +10 -0
- package/src/lib/internal-redirect.ts +25 -0
- package/src/lib/manual-deploy-options-query.ts +21 -0
- package/src/lib/notification-preferences.ts +43 -0
- package/src/lib/onboarding.ts +11 -0
- package/src/lib/operation-logs-query.ts +51 -0
- package/src/lib/page-head.ts +14 -0
- package/src/lib/project-context-query.ts +257 -0
- package/src/lib/project-creation-schema.ts +64 -0
- package/src/lib/project-env-schema.ts +23 -0
- package/src/lib/project-environments-schema.ts +56 -0
- package/src/lib/project-routing-schema.ts +94 -0
- package/src/lib/project-runtime-config.ts +131 -0
- package/src/lib/project-settings-schema.ts +75 -0
- package/src/lib/public-api-schema.ts +128 -0
- package/src/lib/public-error.ts +337 -0
- package/src/lib/query.ts +13 -0
- package/src/lib/repository-selection-query.ts +11 -0
- package/src/lib/resource-cache.ts +30 -0
- package/src/lib/runtime-id.ts +19 -0
- package/src/lib/search.ts +14 -0
- package/src/lib/server-context-query.ts +43 -0
- package/src/lib/server-name-schema.ts +11 -0
- package/src/lib/settings-conflict.ts +45 -0
- package/src/lib/settings-version.ts +7 -0
- package/src/lib/team-context-query.ts +126 -0
- package/src/lib/team-context-schema.ts +8 -0
- package/src/lib/team-forms-schema.ts +45 -0
- package/src/lib/team-role.ts +13 -0
- package/src/lib/team-settings-schema.ts +48 -0
- package/src/lib/urls.ts +3 -0
- package/src/lib/use-avatar-input.ts +61 -0
- package/src/lib/use-refresh-error.ts +18 -0
- package/src/lib/use-settings-version.ts +23 -0
- package/src/lib/utils.ts +6 -0
- package/src/lib/validation.ts +5 -0
- package/src/lib/workspace-updates.ts +53 -0
- package/src/package/config.ts +10 -0
- package/src/package/env.mjs +54 -0
- package/src/package/migrate-api.d.ts +5 -0
- package/src/package/migrate.ts +56 -0
- package/src/package/plugins.ts +141 -0
- package/src/package/sqlite.mjs +2 -0
- package/src/package/vite-api.d.ts +5 -0
- package/src/package/vite.ts +324 -0
- package/src/package/watch-guard.cjs +26 -0
- package/src/plugins/client.ts +57 -0
- package/src/plugins/contract.ts +188 -0
- package/src/plugins/default.server.ts +4 -0
- package/src/plugins/default.ui.ts +4 -0
- package/src/plugins/operations.ts +45 -0
- package/src/plugins/server.ts +197 -0
- package/src/plugins/version.ts +1 -0
- package/src/routeTree.gen.ts +1275 -0
- package/src/router.tsx +46 -0
- package/src/routes/$teamSlug.index.tsx +53 -0
- package/src/routes/$teamSlug.new-project.tsx +13 -0
- package/src/routes/$teamSlug.projects.$projectName.backups.$backupId.tsx +40 -0
- package/src/routes/$teamSlug.projects.$projectName.backups.tsx +82 -0
- package/src/routes/$teamSlug.projects.$projectName.deployments.$deploymentId.tsx +52 -0
- package/src/routes/$teamSlug.projects.$projectName.deployments.tsx +86 -0
- package/src/routes/$teamSlug.projects.$projectName.logs.tsx +55 -0
- package/src/routes/$teamSlug.projects.$projectName.settings.tsx +51 -0
- package/src/routes/$teamSlug.projects.$projectName.tsx +106 -0
- package/src/routes/$teamSlug.projects.tsx +40 -0
- package/src/routes/$teamSlug.servers.$serverId.tsx +31 -0
- package/src/routes/$teamSlug.servers.index.tsx +59 -0
- package/src/routes/$teamSlug.servers.tsx +7 -0
- package/src/routes/$teamSlug.settings.tsx +56 -0
- package/src/routes/$teamSlug.tsx +86 -0
- package/src/routes/[.]well-known.oauth-authorization-server.api.auth.ts +13 -0
- package/src/routes/[.]well-known.oauth-protected-resource.mcp.ts +6 -0
- package/src/routes/__root.tsx +155 -0
- package/src/routes/admin.tsx +55 -0
- package/src/routes/api/agents/certificates.ts +21 -0
- package/src/routes/api/agents/credentials/rotate.ts +22 -0
- package/src/routes/api/agents/heartbeat.ts +42 -0
- package/src/routes/api/agents/job-logs.ts +22 -0
- package/src/routes/api/agents/jobs/complete.ts +22 -0
- package/src/routes/api/agents/jobs/next.ts +29 -0
- package/src/routes/api/agents/jobs/progress.ts +32 -0
- package/src/routes/api/agents/jobs/status.ts +22 -0
- package/src/routes/api/agents/register.ts +45 -0
- package/src/routes/api/agents/runtime-logs.ts +22 -0
- package/src/routes/api/agents/switch.ts +25 -0
- package/src/routes/api/auth/$.ts +38 -0
- package/src/routes/api/cron/backups.ts +33 -0
- package/src/routes/api/cron/maintenance.ts +30 -0
- package/src/routes/api/github/install.callback.ts +51 -0
- package/src/routes/api/github/install.ts +41 -0
- package/src/routes/api/github/webhook.ts +11 -0
- package/src/routes/api/health.ts +19 -0
- package/src/routes/api/install/agent.$token.ts +50 -0
- package/src/routes/api/install/agent.binary.ts +83 -0
- package/src/routes/api/install/agent.checksum.ts +45 -0
- package/src/routes/api/install/agent.ts +26 -0
- package/src/routes/api/plugins/$.ts +11 -0
- package/src/routes/api/v1/$.ts +15 -0
- package/src/routes/api/workspaces/updates.ts +8 -0
- package/src/routes/auth.login.tsx +50 -0
- package/src/routes/deployments.$deploymentId.unavailable.tsx +21 -0
- package/src/routes/index.tsx +23 -0
- package/src/routes/invites.$token.tsx +35 -0
- package/src/routes/mcp.ts +13 -0
- package/src/routes/oauth.consent.tsx +54 -0
- package/src/routes/onboarding.tsx +37 -0
- package/src/routes/onboarding.workspace.tsx +44 -0
- package/src/routes/settings.tsx +30 -0
- package/src/routes/uploads/avatars/$fileName.ts +44 -0
- package/src/server/admin/access.ts +67 -0
- package/src/server/admin/functions.ts +122 -0
- package/src/server/admin/service.ts +260 -0
- package/src/server/agents/backup-state.ts +210 -0
- package/src/server/agents/certificates.ts +96 -0
- package/src/server/agents/claims.ts +116 -0
- package/src/server/agents/cleanup.ts +52 -0
- package/src/server/agents/compatibility.ts +116 -0
- package/src/server/agents/completion.ts +83 -0
- package/src/server/agents/container-cleanup-state.ts +51 -0
- package/src/server/agents/deployment-state.ts +111 -0
- package/src/server/agents/job-payloads.ts +159 -0
- package/src/server/agents/jobs.ts +1293 -0
- package/src/server/agents/protocol.ts +400 -0
- package/src/server/agents/reconciliation.ts +43 -0
- package/src/server/agents/runtime-logs.ts +337 -0
- package/src/server/agents/runtime-state.ts +125 -0
- package/src/server/api/admission.ts +12 -0
- package/src/server/api/authorization.ts +115 -0
- package/src/server/api/credentials.ts +569 -0
- package/src/server/api/cursors.ts +72 -0
- package/src/server/api/errors.ts +24 -0
- package/src/server/api/functions.ts +60 -0
- package/src/server/api/handler.ts +274 -0
- package/src/server/api/mutation-operations.ts +913 -0
- package/src/server/api/operation-context.ts +139 -0
- package/src/server/api/operation-contract.ts +1099 -0
- package/src/server/api/operations.ts +64 -0
- package/src/server/api/read-operations.ts +891 -0
- package/src/server/api/retention.ts +33 -0
- package/src/server/auth/access.ts +109 -0
- package/src/server/auth/auth-methods.ts +28 -0
- package/src/server/auth/better-auth.ts +518 -0
- package/src/server/auth/context.ts +28 -0
- package/src/server/auth/email-change.ts +47 -0
- package/src/server/auth/email-delivery.ts +51 -0
- package/src/server/auth/provider-identity.ts +19 -0
- package/src/server/auth/provider-tokens.ts +27 -0
- package/src/server/auth/session.server.ts +19 -0
- package/src/server/backups/database-commands.ts +40 -0
- package/src/server/backups/destination.ts +12 -0
- package/src/server/backups/feature.ts +6 -0
- package/src/server/backups/policy-validation.ts +51 -0
- package/src/server/backups/queue-state.ts +137 -0
- package/src/server/backups/service.ts +918 -0
- package/src/server/backups/storage-functions.ts +42 -0
- package/src/server/backups/storage-state.ts +67 -0
- package/src/server/backups/storage.ts +237 -0
- package/src/server/config.ts +274 -0
- package/src/server/db/atomic.ts +16 -0
- package/src/server/db/d1-connection.ts +83 -0
- package/src/server/db/errors.ts +17 -0
- package/src/server/db/index.cloudflare.ts +15 -0
- package/src/server/db/index.ts +35 -0
- package/src/server/db/libsql-connection.ts +72 -0
- package/src/server/db/log-schema.ts +102 -0
- package/src/server/db/migrate-libsql.ts +29 -0
- package/src/server/db/migrate-sqlite.ts +47 -0
- package/src/server/db/migration-history.ts +12 -0
- package/src/server/db/migrations-logs/0000_initial.sql +48 -0
- package/src/server/db/migrations-logs/0001_runtime_log_order.sql +2 -0
- package/src/server/db/migrations-logs/meta/0000_snapshot.json +327 -0
- package/src/server/db/migrations-logs/meta/0001_snapshot.json +329 -0
- package/src/server/db/migrations-logs/meta/_journal.json +20 -0
- package/src/server/db/migrations-sqlite/0000_initial.sql +894 -0
- package/src/server/db/migrations-sqlite/0001_agent_indexes.sql +5 -0
- package/src/server/db/migrations-sqlite/meta/0000_snapshot.json +5816 -0
- package/src/server/db/migrations-sqlite/meta/0001_snapshot.json +5841 -0
- package/src/server/db/migrations-sqlite/meta/_journal.json +20 -0
- package/src/server/db/oauth-schema.ts +216 -0
- package/src/server/db/remote-config.ts +47 -0
- package/src/server/db/schema.ts +1218 -0
- package/src/server/db/sqlite-connection.ts +94 -0
- package/src/server/db/sqlite-files.ts +27 -0
- package/src/server/db/sqlite-params.ts +19 -0
- package/src/server/db/worker-connection.ts +47 -0
- package/src/server/deleted-resources.ts +133 -0
- package/src/server/deletion-recovery.ts +272 -0
- package/src/server/email/layout.tsx +85 -0
- package/src/server/email/notification-template.tsx +62 -0
- package/src/server/email/otp-template.tsx +48 -0
- package/src/server/email/service.ts +251 -0
- package/src/server/email/team-invite-template.tsx +59 -0
- package/src/server/email/theme.ts +10 -0
- package/src/server/github/http.ts +14 -0
- package/src/server/github/install-state.ts +48 -0
- package/src/server/github/service.ts +831 -0
- package/src/server/github/webhook-handler.ts +198 -0
- package/src/server/github/webhooks.ts +205 -0
- package/src/server/http/auth.ts +11 -0
- package/src/server/http/error-diagnostics.ts +66 -0
- package/src/server/http/plugin-request.ts +15 -0
- package/src/server/http/proxy-request.ts +53 -0
- package/src/server/http/public-errors.ts +48 -0
- package/src/server/http/rate-limit.ts +59 -0
- package/src/server/http/request-body.ts +54 -0
- package/src/server/http/request-ip.ts +54 -0
- package/src/server/http/security-headers.ts +36 -0
- package/src/server/install/agent-binary.ts +230 -0
- package/src/server/install/agent-script.ts +565 -0
- package/src/server/install/release-binary.ts +65 -0
- package/src/server/logs/budget.ts +72 -0
- package/src/server/logs/cleanup.ts +64 -0
- package/src/server/logs/deployments.ts +98 -0
- package/src/server/logs/operations.ts +145 -0
- package/src/server/logs/retention.ts +39 -0
- package/src/server/maintenance.ts +61 -0
- package/src/server/mcp/connections.ts +358 -0
- package/src/server/mcp/functions.ts +63 -0
- package/src/server/mcp/handler.ts +295 -0
- package/src/server/mcp/oauth-discovery.cloudflare.ts +6 -0
- package/src/server/mcp/oauth-discovery.ts +8 -0
- package/src/server/mcp/oauth-provider.ts +220 -0
- package/src/server/mcp/urls.ts +20 -0
- package/src/server/notifications/functions.ts +51 -0
- package/src/server/notifications/observe.ts +303 -0
- package/src/server/notifications/outbox.ts +335 -0
- package/src/server/notifications/preferences.ts +131 -0
- package/src/server/notifications/query.ts +16 -0
- package/src/server/plugins/scope.ts +17 -0
- package/src/server/plugins/server-context.ts +157 -0
- package/src/server/plugins/services.server.ts +10 -0
- package/src/server/plugins/workspace-access.ts +74 -0
- package/src/server/projects/backup-policy-state.ts +68 -0
- package/src/server/projects/backups.ts +219 -0
- package/src/server/projects/compose-metadata.ts +174 -0
- package/src/server/projects/configuration-state.ts +90 -0
- package/src/server/projects/context.ts +909 -0
- package/src/server/projects/creation-state.ts +46 -0
- package/src/server/projects/deletion-state.ts +69 -0
- package/src/server/projects/deployment-config.ts +139 -0
- package/src/server/projects/deployment-logs.ts +97 -0
- package/src/server/projects/deployments.ts +1123 -0
- package/src/server/projects/domain-state.ts +71 -0
- package/src/server/projects/environment-branches.ts +75 -0
- package/src/server/projects/environment-state.ts +158 -0
- package/src/server/projects/environments.ts +424 -0
- package/src/server/projects/functions.ts +748 -0
- package/src/server/projects/generated-hostname.ts +77 -0
- package/src/server/projects/hostnames.ts +244 -0
- package/src/server/projects/mappers.ts +457 -0
- package/src/server/projects/names.ts +41 -0
- package/src/server/projects/project-env-vars.ts +28 -0
- package/src/server/projects/queue-state.ts +118 -0
- package/src/server/projects/repository.ts +368 -0
- package/src/server/projects/route-state.ts +37 -0
- package/src/server/projects/runtime-logs.ts +97 -0
- package/src/server/projects/settings-context.ts +58 -0
- package/src/server/projects/settings.ts +738 -0
- package/src/server/projects/types.ts +355 -0
- package/src/server/realtime/agent-events.ts +32 -0
- package/src/server/realtime/node-broadcaster.ts +71 -0
- package/src/server/realtime/node-handler.ts +55 -0
- package/src/server/realtime/service.ts +125 -0
- package/src/server/realtime/workspace-object.cloudflare.ts +62 -0
- package/src/server/realtime/workspace-object.ts +3 -0
- package/src/server/resources/color.ts +13 -0
- package/src/server/runtime/background.ts +21 -0
- package/src/server/runtime/node-asset-cache-plugin.ts +12 -0
- package/src/server/runtime/node-scheduler-plugin.ts +17 -0
- package/src/server/runtime/node-scheduler.ts +51 -0
- package/src/server/runtime/platform-env.cloudflare.ts +17 -0
- package/src/server/runtime/platform-env.ts +19 -0
- package/src/server/runtime/scheduled-task-error.ts +9 -0
- package/src/server/scheduled-tasks.ts +28 -0
- package/src/server/secrets/crypto.ts +56 -0
- package/src/server/servers/functions.ts +233 -0
- package/src/server/servers/lifecycle.ts +122 -0
- package/src/server/servers/metric-history-schema.ts +24 -0
- package/src/server/servers/metric-history.ts +55 -0
- package/src/server/servers/monitoring.ts +592 -0
- package/src/server/servers/service.ts +1211 -0
- package/src/server/servers/status.ts +32 -0
- package/src/server/servers/switch.ts +96 -0
- package/src/server/settings-version.ts +43 -0
- package/src/server/storage/capabilities.ts +6 -0
- package/src/server/storage/local-object-store.cloudflare.ts +7 -0
- package/src/server/storage/local-object-store.ts +50 -0
- package/src/server/storage/object-store.ts +160 -0
- package/src/server/teams/creation.ts +51 -0
- package/src/server/teams/delete-policy.ts +13 -0
- package/src/server/teams/deletion-state.ts +80 -0
- package/src/server/teams/functions.ts +324 -0
- package/src/server/teams/invitations.ts +38 -0
- package/src/server/teams/membership.ts +86 -0
- package/src/server/teams/queries.ts +261 -0
- package/src/server/teams/service.ts +1127 -0
- package/src/server/teams/types.ts +101 -0
- package/src/server/uploads/avatar.ts +133 -0
- package/src/server/users/deletion-state.ts +93 -0
- package/src/server/users/functions.ts +160 -0
- package/src/server/users/onboarding.ts +17 -0
- package/src/server/users/service.ts +644 -0
- package/src/server.ts +55 -0
- package/src/styles/shadcn.css +653 -0
- package/src/styles/theme.css +76 -0
- package/src/styles.css +177 -0
- package/wrangler.template.jsonc +37 -0
|
@@ -0,0 +1,894 @@
|
|
|
1
|
+
CREATE TABLE `account` (
|
|
2
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
3
|
+
`account_id` text NOT NULL,
|
|
4
|
+
`provider_id` text NOT NULL,
|
|
5
|
+
`user_id` text NOT NULL,
|
|
6
|
+
`access_token` text,
|
|
7
|
+
`refresh_token` text,
|
|
8
|
+
`id_token` text,
|
|
9
|
+
`access_token_expires_at` integer,
|
|
10
|
+
`refresh_token_expires_at` integer,
|
|
11
|
+
`scope` text,
|
|
12
|
+
`password` text,
|
|
13
|
+
`provider_account_name` text,
|
|
14
|
+
`provider_account_email` text,
|
|
15
|
+
`provider_account_username` text,
|
|
16
|
+
`provider_account_image` text,
|
|
17
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
18
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
19
|
+
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
|
|
20
|
+
);
|
|
21
|
+
--> statement-breakpoint
|
|
22
|
+
CREATE INDEX `account_user_id_idx` ON `account` (`user_id`);--> statement-breakpoint
|
|
23
|
+
CREATE TABLE `agent_jobs` (
|
|
24
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
25
|
+
`type` text NOT NULL,
|
|
26
|
+
`status` text DEFAULT 'queued' NOT NULL,
|
|
27
|
+
`server_id` text NOT NULL,
|
|
28
|
+
`team_id` text,
|
|
29
|
+
`project_id` text,
|
|
30
|
+
`payload` text NOT NULL,
|
|
31
|
+
`attempt` integer DEFAULT 0 NOT NULL,
|
|
32
|
+
`max_attempts` integer DEFAULT 5 NOT NULL,
|
|
33
|
+
`error_message` text,
|
|
34
|
+
`claimed_at` integer,
|
|
35
|
+
`available_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
36
|
+
`finished_at` integer,
|
|
37
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
38
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
39
|
+
FOREIGN KEY (`server_id`) REFERENCES `servers`(`id`) ON UPDATE no action ON DELETE restrict,
|
|
40
|
+
FOREIGN KEY (`team_id`) REFERENCES `teams`(`id`) ON UPDATE no action ON DELETE set null,
|
|
41
|
+
FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON UPDATE no action ON DELETE set null,
|
|
42
|
+
CONSTRAINT "agent_jobs_type_enum" CHECK("agent_jobs"."type" in ('deploy', 'deprovision', 'purge', 'backup', 'restore', 'backup_cleanup')),
|
|
43
|
+
CONSTRAINT "agent_jobs_status_enum" CHECK("agent_jobs"."status" in ('queued', 'running', 'succeeded', 'failed', 'canceled', 'abandoned'))
|
|
44
|
+
);
|
|
45
|
+
--> statement-breakpoint
|
|
46
|
+
CREATE INDEX `agent_jobs_server_status_idx` ON `agent_jobs` (`server_id`,`status`);--> statement-breakpoint
|
|
47
|
+
CREATE INDEX `agent_jobs_project_idx` ON `agent_jobs` (`project_id`);--> statement-breakpoint
|
|
48
|
+
CREATE INDEX `agent_jobs_team_idx` ON `agent_jobs` (`team_id`);--> statement-breakpoint
|
|
49
|
+
CREATE TABLE `agent_runtime_observations` (
|
|
50
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
51
|
+
`server_id` text NOT NULL,
|
|
52
|
+
`runtime_id` text NOT NULL,
|
|
53
|
+
`services` text,
|
|
54
|
+
`first_seen_at` integer NOT NULL,
|
|
55
|
+
`last_seen_at` integer NOT NULL,
|
|
56
|
+
`cleanup_queued_at` integer,
|
|
57
|
+
`purge_queued_at` integer,
|
|
58
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
59
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
60
|
+
FOREIGN KEY (`server_id`) REFERENCES `servers`(`id`) ON UPDATE no action ON DELETE cascade
|
|
61
|
+
);
|
|
62
|
+
--> statement-breakpoint
|
|
63
|
+
CREATE UNIQUE INDEX `agent_runtime_observations_server_runtime_idx` ON `agent_runtime_observations` (`server_id`,`runtime_id`);--> statement-breakpoint
|
|
64
|
+
CREATE INDEX `agent_runtime_observations_server_idx` ON `agent_runtime_observations` (`server_id`);--> statement-breakpoint
|
|
65
|
+
CREATE INDEX `agent_runtime_observations_cleanup_idx` ON `agent_runtime_observations` (`cleanup_queued_at`);--> statement-breakpoint
|
|
66
|
+
CREATE INDEX `agent_runtime_observations_purge_idx` ON `agent_runtime_observations` (`purge_queued_at`);--> statement-breakpoint
|
|
67
|
+
CREATE TABLE `aliases` (
|
|
68
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
69
|
+
`project_id` text NOT NULL,
|
|
70
|
+
`environment_id` text NOT NULL,
|
|
71
|
+
`deployment_id` text,
|
|
72
|
+
`previous_deployment_id` text,
|
|
73
|
+
`hostname` text NOT NULL,
|
|
74
|
+
`type` text NOT NULL,
|
|
75
|
+
`branch` text,
|
|
76
|
+
`https` integer DEFAULT true NOT NULL,
|
|
77
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
78
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
79
|
+
FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
80
|
+
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
81
|
+
FOREIGN KEY (`deployment_id`) REFERENCES `deployments`(`id`) ON UPDATE no action ON DELETE set null,
|
|
82
|
+
FOREIGN KEY (`previous_deployment_id`) REFERENCES `deployments`(`id`) ON UPDATE no action ON DELETE set null,
|
|
83
|
+
CONSTRAINT "aliases_type_enum" CHECK("aliases"."type" in ('deployment', 'environment', 'branch'))
|
|
84
|
+
);
|
|
85
|
+
--> statement-breakpoint
|
|
86
|
+
CREATE UNIQUE INDEX `aliases_hostname_idx` ON `aliases` (`hostname`);--> statement-breakpoint
|
|
87
|
+
CREATE INDEX `aliases_project_idx` ON `aliases` (`project_id`);--> statement-breakpoint
|
|
88
|
+
CREATE INDEX `aliases_environment_idx` ON `aliases` (`environment_id`);--> statement-breakpoint
|
|
89
|
+
CREATE INDEX `aliases_deployment_idx` ON `aliases` (`deployment_id`);--> statement-breakpoint
|
|
90
|
+
CREATE TABLE `allowlist` (
|
|
91
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
92
|
+
`type` text NOT NULL,
|
|
93
|
+
`value` text NOT NULL,
|
|
94
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
95
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
96
|
+
CONSTRAINT "allowlist_type_enum" CHECK("allowlist"."type" in ('email', 'domain', 'pattern'))
|
|
97
|
+
);
|
|
98
|
+
--> statement-breakpoint
|
|
99
|
+
CREATE INDEX `allowlist_type_idx` ON `allowlist` (`type`);--> statement-breakpoint
|
|
100
|
+
CREATE UNIQUE INDEX `allowlist_type_value_idx` ON `allowlist` (`type`,lower("value"));--> statement-breakpoint
|
|
101
|
+
CREATE TABLE `api_audit` (
|
|
102
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
103
|
+
`team_id` text NOT NULL,
|
|
104
|
+
`user_id` text NOT NULL,
|
|
105
|
+
`credential_id` text NOT NULL,
|
|
106
|
+
`request_id` text NOT NULL,
|
|
107
|
+
`operation` text NOT NULL,
|
|
108
|
+
`resource_id` text NOT NULL,
|
|
109
|
+
`outcome` text NOT NULL,
|
|
110
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL
|
|
111
|
+
);
|
|
112
|
+
--> statement-breakpoint
|
|
113
|
+
CREATE INDEX `api_audit_team_created_idx` ON `api_audit` (`team_id`,`created_at`);--> statement-breakpoint
|
|
114
|
+
CREATE INDEX `api_audit_created_idx` ON `api_audit` (`created_at`);--> statement-breakpoint
|
|
115
|
+
CREATE TABLE `api_grants` (
|
|
116
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
117
|
+
`user_id` text NOT NULL,
|
|
118
|
+
`team_id` text NOT NULL,
|
|
119
|
+
`membership_id` text NOT NULL,
|
|
120
|
+
`role_ceiling` text NOT NULL,
|
|
121
|
+
`project_ids` text,
|
|
122
|
+
`scopes` text NOT NULL,
|
|
123
|
+
`provider_grant_id` text,
|
|
124
|
+
`expires_at` integer NOT NULL,
|
|
125
|
+
`revoked_at` integer,
|
|
126
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
127
|
+
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
128
|
+
FOREIGN KEY (`team_id`) REFERENCES `teams`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
129
|
+
FOREIGN KEY (`membership_id`) REFERENCES `team_members`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
130
|
+
CONSTRAINT "api_grants_role_ceiling_enum" CHECK("api_grants"."role_ceiling" in ('owner', 'admin', 'member'))
|
|
131
|
+
);
|
|
132
|
+
--> statement-breakpoint
|
|
133
|
+
CREATE INDEX `api_grants_user_idx` ON `api_grants` (`user_id`);--> statement-breakpoint
|
|
134
|
+
CREATE INDEX `api_grants_membership_idx` ON `api_grants` (`membership_id`);--> statement-breakpoint
|
|
135
|
+
CREATE TABLE `api_idempotency` (
|
|
136
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
137
|
+
`membership_id` text NOT NULL,
|
|
138
|
+
`credential_id` text NOT NULL,
|
|
139
|
+
`operation` text NOT NULL,
|
|
140
|
+
`resource_id` text NOT NULL,
|
|
141
|
+
`key_hash` text NOT NULL,
|
|
142
|
+
`request_hash` text NOT NULL,
|
|
143
|
+
`response` text NOT NULL,
|
|
144
|
+
`status_code` integer NOT NULL,
|
|
145
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
146
|
+
`expires_at` integer NOT NULL,
|
|
147
|
+
FOREIGN KEY (`membership_id`) REFERENCES `team_members`(`id`) ON UPDATE no action ON DELETE cascade
|
|
148
|
+
);
|
|
149
|
+
--> statement-breakpoint
|
|
150
|
+
CREATE UNIQUE INDEX `api_idempotency_actor_operation_key_idx` ON `api_idempotency` (`membership_id`,`operation`,`resource_id`,`key_hash`);--> statement-breakpoint
|
|
151
|
+
CREATE INDEX `api_idempotency_expiry_idx` ON `api_idempotency` (`expires_at`);--> statement-breakpoint
|
|
152
|
+
CREATE TABLE `api_keys` (
|
|
153
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
154
|
+
`user_id` text NOT NULL,
|
|
155
|
+
`team_id` text NOT NULL,
|
|
156
|
+
`membership_id` text NOT NULL,
|
|
157
|
+
`name` text NOT NULL,
|
|
158
|
+
`prefix` text NOT NULL,
|
|
159
|
+
`key_hash` text NOT NULL,
|
|
160
|
+
`role_ceiling` text NOT NULL,
|
|
161
|
+
`preset` text NOT NULL,
|
|
162
|
+
`project_ids` text,
|
|
163
|
+
`scopes` text NOT NULL,
|
|
164
|
+
`expires_at` integer,
|
|
165
|
+
`revoked_at` integer,
|
|
166
|
+
`last_used_at` integer,
|
|
167
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
168
|
+
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
169
|
+
FOREIGN KEY (`team_id`) REFERENCES `teams`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
170
|
+
FOREIGN KEY (`membership_id`) REFERENCES `team_members`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
171
|
+
CONSTRAINT "api_keys_role_ceiling_enum" CHECK("api_keys"."role_ceiling" in ('owner', 'admin', 'member')),
|
|
172
|
+
CONSTRAINT "api_keys_preset_enum" CHECK("api_keys"."preset" in ('read', 'deploy', 'manage'))
|
|
173
|
+
);
|
|
174
|
+
--> statement-breakpoint
|
|
175
|
+
CREATE UNIQUE INDEX `api_keys_hash_idx` ON `api_keys` (`key_hash`);--> statement-breakpoint
|
|
176
|
+
CREATE INDEX `api_keys_user_idx` ON `api_keys` (`user_id`);--> statement-breakpoint
|
|
177
|
+
CREATE INDEX `api_keys_membership_idx` ON `api_keys` (`membership_id`);--> statement-breakpoint
|
|
178
|
+
CREATE TABLE `backup_artifacts` (
|
|
179
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
180
|
+
`backup_run_id` text NOT NULL,
|
|
181
|
+
`type` text NOT NULL,
|
|
182
|
+
`storage` text NOT NULL,
|
|
183
|
+
`object_key` text NOT NULL,
|
|
184
|
+
`checksum_sha256` text NOT NULL,
|
|
185
|
+
`size_bytes` integer NOT NULL,
|
|
186
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
187
|
+
FOREIGN KEY (`backup_run_id`) REFERENCES `backup_runs`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
188
|
+
CONSTRAINT "backup_artifacts_type_enum" CHECK("backup_artifacts"."type" in ('manifest', 'volume', 'database')),
|
|
189
|
+
CONSTRAINT "backup_artifacts_storage_enum" CHECK("backup_artifacts"."storage" in ('local', 'remote'))
|
|
190
|
+
);
|
|
191
|
+
--> statement-breakpoint
|
|
192
|
+
CREATE UNIQUE INDEX `backup_artifacts_run_object_idx` ON `backup_artifacts` (`backup_run_id`,`object_key`);--> statement-breakpoint
|
|
193
|
+
CREATE INDEX `backup_artifacts_run_idx` ON `backup_artifacts` (`backup_run_id`);--> statement-breakpoint
|
|
194
|
+
CREATE TABLE `backup_configs` (
|
|
195
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
196
|
+
`settings_version` integer DEFAULT 1 NOT NULL,
|
|
197
|
+
`name` text NOT NULL,
|
|
198
|
+
`project_id` text NOT NULL,
|
|
199
|
+
`environment_id` text NOT NULL,
|
|
200
|
+
`enabled` integer DEFAULT true NOT NULL,
|
|
201
|
+
`destination_type` text DEFAULT 's3' NOT NULL,
|
|
202
|
+
`schedule` text NOT NULL,
|
|
203
|
+
`destination` text NOT NULL,
|
|
204
|
+
`retention` text NOT NULL,
|
|
205
|
+
`volumes` text DEFAULT '{"mode":"allNamed","names":[]}' NOT NULL,
|
|
206
|
+
`database_dumps` text DEFAULT '[]' NOT NULL,
|
|
207
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
208
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
209
|
+
FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
210
|
+
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
211
|
+
CONSTRAINT "backup_configs_destination_type_enum" CHECK("backup_configs"."destination_type" in ('s3'))
|
|
212
|
+
);
|
|
213
|
+
--> statement-breakpoint
|
|
214
|
+
CREATE INDEX `backup_configs_environment_idx` ON `backup_configs` (`environment_id`);--> statement-breakpoint
|
|
215
|
+
CREATE INDEX `backup_configs_project_idx` ON `backup_configs` (`project_id`);--> statement-breakpoint
|
|
216
|
+
CREATE TABLE `backup_runs` (
|
|
217
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
218
|
+
`project_id` text NOT NULL,
|
|
219
|
+
`environment_id` text NOT NULL,
|
|
220
|
+
`deployment_id` text,
|
|
221
|
+
`server_id` text,
|
|
222
|
+
`runtime_id` text NOT NULL,
|
|
223
|
+
`config_id` text,
|
|
224
|
+
`schedule_key` text,
|
|
225
|
+
`status` text DEFAULT 'queued' NOT NULL,
|
|
226
|
+
`manifest` text,
|
|
227
|
+
`destination` text,
|
|
228
|
+
`error_message` text,
|
|
229
|
+
`started_at` integer,
|
|
230
|
+
`finished_at` integer,
|
|
231
|
+
`cleanup_queued_at` integer,
|
|
232
|
+
`cleanup_finished_at` integer,
|
|
233
|
+
`cleanup_error_message` text,
|
|
234
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
235
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
236
|
+
FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
237
|
+
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
238
|
+
FOREIGN KEY (`deployment_id`) REFERENCES `deployments`(`id`) ON UPDATE no action ON DELETE set null,
|
|
239
|
+
FOREIGN KEY (`server_id`) REFERENCES `servers`(`id`) ON UPDATE no action ON DELETE restrict,
|
|
240
|
+
CONSTRAINT "backup_runs_status_enum" CHECK("backup_runs"."status" in ('queued', 'running', 'succeeded', 'failed', 'canceled'))
|
|
241
|
+
);
|
|
242
|
+
--> statement-breakpoint
|
|
243
|
+
CREATE INDEX `backup_runs_environment_status_idx` ON `backup_runs` (`environment_id`,`status`);--> statement-breakpoint
|
|
244
|
+
CREATE INDEX `backup_runs_project_idx` ON `backup_runs` (`project_id`);--> statement-breakpoint
|
|
245
|
+
CREATE INDEX `backup_runs_deployment_idx` ON `backup_runs` (`deployment_id`);--> statement-breakpoint
|
|
246
|
+
CREATE INDEX `backup_runs_cleanup_idx` ON `backup_runs` (`cleanup_queued_at`);--> statement-breakpoint
|
|
247
|
+
CREATE UNIQUE INDEX `backup_runs_environment_schedule_idx` ON `backup_runs` (`environment_id`,`schedule_key`) WHERE "backup_runs"."schedule_key" is not null;--> statement-breakpoint
|
|
248
|
+
CREATE UNIQUE INDEX `backup_runs_active_environment_idx` ON `backup_runs` (`environment_id`) WHERE "backup_runs"."status" in ('queued', 'running');--> statement-breakpoint
|
|
249
|
+
CREATE TABLE `backup_storage` (
|
|
250
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
251
|
+
`settings_version` integer DEFAULT 1 NOT NULL,
|
|
252
|
+
`team_id` text NOT NULL,
|
|
253
|
+
`name` text NOT NULL,
|
|
254
|
+
`bucket` text NOT NULL,
|
|
255
|
+
`region` text NOT NULL,
|
|
256
|
+
`endpoint` text,
|
|
257
|
+
`access_key_id` text NOT NULL,
|
|
258
|
+
`secret_access_key_ciphertext` text NOT NULL,
|
|
259
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
260
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
261
|
+
FOREIGN KEY (`team_id`) REFERENCES `teams`(`id`) ON UPDATE no action ON DELETE cascade
|
|
262
|
+
);
|
|
263
|
+
--> statement-breakpoint
|
|
264
|
+
CREATE INDEX `backup_storage_team_idx` ON `backup_storage` (`team_id`);--> statement-breakpoint
|
|
265
|
+
CREATE TABLE `deployment_events` (
|
|
266
|
+
`deployment_id` text NOT NULL,
|
|
267
|
+
`stream` text NOT NULL,
|
|
268
|
+
`seq` integer NOT NULL,
|
|
269
|
+
`content` text NOT NULL,
|
|
270
|
+
`search_content` text NOT NULL,
|
|
271
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
272
|
+
FOREIGN KEY (`deployment_id`) REFERENCES `deployments`(`id`) ON UPDATE no action ON DELETE cascade
|
|
273
|
+
);
|
|
274
|
+
--> statement-breakpoint
|
|
275
|
+
CREATE UNIQUE INDEX `deployment_events_seq_idx` ON `deployment_events` (`deployment_id`,`stream`,`seq`);--> statement-breakpoint
|
|
276
|
+
CREATE TABLE `deployments` (
|
|
277
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
278
|
+
`environment_id` text NOT NULL,
|
|
279
|
+
`server_id` text NOT NULL,
|
|
280
|
+
`status` text DEFAULT 'queued' NOT NULL,
|
|
281
|
+
`phase` text,
|
|
282
|
+
`trigger` text DEFAULT 'user' NOT NULL,
|
|
283
|
+
`github_delivery_id` text,
|
|
284
|
+
`repo_id` integer NOT NULL,
|
|
285
|
+
`repo_full_name` text NOT NULL,
|
|
286
|
+
`git_sha` text NOT NULL,
|
|
287
|
+
`git_branch` text NOT NULL,
|
|
288
|
+
`commit_meta` text DEFAULT '{}' NOT NULL,
|
|
289
|
+
`config` text NOT NULL,
|
|
290
|
+
`env_vars` text NOT NULL,
|
|
291
|
+
`runtime_id` text NOT NULL,
|
|
292
|
+
`error_message` text,
|
|
293
|
+
`started_at` integer,
|
|
294
|
+
`finished_at` integer,
|
|
295
|
+
`created_by_user_id` text,
|
|
296
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
297
|
+
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
298
|
+
FOREIGN KEY (`server_id`) REFERENCES `servers`(`id`) ON UPDATE no action ON DELETE restrict,
|
|
299
|
+
FOREIGN KEY (`created_by_user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE set null,
|
|
300
|
+
CONSTRAINT "deployments_status_enum" CHECK("deployments"."status" in ('queued', 'running', 'succeeded', 'failed', 'canceled')),
|
|
301
|
+
CONSTRAINT "deployments_trigger_enum" CHECK("deployments"."trigger" in ('user', 'webhook', 'api', 'rollback'))
|
|
302
|
+
);
|
|
303
|
+
--> statement-breakpoint
|
|
304
|
+
CREATE INDEX `deployments_environment_idx` ON `deployments` (`environment_id`);--> statement-breakpoint
|
|
305
|
+
CREATE INDEX `deployments_server_idx` ON `deployments` (`server_id`);--> statement-breakpoint
|
|
306
|
+
CREATE INDEX `deployments_status_idx` ON `deployments` (`status`);--> statement-breakpoint
|
|
307
|
+
CREATE UNIQUE INDEX `deployments_running_runtime_idx` ON `deployments` (`runtime_id`) WHERE "deployments"."status" = 'running';--> statement-breakpoint
|
|
308
|
+
CREATE UNIQUE INDEX `deployments_github_delivery_environment_idx` ON `deployments` (`github_delivery_id`,`environment_id`) WHERE "deployments"."github_delivery_id" is not null;--> statement-breakpoint
|
|
309
|
+
CREATE TABLE `domains` (
|
|
310
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
311
|
+
`project_id` text NOT NULL,
|
|
312
|
+
`environment_id` text NOT NULL,
|
|
313
|
+
`hostname` text NOT NULL,
|
|
314
|
+
`base_path` text,
|
|
315
|
+
`https` integer DEFAULT true NOT NULL,
|
|
316
|
+
`status` text DEFAULT 'pending' NOT NULL,
|
|
317
|
+
`message` text,
|
|
318
|
+
`verified_at` integer,
|
|
319
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
320
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
321
|
+
FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
322
|
+
FOREIGN KEY (`environment_id`) REFERENCES `environments`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
323
|
+
CONSTRAINT "domains_status_enum" CHECK("domains"."status" in ('pending', 'active', 'disabled', 'failed'))
|
|
324
|
+
);
|
|
325
|
+
--> statement-breakpoint
|
|
326
|
+
CREATE UNIQUE INDEX `domains_hostname_idx` ON `domains` (`hostname`);--> statement-breakpoint
|
|
327
|
+
CREATE INDEX `domains_project_idx` ON `domains` (`project_id`);--> statement-breakpoint
|
|
328
|
+
CREATE INDEX `domains_environment_idx` ON `domains` (`environment_id`);--> statement-breakpoint
|
|
329
|
+
CREATE TABLE `environments` (
|
|
330
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
331
|
+
`project_id` text NOT NULL,
|
|
332
|
+
`server_id` text,
|
|
333
|
+
`name` text NOT NULL,
|
|
334
|
+
`slug` text NOT NULL,
|
|
335
|
+
`branch` text NOT NULL,
|
|
336
|
+
`is_production` integer DEFAULT false NOT NULL,
|
|
337
|
+
`position` integer DEFAULT 0 NOT NULL,
|
|
338
|
+
`color` text DEFAULT 'blue' NOT NULL,
|
|
339
|
+
`status` text DEFAULT 'active' NOT NULL,
|
|
340
|
+
`runtime_id` text NOT NULL,
|
|
341
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
342
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
343
|
+
FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
344
|
+
FOREIGN KEY (`server_id`) REFERENCES `servers`(`id`) ON UPDATE no action ON DELETE restrict,
|
|
345
|
+
CONSTRAINT "environments_status_enum" CHECK("environments"."status" in ('active', 'deleted'))
|
|
346
|
+
);
|
|
347
|
+
--> statement-breakpoint
|
|
348
|
+
CREATE UNIQUE INDEX `environments_project_slug_idx` ON `environments` (`project_id`,`slug`);--> statement-breakpoint
|
|
349
|
+
CREATE INDEX `environments_server_idx` ON `environments` (`server_id`);--> statement-breakpoint
|
|
350
|
+
CREATE TABLE `github_installations` (
|
|
351
|
+
`installation_id` integer PRIMARY KEY NOT NULL,
|
|
352
|
+
`account_id` integer,
|
|
353
|
+
`account_login` text NOT NULL,
|
|
354
|
+
`account_type` text NOT NULL,
|
|
355
|
+
`repository_selection` text NOT NULL,
|
|
356
|
+
`status` text DEFAULT 'active' NOT NULL,
|
|
357
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
358
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
359
|
+
CONSTRAINT "github_installations_status_enum" CHECK("github_installations"."status" in ('active', 'deleted', 'suspended'))
|
|
360
|
+
);
|
|
361
|
+
--> statement-breakpoint
|
|
362
|
+
CREATE INDEX `github_installations_account_id_idx` ON `github_installations` (`account_id`);--> statement-breakpoint
|
|
363
|
+
CREATE INDEX `github_installations_account_idx` ON `github_installations` (`account_login`);--> statement-breakpoint
|
|
364
|
+
CREATE INDEX `github_installations_status_idx` ON `github_installations` (`status`);--> statement-breakpoint
|
|
365
|
+
CREATE TABLE `projects` (
|
|
366
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
367
|
+
`settings_version` integer DEFAULT 1 NOT NULL,
|
|
368
|
+
`team_id` text NOT NULL,
|
|
369
|
+
`slug` text NOT NULL,
|
|
370
|
+
`name` text NOT NULL,
|
|
371
|
+
`status` text DEFAULT 'active' NOT NULL,
|
|
372
|
+
`github_repo_id` integer,
|
|
373
|
+
`github_repo` text NOT NULL,
|
|
374
|
+
`github_installation_id` integer,
|
|
375
|
+
`default_server_id` text,
|
|
376
|
+
`avatar_path` text,
|
|
377
|
+
`routes` text,
|
|
378
|
+
`env_vars_encrypted` text,
|
|
379
|
+
`runtime_config` text DEFAULT '{"type":"compose","path":null,"releaseCommand":null,"releaseService":null,"readinessPath":null,"deployCommand":null,"rollbackCommand":null,"timeoutSeconds":1800}' NOT NULL,
|
|
380
|
+
`compose_metadata` text,
|
|
381
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
382
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
383
|
+
FOREIGN KEY (`team_id`) REFERENCES `teams`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
384
|
+
FOREIGN KEY (`github_installation_id`) REFERENCES `github_installations`(`installation_id`) ON UPDATE no action ON DELETE restrict,
|
|
385
|
+
FOREIGN KEY (`default_server_id`) REFERENCES `servers`(`id`) ON UPDATE no action ON DELETE restrict,
|
|
386
|
+
CONSTRAINT "projects_status_enum" CHECK("projects"."status" in ('active', 'deleted', 'banned'))
|
|
387
|
+
);
|
|
388
|
+
--> statement-breakpoint
|
|
389
|
+
CREATE UNIQUE INDEX `projects_team_slug_idx` ON `projects` (`team_id`,lower("slug")) WHERE "projects"."status" <> 'deleted';--> statement-breakpoint
|
|
390
|
+
CREATE INDEX `projects_team_idx` ON `projects` (`team_id`);--> statement-breakpoint
|
|
391
|
+
CREATE INDEX `projects_github_installation_idx` ON `projects` (`github_installation_id`);--> statement-breakpoint
|
|
392
|
+
CREATE INDEX `projects_default_server_idx` ON `projects` (`default_server_id`);--> statement-breakpoint
|
|
393
|
+
CREATE TABLE `rate_limits` (
|
|
394
|
+
`key` text PRIMARY KEY NOT NULL,
|
|
395
|
+
`count` integer NOT NULL,
|
|
396
|
+
`reset_at` integer NOT NULL
|
|
397
|
+
);
|
|
398
|
+
--> statement-breakpoint
|
|
399
|
+
CREATE TABLE `server_availability_windows` (
|
|
400
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
401
|
+
`server_id` text NOT NULL,
|
|
402
|
+
`started_at` integer NOT NULL,
|
|
403
|
+
`ended_at` integer,
|
|
404
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
405
|
+
FOREIGN KEY (`server_id`) REFERENCES `servers`(`id`) ON UPDATE no action ON DELETE cascade
|
|
406
|
+
);
|
|
407
|
+
--> statement-breakpoint
|
|
408
|
+
CREATE INDEX `server_availability_windows_server_started_idx` ON `server_availability_windows` (`server_id`,`started_at`);--> statement-breakpoint
|
|
409
|
+
CREATE TABLE `server_heartbeats` (
|
|
410
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
411
|
+
`server_id` text NOT NULL,
|
|
412
|
+
`observed_at` integer NOT NULL,
|
|
413
|
+
`agent_version` text,
|
|
414
|
+
`public_address` text,
|
|
415
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
416
|
+
FOREIGN KEY (`server_id`) REFERENCES `servers`(`id`) ON UPDATE no action ON DELETE cascade
|
|
417
|
+
);
|
|
418
|
+
--> statement-breakpoint
|
|
419
|
+
CREATE INDEX `server_heartbeats_server_observed_idx` ON `server_heartbeats` (`server_id`,`observed_at`);--> statement-breakpoint
|
|
420
|
+
CREATE INDEX `server_heartbeats_observed_idx` ON `server_heartbeats` (`observed_at`);--> statement-breakpoint
|
|
421
|
+
CREATE TABLE `server_metrics` (
|
|
422
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
423
|
+
`server_id` text NOT NULL,
|
|
424
|
+
`observed_at` integer NOT NULL,
|
|
425
|
+
`cpu_percent` real,
|
|
426
|
+
`load_1` real,
|
|
427
|
+
`memory_used_bytes` integer,
|
|
428
|
+
`memory_total_bytes` integer,
|
|
429
|
+
`disk_used_bytes` integer,
|
|
430
|
+
`disk_total_bytes` integer,
|
|
431
|
+
`network_receive_bytes_per_second` real,
|
|
432
|
+
`network_transmit_bytes_per_second` real,
|
|
433
|
+
`disk_read_bytes_per_second` real,
|
|
434
|
+
`disk_write_bytes_per_second` real,
|
|
435
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
436
|
+
FOREIGN KEY (`server_id`) REFERENCES `servers`(`id`) ON UPDATE no action ON DELETE cascade
|
|
437
|
+
);
|
|
438
|
+
--> statement-breakpoint
|
|
439
|
+
CREATE INDEX `server_metrics_server_observed_idx` ON `server_metrics` (`server_id`,`observed_at`);--> statement-breakpoint
|
|
440
|
+
CREATE INDEX `server_metrics_observed_idx` ON `server_metrics` (`observed_at`);--> statement-breakpoint
|
|
441
|
+
CREATE TABLE `servers` (
|
|
442
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
443
|
+
`settings_version` integer DEFAULT 1 NOT NULL,
|
|
444
|
+
`team_id` text NOT NULL,
|
|
445
|
+
`name` text NOT NULL,
|
|
446
|
+
`handle` text NOT NULL,
|
|
447
|
+
`status` text DEFAULT 'pending' NOT NULL,
|
|
448
|
+
`agent_version` text,
|
|
449
|
+
`agent_protocol_version` integer,
|
|
450
|
+
`agent_capabilities` text,
|
|
451
|
+
`public_address` text,
|
|
452
|
+
`public_ipv4` text,
|
|
453
|
+
`public_ipv6` text,
|
|
454
|
+
`hostname` text,
|
|
455
|
+
`operating_system` text,
|
|
456
|
+
`kernel_version` text,
|
|
457
|
+
`architecture` text,
|
|
458
|
+
`cpu_core_count` integer,
|
|
459
|
+
`host_uptime_seconds` integer,
|
|
460
|
+
`enrollment_token_hash` text,
|
|
461
|
+
`enrollment_token_expires_at` integer,
|
|
462
|
+
`agent_credential_hash` text,
|
|
463
|
+
`pending_agent_credential_hash` text,
|
|
464
|
+
`agent_credential_rotated_at` integer,
|
|
465
|
+
`last_seen_at` integer,
|
|
466
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
467
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
468
|
+
FOREIGN KEY (`team_id`) REFERENCES `teams`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
469
|
+
CONSTRAINT "servers_status_enum" CHECK("servers"."status" in ('pending', 'connected', 'disconnected', 'disabled', 'deleted'))
|
|
470
|
+
);
|
|
471
|
+
--> statement-breakpoint
|
|
472
|
+
CREATE UNIQUE INDEX `servers_team_handle_idx` ON `servers` (`team_id`,`handle`) WHERE "servers"."status" <> 'deleted';--> statement-breakpoint
|
|
473
|
+
CREATE UNIQUE INDEX `servers_team_name_idx` ON `servers` (`team_id`,lower("name")) WHERE "servers"."status" <> 'deleted';--> statement-breakpoint
|
|
474
|
+
CREATE INDEX `servers_team_idx` ON `servers` (`team_id`);--> statement-breakpoint
|
|
475
|
+
CREATE TABLE `session` (
|
|
476
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
477
|
+
`expires_at` integer NOT NULL,
|
|
478
|
+
`token` text NOT NULL,
|
|
479
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
480
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
481
|
+
`ip_address` text,
|
|
482
|
+
`user_agent` text,
|
|
483
|
+
`user_id` text NOT NULL,
|
|
484
|
+
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
|
|
485
|
+
);
|
|
486
|
+
--> statement-breakpoint
|
|
487
|
+
CREATE UNIQUE INDEX `session_token_unique` ON `session` (`token`);--> statement-breakpoint
|
|
488
|
+
CREATE INDEX `session_user_id_idx` ON `session` (`user_id`);--> statement-breakpoint
|
|
489
|
+
CREATE TABLE `team_invites` (
|
|
490
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
491
|
+
`team_id` text NOT NULL,
|
|
492
|
+
`email` text NOT NULL,
|
|
493
|
+
`role` text DEFAULT 'member' NOT NULL,
|
|
494
|
+
`inviter_id` text,
|
|
495
|
+
`token_hash` text NOT NULL,
|
|
496
|
+
`status` text DEFAULT 'pending' NOT NULL,
|
|
497
|
+
`expires_at` integer NOT NULL,
|
|
498
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
499
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
500
|
+
FOREIGN KEY (`team_id`) REFERENCES `teams`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
501
|
+
FOREIGN KEY (`inviter_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE set null,
|
|
502
|
+
CONSTRAINT "team_invites_role_enum" CHECK("team_invites"."role" in ('owner', 'admin', 'member')),
|
|
503
|
+
CONSTRAINT "team_invites_status_enum" CHECK("team_invites"."status" in ('pending', 'accepted', 'revoked', 'expired'))
|
|
504
|
+
);
|
|
505
|
+
--> statement-breakpoint
|
|
506
|
+
CREATE UNIQUE INDEX `team_invites_token_hash_idx` ON `team_invites` (`token_hash`);--> statement-breakpoint
|
|
507
|
+
CREATE UNIQUE INDEX `team_invites_pending_email_idx` ON `team_invites` (`team_id`,lower("email")) WHERE "team_invites"."status" = 'pending';--> statement-breakpoint
|
|
508
|
+
CREATE INDEX `team_invites_team_idx` ON `team_invites` (`team_id`);--> statement-breakpoint
|
|
509
|
+
CREATE INDEX `team_invites_email_idx` ON `team_invites` (lower("email"));--> statement-breakpoint
|
|
510
|
+
CREATE TABLE `team_members` (
|
|
511
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
512
|
+
`team_id` text NOT NULL,
|
|
513
|
+
`user_id` text NOT NULL,
|
|
514
|
+
`role` text DEFAULT 'member' NOT NULL,
|
|
515
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
516
|
+
FOREIGN KEY (`team_id`) REFERENCES `teams`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
517
|
+
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
518
|
+
CONSTRAINT "team_members_role_enum" CHECK("team_members"."role" in ('owner', 'admin', 'member'))
|
|
519
|
+
);
|
|
520
|
+
--> statement-breakpoint
|
|
521
|
+
CREATE UNIQUE INDEX `team_members_team_user_idx` ON `team_members` (`team_id`,`user_id`);--> statement-breakpoint
|
|
522
|
+
CREATE INDEX `team_members_user_idx` ON `team_members` (`user_id`);--> statement-breakpoint
|
|
523
|
+
CREATE INDEX `team_members_team_idx` ON `team_members` (`team_id`);--> statement-breakpoint
|
|
524
|
+
CREATE TABLE `teams` (
|
|
525
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
526
|
+
`settings_version` integer DEFAULT 1 NOT NULL,
|
|
527
|
+
`slug` text NOT NULL,
|
|
528
|
+
`name` text NOT NULL,
|
|
529
|
+
`status` text DEFAULT 'active' NOT NULL,
|
|
530
|
+
`avatar_path` text,
|
|
531
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
532
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
533
|
+
CONSTRAINT "teams_status_enum" CHECK("teams"."status" in ('active', 'deleted', 'banned'))
|
|
534
|
+
);
|
|
535
|
+
--> statement-breakpoint
|
|
536
|
+
CREATE UNIQUE INDEX `teams_slug_idx` ON `teams` (`slug`);--> statement-breakpoint
|
|
537
|
+
CREATE TABLE `user` (
|
|
538
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
539
|
+
`settings_version` integer DEFAULT 1 NOT NULL,
|
|
540
|
+
`profile_confirmed_at` integer,
|
|
541
|
+
`name` text NOT NULL,
|
|
542
|
+
`username` text NOT NULL,
|
|
543
|
+
`email` text NOT NULL,
|
|
544
|
+
`email_verified` integer DEFAULT false NOT NULL,
|
|
545
|
+
`status` text DEFAULT 'active' NOT NULL,
|
|
546
|
+
`image` text,
|
|
547
|
+
`default_team_id` text,
|
|
548
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
549
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
550
|
+
FOREIGN KEY (`default_team_id`) REFERENCES `teams`(`id`) ON UPDATE no action ON DELETE set null,
|
|
551
|
+
CONSTRAINT "user_status_enum" CHECK("user"."status" in ('active', 'deleted', 'banned'))
|
|
552
|
+
);
|
|
553
|
+
--> statement-breakpoint
|
|
554
|
+
CREATE UNIQUE INDEX `user_email_unique` ON `user` (`email`);--> statement-breakpoint
|
|
555
|
+
CREATE UNIQUE INDEX `user_username_idx` ON `user` (lower("username")) WHERE status = 'active';--> statement-breakpoint
|
|
556
|
+
CREATE TABLE `user_cleanup_jobs` (
|
|
557
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
558
|
+
`user_id` text NOT NULL,
|
|
559
|
+
`status` text DEFAULT 'queued' NOT NULL,
|
|
560
|
+
`payload` text NOT NULL,
|
|
561
|
+
`attempt` integer DEFAULT 0 NOT NULL,
|
|
562
|
+
`max_attempts` integer DEFAULT 5 NOT NULL,
|
|
563
|
+
`error_message` text,
|
|
564
|
+
`claimed_at` integer,
|
|
565
|
+
`available_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
566
|
+
`finished_at` integer,
|
|
567
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
568
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
569
|
+
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
570
|
+
CONSTRAINT "user_cleanup_jobs_status_enum" CHECK("user_cleanup_jobs"."status" in ('queued', 'running', 'succeeded', 'failed'))
|
|
571
|
+
);
|
|
572
|
+
--> statement-breakpoint
|
|
573
|
+
CREATE INDEX `user_cleanup_jobs_status_available_idx` ON `user_cleanup_jobs` (`status`,`available_at`);--> statement-breakpoint
|
|
574
|
+
CREATE INDEX `user_cleanup_jobs_user_idx` ON `user_cleanup_jobs` (`user_id`);--> statement-breakpoint
|
|
575
|
+
CREATE TABLE `verification` (
|
|
576
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
577
|
+
`identifier` text NOT NULL,
|
|
578
|
+
`value` text NOT NULL,
|
|
579
|
+
`expires_at` integer NOT NULL,
|
|
580
|
+
`created_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL,
|
|
581
|
+
`updated_at` integer DEFAULT (cast(unixepoch('subsec') * 1000 as integer)) NOT NULL
|
|
582
|
+
);
|
|
583
|
+
--> statement-breakpoint
|
|
584
|
+
CREATE INDEX `verification_identifier_idx` ON `verification` (`identifier`);--> statement-breakpoint
|
|
585
|
+
CREATE TABLE `jwks` (
|
|
586
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
587
|
+
`public_key` text NOT NULL,
|
|
588
|
+
`private_key` text NOT NULL,
|
|
589
|
+
`created_at` integer NOT NULL,
|
|
590
|
+
`expires_at` integer,
|
|
591
|
+
`alg` text,
|
|
592
|
+
`crv` text
|
|
593
|
+
);
|
|
594
|
+
--> statement-breakpoint
|
|
595
|
+
CREATE TABLE `oauth_access_token` (
|
|
596
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
597
|
+
`token` text NOT NULL,
|
|
598
|
+
`client_id` text NOT NULL,
|
|
599
|
+
`session_id` text,
|
|
600
|
+
`user_id` text,
|
|
601
|
+
`reference_id` text,
|
|
602
|
+
`authorization_code_id` text,
|
|
603
|
+
`resources` text,
|
|
604
|
+
`requested_user_info_claims` text,
|
|
605
|
+
`refresh_id` text,
|
|
606
|
+
`expires_at` integer NOT NULL,
|
|
607
|
+
`created_at` integer NOT NULL,
|
|
608
|
+
`revoked` integer,
|
|
609
|
+
`confirmation` text,
|
|
610
|
+
`scopes` text NOT NULL,
|
|
611
|
+
FOREIGN KEY (`client_id`) REFERENCES `oauth_client`(`client_id`) ON UPDATE no action ON DELETE cascade,
|
|
612
|
+
FOREIGN KEY (`session_id`) REFERENCES `session`(`id`) ON UPDATE no action ON DELETE set null,
|
|
613
|
+
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
614
|
+
FOREIGN KEY (`refresh_id`) REFERENCES `oauth_refresh_token`(`id`) ON UPDATE no action ON DELETE cascade
|
|
615
|
+
);
|
|
616
|
+
--> statement-breakpoint
|
|
617
|
+
CREATE UNIQUE INDEX `oauth_access_token_token_unique` ON `oauth_access_token` (`token`);--> statement-breakpoint
|
|
618
|
+
CREATE INDEX `oauth_access_token_expiry_idx` ON `oauth_access_token` (`expires_at`);--> statement-breakpoint
|
|
619
|
+
CREATE INDEX `oauth_access_token_client_id_idx` ON `oauth_access_token` (`client_id`);--> statement-breakpoint
|
|
620
|
+
CREATE INDEX `oauth_access_token_session_id_idx` ON `oauth_access_token` (`session_id`);--> statement-breakpoint
|
|
621
|
+
CREATE INDEX `oauth_access_token_user_id_idx` ON `oauth_access_token` (`user_id`);--> statement-breakpoint
|
|
622
|
+
CREATE INDEX `oauth_access_token_authorization_code_id_idx` ON `oauth_access_token` (`authorization_code_id`);--> statement-breakpoint
|
|
623
|
+
CREATE INDEX `oauth_access_token_refresh_id_idx` ON `oauth_access_token` (`refresh_id`);--> statement-breakpoint
|
|
624
|
+
CREATE TABLE `oauth_client` (
|
|
625
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
626
|
+
`client_id` text NOT NULL,
|
|
627
|
+
`client_secret` text,
|
|
628
|
+
`client_discovery_id` text,
|
|
629
|
+
`disabled` integer DEFAULT false,
|
|
630
|
+
`skip_consent` integer,
|
|
631
|
+
`enable_end_session` integer,
|
|
632
|
+
`subject_type` text,
|
|
633
|
+
`scopes` text,
|
|
634
|
+
`client_credentials_scopes` text,
|
|
635
|
+
`user_id` text,
|
|
636
|
+
`created_at` integer,
|
|
637
|
+
`updated_at` integer,
|
|
638
|
+
`name` text,
|
|
639
|
+
`uri` text,
|
|
640
|
+
`icon` text,
|
|
641
|
+
`contacts` text,
|
|
642
|
+
`tos` text,
|
|
643
|
+
`policy` text,
|
|
644
|
+
`software_id` text,
|
|
645
|
+
`software_version` text,
|
|
646
|
+
`software_statement` text,
|
|
647
|
+
`redirect_uris` text NOT NULL,
|
|
648
|
+
`post_logout_redirect_uris` text,
|
|
649
|
+
`backchannel_logout_uri` text,
|
|
650
|
+
`backchannel_logout_session_required` integer,
|
|
651
|
+
`token_endpoint_auth_method` text,
|
|
652
|
+
`application_type` text,
|
|
653
|
+
`jwks` text,
|
|
654
|
+
`jwks_uri` text,
|
|
655
|
+
`grant_types` text,
|
|
656
|
+
`response_types` text,
|
|
657
|
+
`require_p_k_c_e` integer,
|
|
658
|
+
`dpop_bound_access_tokens` integer DEFAULT false,
|
|
659
|
+
`reference_id` text,
|
|
660
|
+
`metadata` text,
|
|
661
|
+
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
|
|
662
|
+
);
|
|
663
|
+
--> statement-breakpoint
|
|
664
|
+
CREATE UNIQUE INDEX `oauth_client_client_id_unique` ON `oauth_client` (`client_id`);--> statement-breakpoint
|
|
665
|
+
CREATE INDEX `oauth_client_user_id_idx` ON `oauth_client` (`user_id`);--> statement-breakpoint
|
|
666
|
+
CREATE TABLE `oauth_client_assertion` (
|
|
667
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
668
|
+
`expires_at` integer NOT NULL
|
|
669
|
+
);
|
|
670
|
+
--> statement-breakpoint
|
|
671
|
+
CREATE TABLE `oauth_client_resource` (
|
|
672
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
673
|
+
`client_id` text NOT NULL,
|
|
674
|
+
`resource_id` text NOT NULL,
|
|
675
|
+
`metadata` text,
|
|
676
|
+
`created_at` integer,
|
|
677
|
+
FOREIGN KEY (`client_id`) REFERENCES `oauth_client`(`client_id`) ON UPDATE no action ON DELETE cascade,
|
|
678
|
+
FOREIGN KEY (`resource_id`) REFERENCES `oauth_resource`(`identifier`) ON UPDATE no action ON DELETE cascade
|
|
679
|
+
);
|
|
680
|
+
--> statement-breakpoint
|
|
681
|
+
CREATE INDEX `oauth_client_resource_client_id_idx` ON `oauth_client_resource` (`client_id`);--> statement-breakpoint
|
|
682
|
+
CREATE INDEX `oauth_client_resource_resource_id_idx` ON `oauth_client_resource` (`resource_id`);--> statement-breakpoint
|
|
683
|
+
CREATE UNIQUE INDEX `oauth_client_resource_client_id_resource_id_idx` ON `oauth_client_resource` (`client_id`,`resource_id`);--> statement-breakpoint
|
|
684
|
+
CREATE TABLE `oauth_consent` (
|
|
685
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
686
|
+
`client_id` text NOT NULL,
|
|
687
|
+
`user_id` text,
|
|
688
|
+
`reference_id` text,
|
|
689
|
+
`resources` text,
|
|
690
|
+
`requested_user_info_claims` text,
|
|
691
|
+
`scopes` text NOT NULL,
|
|
692
|
+
`created_at` integer NOT NULL,
|
|
693
|
+
`updated_at` integer NOT NULL,
|
|
694
|
+
FOREIGN KEY (`client_id`) REFERENCES `oauth_client`(`client_id`) ON UPDATE no action ON DELETE cascade,
|
|
695
|
+
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
|
|
696
|
+
);
|
|
697
|
+
--> statement-breakpoint
|
|
698
|
+
CREATE INDEX `oauth_consent_client_id_idx` ON `oauth_consent` (`client_id`);--> statement-breakpoint
|
|
699
|
+
CREATE INDEX `oauth_consent_user_id_idx` ON `oauth_consent` (`user_id`);--> statement-breakpoint
|
|
700
|
+
CREATE TABLE `oauth_refresh_token` (
|
|
701
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
702
|
+
`token` text NOT NULL,
|
|
703
|
+
`client_id` text NOT NULL,
|
|
704
|
+
`session_id` text,
|
|
705
|
+
`user_id` text NOT NULL,
|
|
706
|
+
`reference_id` text,
|
|
707
|
+
`authorization_code_id` text,
|
|
708
|
+
`resources` text,
|
|
709
|
+
`requested_user_info_claims` text,
|
|
710
|
+
`expires_at` integer NOT NULL,
|
|
711
|
+
`created_at` integer NOT NULL,
|
|
712
|
+
`revoked` integer,
|
|
713
|
+
`rotated_at` integer,
|
|
714
|
+
`rotation_replay_response` text,
|
|
715
|
+
`rotation_replay_expires_at` integer,
|
|
716
|
+
`auth_time` integer,
|
|
717
|
+
`confirmation` text,
|
|
718
|
+
`scopes` text NOT NULL,
|
|
719
|
+
FOREIGN KEY (`client_id`) REFERENCES `oauth_client`(`client_id`) ON UPDATE no action ON DELETE cascade,
|
|
720
|
+
FOREIGN KEY (`session_id`) REFERENCES `session`(`id`) ON UPDATE no action ON DELETE set null,
|
|
721
|
+
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
|
|
722
|
+
);
|
|
723
|
+
--> statement-breakpoint
|
|
724
|
+
CREATE UNIQUE INDEX `oauth_refresh_token_token_unique` ON `oauth_refresh_token` (`token`);--> statement-breakpoint
|
|
725
|
+
CREATE INDEX `oauth_refresh_token_expiry_idx` ON `oauth_refresh_token` (`expires_at`);--> statement-breakpoint
|
|
726
|
+
CREATE INDEX `oauth_refresh_token_client_id_idx` ON `oauth_refresh_token` (`client_id`);--> statement-breakpoint
|
|
727
|
+
CREATE INDEX `oauth_refresh_token_session_id_idx` ON `oauth_refresh_token` (`session_id`);--> statement-breakpoint
|
|
728
|
+
CREATE INDEX `oauth_refresh_token_user_id_idx` ON `oauth_refresh_token` (`user_id`);--> statement-breakpoint
|
|
729
|
+
CREATE INDEX `oauth_refresh_token_authorization_code_id_idx` ON `oauth_refresh_token` (`authorization_code_id`);--> statement-breakpoint
|
|
730
|
+
CREATE TABLE `oauth_resource` (
|
|
731
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
732
|
+
`identifier` text NOT NULL,
|
|
733
|
+
`name` text NOT NULL,
|
|
734
|
+
`access_token_ttl` integer,
|
|
735
|
+
`refresh_token_ttl` integer,
|
|
736
|
+
`signing_algorithm` text,
|
|
737
|
+
`signing_key_id` text,
|
|
738
|
+
`allowed_scopes` text,
|
|
739
|
+
`custom_claims` text,
|
|
740
|
+
`dpop_bound_access_tokens_required` integer DEFAULT false,
|
|
741
|
+
`disabled` integer DEFAULT false,
|
|
742
|
+
`created_at` integer,
|
|
743
|
+
`updated_at` integer,
|
|
744
|
+
`policy_version` integer DEFAULT 1,
|
|
745
|
+
`metadata` text
|
|
746
|
+
);
|
|
747
|
+
--> statement-breakpoint
|
|
748
|
+
CREATE UNIQUE INDEX `oauth_resource_identifier_unique` ON `oauth_resource` (`identifier`);
|
|
749
|
+
--> statement-breakpoint
|
|
750
|
+
CREATE TRIGGER api_credentials_revoke_inactive_team AFTER UPDATE OF status ON teams
|
|
751
|
+
WHEN NEW.status <> 'active'
|
|
752
|
+
BEGIN
|
|
753
|
+
UPDATE api_keys SET revoked_at = COALESCE(revoked_at, cast(unixepoch('subsec') * 1000 as integer)) WHERE team_id = NEW.id;
|
|
754
|
+
UPDATE api_grants SET revoked_at = COALESCE(revoked_at, cast(unixepoch('subsec') * 1000 as integer)) WHERE team_id = NEW.id;
|
|
755
|
+
END;
|
|
756
|
+
--> statement-breakpoint
|
|
757
|
+
CREATE TRIGGER api_credentials_revoke_inactive_user AFTER UPDATE OF status ON user
|
|
758
|
+
WHEN NEW.status <> 'active'
|
|
759
|
+
BEGIN
|
|
760
|
+
UPDATE api_keys SET revoked_at = COALESCE(revoked_at, cast(unixepoch('subsec') * 1000 as integer)) WHERE user_id = NEW.id;
|
|
761
|
+
UPDATE api_grants SET revoked_at = COALESCE(revoked_at, cast(unixepoch('subsec') * 1000 as integer)) WHERE user_id = NEW.id;
|
|
762
|
+
END;
|
|
763
|
+
--> statement-breakpoint
|
|
764
|
+
CREATE TRIGGER backup_configs_settings_version AFTER UPDATE ON "backup_configs"
|
|
765
|
+
WHEN NEW.settings_version = OLD.settings_version AND (NEW.name IS NOT OLD.name OR NEW.environment_id IS NOT OLD.environment_id OR NEW.enabled IS NOT OLD.enabled OR NEW.schedule IS NOT OLD.schedule OR NEW.destination IS NOT OLD.destination OR NEW.retention IS NOT OLD.retention OR NEW.volumes IS NOT OLD.volumes OR NEW.database_dumps IS NOT OLD.database_dumps)
|
|
766
|
+
BEGIN
|
|
767
|
+
UPDATE "backup_configs" SET settings_version = OLD.settings_version + 1 WHERE id = NEW.id;
|
|
768
|
+
END;
|
|
769
|
+
--> statement-breakpoint
|
|
770
|
+
CREATE TRIGGER backup_configs_storage_insert BEFORE INSERT ON backup_configs
|
|
771
|
+
WHEN json_extract(NEW.destination, '$.storageId') IS NOT NULL
|
|
772
|
+
AND NOT EXISTS (SELECT 1 FROM backup_storage s JOIN projects p ON p.team_id = s.team_id
|
|
773
|
+
WHERE s.id = json_extract(NEW.destination, '$.storageId') AND p.id = NEW.project_id)
|
|
774
|
+
BEGIN SELECT RAISE(ABORT, 'Backup storage destination is unavailable in this workspace.'); END;
|
|
775
|
+
--> statement-breakpoint
|
|
776
|
+
CREATE TRIGGER backup_configs_storage_update BEFORE UPDATE OF destination, project_id ON backup_configs
|
|
777
|
+
WHEN json_extract(NEW.destination, '$.storageId') IS NOT NULL
|
|
778
|
+
AND NOT EXISTS (SELECT 1 FROM backup_storage s JOIN projects p ON p.team_id = s.team_id
|
|
779
|
+
WHERE s.id = json_extract(NEW.destination, '$.storageId') AND p.id = NEW.project_id)
|
|
780
|
+
BEGIN SELECT RAISE(ABORT, 'Backup storage destination is unavailable in this workspace.'); END;
|
|
781
|
+
--> statement-breakpoint
|
|
782
|
+
CREATE TRIGGER backup_runs_storage_insert BEFORE INSERT ON backup_runs
|
|
783
|
+
WHEN json_extract(NEW.destination, '$.storageId') IS NOT NULL
|
|
784
|
+
AND NOT EXISTS (SELECT 1 FROM backup_storage s JOIN projects p ON p.team_id = s.team_id
|
|
785
|
+
WHERE s.id = json_extract(NEW.destination, '$.storageId') AND p.id = NEW.project_id)
|
|
786
|
+
BEGIN SELECT RAISE(ABORT, 'Backup storage destination is unavailable in this workspace.'); END;
|
|
787
|
+
--> statement-breakpoint
|
|
788
|
+
CREATE TRIGGER backup_runs_storage_update BEFORE UPDATE OF destination, project_id ON backup_runs
|
|
789
|
+
WHEN json_extract(NEW.destination, '$.storageId') IS NOT NULL
|
|
790
|
+
AND NOT EXISTS (SELECT 1 FROM backup_storage s JOIN projects p ON p.team_id = s.team_id
|
|
791
|
+
WHERE s.id = json_extract(NEW.destination, '$.storageId') AND p.id = NEW.project_id)
|
|
792
|
+
BEGIN SELECT RAISE(ABORT, 'Backup storage destination is unavailable in this workspace.'); END;
|
|
793
|
+
--> statement-breakpoint
|
|
794
|
+
CREATE TRIGGER backup_storage_referenced_delete BEFORE DELETE ON backup_storage
|
|
795
|
+
WHEN EXISTS (SELECT 1 FROM teams WHERE id = OLD.team_id) AND (
|
|
796
|
+
EXISTS (SELECT 1 FROM backup_configs WHERE json_extract(destination, '$.storageId') = OLD.id)
|
|
797
|
+
OR EXISTS (SELECT 1 FROM backup_runs r WHERE json_extract(r.destination, '$.storageId') = OLD.id
|
|
798
|
+
AND (r.status IN ('queued', 'running') OR EXISTS (SELECT 1 FROM backup_artifacts a WHERE a.backup_run_id = r.id AND a.storage = 'remote'))))
|
|
799
|
+
BEGIN SELECT RAISE(ABORT, 'Backup storage is still referenced by policies or retained backups.'); END;
|
|
800
|
+
--> statement-breakpoint
|
|
801
|
+
CREATE TRIGGER backup_storage_settings_version AFTER UPDATE ON "backup_storage"
|
|
802
|
+
WHEN NEW.settings_version = OLD.settings_version AND (NEW.name IS NOT OLD.name OR NEW.bucket IS NOT OLD.bucket OR NEW.region IS NOT OLD.region OR NEW.endpoint IS NOT OLD.endpoint OR NEW.access_key_id IS NOT OLD.access_key_id OR NEW.secret_access_key_ciphertext IS NOT OLD.secret_access_key_ciphertext)
|
|
803
|
+
BEGIN
|
|
804
|
+
UPDATE "backup_storage" SET settings_version = OLD.settings_version + 1 WHERE id = NEW.id;
|
|
805
|
+
END;
|
|
806
|
+
--> statement-breakpoint
|
|
807
|
+
CREATE TRIGGER projects_settings_version AFTER UPDATE ON "projects"
|
|
808
|
+
WHEN NEW.settings_version = OLD.settings_version AND (NEW.name IS NOT OLD.name OR NEW.slug IS NOT OLD.slug OR NEW.github_repo_id IS NOT OLD.github_repo_id OR NEW.github_repo IS NOT OLD.github_repo OR NEW.github_installation_id IS NOT OLD.github_installation_id OR NEW.default_server_id IS NOT OLD.default_server_id OR NEW.avatar_path IS NOT OLD.avatar_path OR NEW.runtime_config IS NOT OLD.runtime_config OR NEW.routes IS NOT OLD.routes OR NEW.env_vars_encrypted IS NOT OLD.env_vars_encrypted)
|
|
809
|
+
BEGIN
|
|
810
|
+
UPDATE "projects" SET settings_version = OLD.settings_version + 1 WHERE id = NEW.id;
|
|
811
|
+
END;
|
|
812
|
+
--> statement-breakpoint
|
|
813
|
+
CREATE TRIGGER servers_settings_version AFTER UPDATE ON "servers"
|
|
814
|
+
WHEN NEW.settings_version = OLD.settings_version AND (NEW.name IS NOT OLD.name OR NEW.handle IS NOT OLD.handle)
|
|
815
|
+
BEGIN
|
|
816
|
+
UPDATE "servers" SET settings_version = OLD.settings_version + 1 WHERE id = NEW.id;
|
|
817
|
+
END;
|
|
818
|
+
--> statement-breakpoint
|
|
819
|
+
CREATE TRIGGER teams_settings_version AFTER UPDATE ON "teams"
|
|
820
|
+
WHEN NEW.settings_version = OLD.settings_version AND (NEW.name IS NOT OLD.name OR NEW.slug IS NOT OLD.slug OR NEW.avatar_path IS NOT OLD.avatar_path)
|
|
821
|
+
BEGIN
|
|
822
|
+
UPDATE "teams" SET settings_version = OLD.settings_version + 1 WHERE id = NEW.id;
|
|
823
|
+
END;
|
|
824
|
+
--> statement-breakpoint
|
|
825
|
+
CREATE TRIGGER user_settings_version AFTER UPDATE ON "user"
|
|
826
|
+
WHEN NEW.settings_version = OLD.settings_version AND (NEW.name IS NOT OLD.name OR NEW.username IS NOT OLD.username OR NEW.image IS NOT OLD.image OR NEW.email IS NOT OLD.email OR NEW.default_team_id IS NOT OLD.default_team_id)
|
|
827
|
+
BEGIN
|
|
828
|
+
UPDATE "user" SET settings_version = OLD.settings_version + 1 WHERE id = NEW.id;
|
|
829
|
+
END;
|
|
830
|
+
--> statement-breakpoint
|
|
831
|
+
CREATE TABLE `notification_incidents` (
|
|
832
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
833
|
+
`team_id` text NOT NULL,
|
|
834
|
+
`project_id` text,
|
|
835
|
+
`category` text NOT NULL,
|
|
836
|
+
`source_id` text NOT NULL,
|
|
837
|
+
`revision` text NOT NULL,
|
|
838
|
+
`active` integer NOT NULL,
|
|
839
|
+
`actor_id` text,
|
|
840
|
+
`title` text NOT NULL,
|
|
841
|
+
`message` text NOT NULL,
|
|
842
|
+
`path` text NOT NULL,
|
|
843
|
+
`updated_at` integer NOT NULL,
|
|
844
|
+
FOREIGN KEY (`team_id`) REFERENCES `teams`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
845
|
+
FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON UPDATE no action ON DELETE cascade
|
|
846
|
+
);
|
|
847
|
+
--> statement-breakpoint
|
|
848
|
+
CREATE TABLE `notification_mutes` (
|
|
849
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
850
|
+
`user_id` text NOT NULL,
|
|
851
|
+
`team_id` text NOT NULL,
|
|
852
|
+
`project_id` text,
|
|
853
|
+
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
854
|
+
FOREIGN KEY (`team_id`) REFERENCES `teams`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
855
|
+
FOREIGN KEY (`project_id`) REFERENCES `projects`(`id`) ON UPDATE no action ON DELETE cascade
|
|
856
|
+
);
|
|
857
|
+
--> statement-breakpoint
|
|
858
|
+
CREATE INDEX `notification_mutes_user_scope_idx` ON `notification_mutes` (`user_id`,`team_id`,`project_id`);--> statement-breakpoint
|
|
859
|
+
CREATE TABLE `notification_outbox` (
|
|
860
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
861
|
+
`incident_id` text NOT NULL,
|
|
862
|
+
`payload` text NOT NULL,
|
|
863
|
+
`revision` text NOT NULL,
|
|
864
|
+
`user_id` text NOT NULL,
|
|
865
|
+
`actor` integer DEFAULT false NOT NULL,
|
|
866
|
+
`recovery` integer NOT NULL,
|
|
867
|
+
`created_at` integer NOT NULL,
|
|
868
|
+
`first_attempt_at` integer,
|
|
869
|
+
`delivered_at` integer,
|
|
870
|
+
`discarded_at` integer,
|
|
871
|
+
`failed_at` integer,
|
|
872
|
+
`attempts` integer DEFAULT 0 NOT NULL,
|
|
873
|
+
`next_attempt_at` integer DEFAULT 0 NOT NULL,
|
|
874
|
+
`lease_owner` text,
|
|
875
|
+
`lease_until` integer DEFAULT 0 NOT NULL,
|
|
876
|
+
FOREIGN KEY (`incident_id`) REFERENCES `notification_incidents`(`id`) ON UPDATE no action ON DELETE cascade,
|
|
877
|
+
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
|
|
878
|
+
);
|
|
879
|
+
--> statement-breakpoint
|
|
880
|
+
CREATE UNIQUE INDEX `notification_outbox_event_recipient_idx` ON `notification_outbox` (`incident_id`,`revision`,`user_id`,`recovery`);--> statement-breakpoint
|
|
881
|
+
CREATE INDEX `notification_outbox_due_idx` ON `notification_outbox` (`delivered_at`,`discarded_at`,`failed_at`,`next_attempt_at`);--> statement-breakpoint
|
|
882
|
+
CREATE TABLE `notification_preferences` (
|
|
883
|
+
`user_id` text PRIMARY KEY NOT NULL,
|
|
884
|
+
`preferences` text NOT NULL,
|
|
885
|
+
`version` integer DEFAULT 1 NOT NULL,
|
|
886
|
+
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade
|
|
887
|
+
);
|
|
888
|
+
--> statement-breakpoint
|
|
889
|
+
CREATE TABLE `notification_scan_cursors` (
|
|
890
|
+
`source` text PRIMARY KEY NOT NULL,
|
|
891
|
+
`after_id` text NOT NULL
|
|
892
|
+
);
|
|
893
|
+
--> statement-breakpoint
|
|
894
|
+
CREATE INDEX `account_provider_identity_idx` ON `account` (`provider_id`,`account_id`);
|