diff --git a/docs/systems/database.md b/docs/systems/database.md index c560265d..29e880de 100644 --- a/docs/systems/database.md +++ b/docs/systems/database.md @@ -1,7 +1,7 @@ # Database Schema Reference Source of truth: `packages/server/src/db/schema.ts` (Drizzle ORM) -Migrations: `packages/server/src/db/migrate.ts` (runs on startup via `runMigrations()`) +Migrations: drizzle-kit generates SQL from `schema.ts` (`pnpm db:generate` from `packages/server/`). On startup, `initDatabase()` runs `drizzle.migrate()` against `packages/server/drizzle/`, then `ensureDefaults()` (settings row, Snowflake worker ID, first-admin promotion). Migration history was squashed to a single baseline on 2026-04-24 (backlog #31 Phase 2). Engine: SQLite via `better-sqlite3` IDs: Snowflake text, permissions: bigint decimal strings @@ -344,8 +344,6 @@ PK: (spaceId, userId, restrictionType) | autoAcceptPeering | integer NOT NULL | 1 | When 0, `peer/accept` rejects unsolicited requests with 403 | | updatedAt | integer NOT NULL | | | -Migration flags (internal): `voice_bit_migrated`, `profile_attachments_cleaned`, `thumbnails_backfilled`, `media_dimensions_backfilled`, `legacy_dm_sync_done` - --- ## Federation Tables diff --git a/packages/server/drizzle/0000_initial.sql b/packages/server/drizzle/0000_lethal_wildside.sql similarity index 97% rename from packages/server/drizzle/0000_initial.sql rename to packages/server/drizzle/0000_lethal_wildside.sql index 40a0b2af..11a2b306 100644 --- a/packages/server/drizzle/0000_initial.sql +++ b/packages/server/drizzle/0000_lethal_wildside.sql @@ -188,7 +188,8 @@ CREATE TABLE `federation_peers` ( `status` text DEFAULT 'active' NOT NULL, `last_seen_at` integer, `last_failure_at` integer, - `consecutive_failures` integer DEFAULT 0, + `consecutive_failures` integer DEFAULT 0 NOT NULL, + `consecutive_auth_failures` integer DEFAULT 0 NOT NULL, `last_synced_at` integer DEFAULT 0, `remote_max_upload_size` integer, `nonce_supported` integer DEFAULT 0 NOT NULL, @@ -238,6 +239,7 @@ CREATE TABLE `instance_settings` ( `federation_relay_enabled` integer DEFAULT 1 NOT NULL, `federation_relay_ttl_days` integer DEFAULT 30 NOT NULL, `default_auto_rotate_interval_days` integer DEFAULT 90 NOT NULL, + `auto_accept_peering` integer DEFAULT 1 NOT NULL, `updated_at` integer NOT NULL ); --> statement-breakpoint @@ -278,6 +280,15 @@ CREATE TABLE `messages` ( FOREIGN KEY (`reply_to_id`) REFERENCES `messages`(`id`) ON UPDATE no action ON DELETE set null ); --> statement-breakpoint +CREATE TABLE `peer_approval_requests` ( + `id` text PRIMARY KEY NOT NULL, + `origin` text NOT NULL, + `instance_name` text, + `hmac_secret` text NOT NULL, + `requested_at` integer NOT NULL, + `expires_at` integer NOT NULL +); +--> statement-breakpoint CREATE TABLE `reactions` ( `id` text PRIMARY KEY NOT NULL, `message_id` text NOT NULL, @@ -436,6 +447,7 @@ CREATE INDEX `idx_join_requests_space_id_status` ON `join_requests` (`space_id`, CREATE INDEX `idx_member_roles_user_id_space_id` ON `member_roles` (`user_id`,`space_id`);--> statement-breakpoint CREATE INDEX `idx_messages_channel_id` ON `messages` (`channel_id`);--> statement-breakpoint CREATE INDEX `idx_messages_user_id` ON `messages` (`user_id`);--> statement-breakpoint +CREATE UNIQUE INDEX `peer_approval_requests_origin_unique` ON `peer_approval_requests` (`origin`);--> statement-breakpoint CREATE INDEX `idx_reactions_message_id` ON `reactions` (`message_id`);--> statement-breakpoint CREATE INDEX `idx_read_states_user_id` ON `read_states` (`user_id`);--> statement-breakpoint CREATE INDEX `idx_roles_space_id` ON `roles` (`space_id`);--> statement-breakpoint diff --git a/packages/server/drizzle/0001_clear_earthquake.sql b/packages/server/drizzle/0001_clear_earthquake.sql deleted file mode 100644 index 0e66dc89..00000000 --- a/packages/server/drizzle/0001_clear_earthquake.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `instance_settings` ADD `auto_accept_peering` integer DEFAULT 1 NOT NULL; \ No newline at end of file diff --git a/packages/server/drizzle/0002_peer_approval_requests.sql b/packages/server/drizzle/0002_peer_approval_requests.sql deleted file mode 100644 index 48bb8350..00000000 --- a/packages/server/drizzle/0002_peer_approval_requests.sql +++ /dev/null @@ -1,10 +0,0 @@ -CREATE TABLE `peer_approval_requests` ( - `id` text PRIMARY KEY NOT NULL, - `origin` text NOT NULL, - `instance_name` text, - `hmac_secret` text NOT NULL, - `requested_at` integer NOT NULL, - `expires_at` integer NOT NULL -); ---> statement-breakpoint -CREATE UNIQUE INDEX `peer_approval_requests_origin_unique` ON `peer_approval_requests` (`origin`); diff --git a/packages/server/drizzle/0003_classy_loki.sql b/packages/server/drizzle/0003_classy_loki.sql deleted file mode 100644 index de150deb..00000000 --- a/packages/server/drizzle/0003_classy_loki.sql +++ /dev/null @@ -1 +0,0 @@ -ALTER TABLE `federation_peers` ADD `consecutive_auth_failures` integer DEFAULT 0 NOT NULL; diff --git a/packages/server/drizzle/0004_cooing_black_knight.sql b/packages/server/drizzle/0004_cooing_black_knight.sql deleted file mode 100644 index cac73e3b..00000000 --- a/packages/server/drizzle/0004_cooing_black_knight.sql +++ /dev/null @@ -1,29 +0,0 @@ -PRAGMA defer_foreign_keys=ON; ---> statement-breakpoint -CREATE TABLE `__new_federation_peers` ( - `id` text PRIMARY KEY NOT NULL, - `origin` text NOT NULL, - `instance_name` text, - `hmac_secret` text NOT NULL, - `status` text DEFAULT 'active' NOT NULL, - `last_seen_at` integer, - `last_failure_at` integer, - `consecutive_failures` integer DEFAULT 0 NOT NULL, - `consecutive_auth_failures` integer DEFAULT 0 NOT NULL, - `last_synced_at` integer DEFAULT 0, - `remote_max_upload_size` integer, - `nonce_supported` integer DEFAULT 0 NOT NULL, - `pending_hmac_secret` text, - `secret_rotation_at` integer, - `secret_rotated_at` integer, - `auto_rotate_interval_days` integer DEFAULT 90 NOT NULL, - `created_at` integer NOT NULL -); ---> statement-breakpoint -INSERT INTO `__new_federation_peers`("id", "origin", "instance_name", "hmac_secret", "status", "last_seen_at", "last_failure_at", "consecutive_failures", "consecutive_auth_failures", "last_synced_at", "remote_max_upload_size", "nonce_supported", "pending_hmac_secret", "secret_rotation_at", "secret_rotated_at", "auto_rotate_interval_days", "created_at") SELECT "id", "origin", "instance_name", "hmac_secret", "status", "last_seen_at", "last_failure_at", COALESCE("consecutive_failures", 0), "consecutive_auth_failures", "last_synced_at", "remote_max_upload_size", "nonce_supported", "pending_hmac_secret", "secret_rotation_at", "secret_rotated_at", "auto_rotate_interval_days", "created_at" FROM `federation_peers`; ---> statement-breakpoint -DROP TABLE `federation_peers`; ---> statement-breakpoint -ALTER TABLE `__new_federation_peers` RENAME TO `federation_peers`; ---> statement-breakpoint -CREATE UNIQUE INDEX `federation_peers_origin_unique` ON `federation_peers` (`origin`); diff --git a/packages/server/drizzle/meta/0000_snapshot.json b/packages/server/drizzle/meta/0000_snapshot.json index 82f6914e..73bbaee0 100644 --- a/packages/server/drizzle/meta/0000_snapshot.json +++ b/packages/server/drizzle/meta/0000_snapshot.json @@ -1,7 +1,7 @@ { "version": "6", "dialect": "sqlite", - "id": "092e4ee0-51c4-4332-890c-fa011657a9a5", + "id": "b5b7d74f-4158-4798-9f01-2cbab126f9da", "prevId": "00000000-0000-0000-0000-000000000000", "tables": { "attachments": { @@ -1456,7 +1456,15 @@ "name": "consecutive_failures", "type": "integer", "primaryKey": false, - "notNull": false, + "notNull": true, + "autoincrement": false, + "default": 0 + }, + "consecutive_auth_failures": { + "name": "consecutive_auth_failures", + "type": "integer", + "primaryKey": false, + "notNull": true, "autoincrement": false, "default": 0 }, @@ -1850,6 +1858,14 @@ "autoincrement": false, "default": 90 }, + "auto_accept_peering": { + "name": "auto_accept_peering", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false, + "default": 1 + }, "updated_at": { "name": "updated_at", "type": "integer", @@ -2179,6 +2195,65 @@ "compositePrimaryKeys": {}, "uniqueConstraints": {} }, + "peer_approval_requests": { + "name": "peer_approval_requests", + "columns": { + "id": { + "name": "id", + "type": "text", + "primaryKey": true, + "notNull": true, + "autoincrement": false + }, + "origin": { + "name": "origin", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "instance_name": { + "name": "instance_name", + "type": "text", + "primaryKey": false, + "notNull": false, + "autoincrement": false + }, + "hmac_secret": { + "name": "hmac_secret", + "type": "text", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "requested_at": { + "name": "requested_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + }, + "expires_at": { + "name": "expires_at", + "type": "integer", + "primaryKey": false, + "notNull": true, + "autoincrement": false + } + }, + "indexes": { + "peer_approval_requests_origin_unique": { + "name": "peer_approval_requests_origin_unique", + "columns": [ + "origin" + ], + "isUnique": true + } + }, + "foreignKeys": {}, + "compositePrimaryKeys": {}, + "uniqueConstraints": {} + }, "reactions": { "name": "reactions", "columns": { diff --git a/packages/server/drizzle/meta/0001_snapshot.json b/packages/server/drizzle/meta/0001_snapshot.json deleted file mode 100644 index e44ebcb1..00000000 --- a/packages/server/drizzle/meta/0001_snapshot.json +++ /dev/null @@ -1,3158 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "2148ab61-cd98-4493-8c98-912ae17eb14b", - "prevId": "092e4ee0-51c4-4332-890c-fa011657a9a5", - "tables": { - "attachments": { - "name": "attachments", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "message_id": { - "name": "message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "dm_message_id": { - "name": "dm_message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "uploader_id": { - "name": "uploader_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "filename": { - "name": "filename", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_name": { - "name": "original_name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mimetype": { - "name": "mimetype", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "size": { - "name": "size", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "thumbnail_filename": { - "name": "thumbnail_filename", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "width": { - "name": "width", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "height": { - "name": "height", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "duration": { - "name": "duration", - "type": "real", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "federation_status": { - "name": "federation_status", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "federation_meta": { - "name": "federation_meta", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_attachments_message_id": { - "name": "idx_attachments_message_id", - "columns": [ - "message_id" - ], - "isUnique": false - }, - "idx_attachments_dm_message_id": { - "name": "idx_attachments_dm_message_id", - "columns": [ - "dm_message_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "attachments_message_id_messages_id_fk": { - "name": "attachments_message_id_messages_id_fk", - "tableFrom": "attachments", - "tableTo": "messages", - "columnsFrom": [ - "message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attachments_dm_message_id_dm_messages_id_fk": { - "name": "attachments_dm_message_id_dm_messages_id_fk", - "tableFrom": "attachments", - "tableTo": "dm_messages", - "columnsFrom": [ - "dm_message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "bans": { - "name": "bans", - "columns": { - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "reason": { - "name": "reason", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "banned_by": { - "name": "banned_by", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_bans_space_id": { - "name": "idx_bans_space_id", - "columns": [ - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "bans_space_id_spaces_id_fk": { - "name": "bans_space_id_spaces_id_fk", - "tableFrom": "bans", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "bans_user_id_users_id_fk": { - "name": "bans_user_id_users_id_fk", - "tableFrom": "bans", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "bans_banned_by_users_id_fk": { - "name": "bans_banned_by_users_id_fk", - "tableFrom": "bans", - "tableTo": "users", - "columnsFrom": [ - "banned_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "bans_space_id_user_id_pk": { - "columns": [ - "space_id", - "user_id" - ], - "name": "bans_space_id_user_id_pk" - } - }, - "uniqueConstraints": {} - }, - "category_overrides": { - "name": "category_overrides", - "columns": { - "category_id": { - "name": "category_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "allow": { - "name": "allow", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - }, - "deny": { - "name": "deny", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - } - }, - "indexes": { - "idx_category_overrides_category_id": { - "name": "idx_category_overrides_category_id", - "columns": [ - "category_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "category_overrides_category_id_channel_categories_id_fk": { - "name": "category_overrides_category_id_channel_categories_id_fk", - "tableFrom": "category_overrides", - "tableTo": "channel_categories", - "columnsFrom": [ - "category_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "category_overrides_category_id_target_type_target_id_pk": { - "columns": [ - "category_id", - "target_type", - "target_id" - ], - "name": "category_overrides_category_id_target_type_target_id_pk" - } - }, - "uniqueConstraints": {} - }, - "channel_categories": { - "name": "channel_categories", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_channel_categories_space_id": { - "name": "idx_channel_categories_space_id", - "columns": [ - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "channel_categories_space_id_spaces_id_fk": { - "name": "channel_categories_space_id_spaces_id_fk", - "tableFrom": "channel_categories", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "channel_overrides": { - "name": "channel_overrides", - "columns": { - "channel_id": { - "name": "channel_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "allow": { - "name": "allow", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - }, - "deny": { - "name": "deny", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - } - }, - "indexes": { - "idx_channel_overrides_channel_id": { - "name": "idx_channel_overrides_channel_id", - "columns": [ - "channel_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "channel_overrides_channel_id_channels_id_fk": { - "name": "channel_overrides_channel_id_channels_id_fk", - "tableFrom": "channel_overrides", - "tableTo": "channels", - "columnsFrom": [ - "channel_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "channel_overrides_channel_id_target_type_target_id_pk": { - "columns": [ - "channel_id", - "target_type", - "target_id" - ], - "name": "channel_overrides_channel_id_target_type_target_id_pk" - } - }, - "uniqueConstraints": {} - }, - "channels": { - "name": "channels", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "topic": { - "name": "topic", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "category_id": { - "name": "category_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_channels_space_id": { - "name": "idx_channels_space_id", - "columns": [ - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "channels_space_id_spaces_id_fk": { - "name": "channels_space_id_spaces_id_fk", - "tableFrom": "channels", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "dm_channels": { - "name": "dm_channels", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "owner_id": { - "name": "owner_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "federated_id": { - "name": "federated_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "owner_home_user_id": { - "name": "owner_home_user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "owner_home_instance": { - "name": "owner_home_instance", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "deleted_at": { - "name": "deleted_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_dm_federated": { - "name": "idx_dm_federated", - "columns": [ - "federated_id" - ], - "isUnique": true, - "where": "federated_id IS NOT NULL" - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "dm_members": { - "name": "dm_members", - "columns": { - "dm_channel_id": { - "name": "dm_channel_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "closed": { - "name": "closed", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": { - "idx_dm_members_user_id": { - "name": "idx_dm_members_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "dm_members_dm_channel_id_dm_channels_id_fk": { - "name": "dm_members_dm_channel_id_dm_channels_id_fk", - "tableFrom": "dm_members", - "tableTo": "dm_channels", - "columnsFrom": [ - "dm_channel_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "dm_members_user_id_users_id_fk": { - "name": "dm_members_user_id_users_id_fk", - "tableFrom": "dm_members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "dm_members_dm_channel_id_user_id_pk": { - "columns": [ - "dm_channel_id", - "user_id" - ], - "name": "dm_members_dm_channel_id_user_id_pk" - } - }, - "uniqueConstraints": {} - }, - "dm_messages": { - "name": "dm_messages", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "dm_channel_id": { - "name": "dm_channel_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "reply_to_id": { - "name": "reply_to_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'user'" - }, - "edited_at": { - "name": "edited_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "source_instance": { - "name": "source_instance", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "source_message_id": { - "name": "source_message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "encryption_version": { - "name": "encryption_version", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_dm_messages_dm_channel_id": { - "name": "idx_dm_messages_dm_channel_id", - "columns": [ - "dm_channel_id" - ], - "isUnique": false - }, - "idx_dm_messages_user_id": { - "name": "idx_dm_messages_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "idx_dm_messages_source_unique": { - "name": "idx_dm_messages_source_unique", - "columns": [ - "source_instance", - "source_message_id" - ], - "isUnique": true, - "where": "source_instance IS NOT NULL" - } - }, - "foreignKeys": { - "dm_messages_dm_channel_id_dm_channels_id_fk": { - "name": "dm_messages_dm_channel_id_dm_channels_id_fk", - "tableFrom": "dm_messages", - "tableTo": "dm_channels", - "columnsFrom": [ - "dm_channel_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "dm_messages_user_id_users_id_fk": { - "name": "dm_messages_user_id_users_id_fk", - "tableFrom": "dm_messages", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "dm_messages_reply_to_id_dm_messages_id_fk": { - "name": "dm_messages_reply_to_id_dm_messages_id_fk", - "tableFrom": "dm_messages", - "tableTo": "dm_messages", - "columnsFrom": [ - "reply_to_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "dm_reactions": { - "name": "dm_reactions", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "dm_message_id": { - "name": "dm_message_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "emoji": { - "name": "emoji", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_dm_reactions_dm_message_id": { - "name": "idx_dm_reactions_dm_message_id", - "columns": [ - "dm_message_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "dm_reactions_dm_message_id_dm_messages_id_fk": { - "name": "dm_reactions_dm_message_id_dm_messages_id_fk", - "tableFrom": "dm_reactions", - "tableTo": "dm_messages", - "columnsFrom": [ - "dm_message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "dm_reactions_user_id_users_id_fk": { - "name": "dm_reactions_user_id_users_id_fk", - "tableFrom": "dm_reactions", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "embeds": { - "name": "embeds", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "message_id": { - "name": "message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "dm_message_id": { - "name": "dm_message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "url": { - "name": "url", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "embed_type": { - "name": "embed_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "embed_url": { - "name": "embed_url", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "width": { - "name": "width", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "height": { - "name": "height", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "color": { - "name": "color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_embeds_message_id": { - "name": "idx_embeds_message_id", - "columns": [ - "message_id" - ], - "isUnique": false - }, - "idx_embeds_dm_message_id": { - "name": "idx_embeds_dm_message_id", - "columns": [ - "dm_message_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "embeds_message_id_messages_id_fk": { - "name": "embeds_message_id_messages_id_fk", - "tableFrom": "embeds", - "tableTo": "messages", - "columnsFrom": [ - "message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "embeds_dm_message_id_dm_messages_id_fk": { - "name": "embeds_dm_message_id_dm_messages_id_fk", - "tableFrom": "embeds", - "tableTo": "dm_messages", - "columnsFrom": [ - "dm_message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "federation_file_queue": { - "name": "federation_file_queue", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "peer_origin": { - "name": "peer_origin", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "dm_message_id": { - "name": "dm_message_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_filename": { - "name": "target_filename", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "original_name": { - "name": "original_name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mimetype": { - "name": "mimetype", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "size": { - "name": "size", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'pending'" - }, - "rejection_reason": { - "name": "rejection_reason", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "attempts": { - "name": "attempts", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "next_retry_at": { - "name": "next_retry_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "federation_mutation_log": { - "name": "federation_mutation_log", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "entity_id": { - "name": "entity_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "context_id": { - "name": "context_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "context_type": { - "name": "context_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'dm'" - }, - "mutation_type": { - "name": "mutation_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mutated_at": { - "name": "mutated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "payload": { - "name": "payload", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "idx_mutation_log_time": { - "name": "idx_mutation_log_time", - "columns": [ - "mutated_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "federation_outbox": { - "name": "federation_outbox", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "peer_id": { - "name": "peer_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "context_id": { - "name": "context_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "entity_id": { - "name": "entity_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "context_type": { - "name": "context_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'dm'" - }, - "event_type": { - "name": "event_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "payload": { - "name": "payload", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "encryption_version": { - "name": "encryption_version", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "attempts": { - "name": "attempts", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "next_retry_at": { - "name": "next_retry_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_outbox_retry": { - "name": "idx_outbox_retry", - "columns": [ - "next_retry_at" - ], - "isUnique": false - }, - "federation_outbox_peer_id_entity_id_unique": { - "name": "federation_outbox_peer_id_entity_id_unique", - "columns": [ - "peer_id", - "entity_id" - ], - "isUnique": true - } - }, - "foreignKeys": { - "federation_outbox_peer_id_federation_peers_id_fk": { - "name": "federation_outbox_peer_id_federation_peers_id_fk", - "tableFrom": "federation_outbox", - "tableTo": "federation_peers", - "columnsFrom": [ - "peer_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "federation_peers": { - "name": "federation_peers", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "origin": { - "name": "origin", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "instance_name": { - "name": "instance_name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "hmac_secret": { - "name": "hmac_secret", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'active'" - }, - "last_seen_at": { - "name": "last_seen_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "last_failure_at": { - "name": "last_failure_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "consecutive_failures": { - "name": "consecutive_failures", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "remote_max_upload_size": { - "name": "remote_max_upload_size", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "nonce_supported": { - "name": "nonce_supported", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "pending_hmac_secret": { - "name": "pending_hmac_secret", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "secret_rotation_at": { - "name": "secret_rotation_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "secret_rotated_at": { - "name": "secret_rotated_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "auto_rotate_interval_days": { - "name": "auto_rotate_interval_days", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 90 - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "federation_peers_origin_unique": { - "name": "federation_peers_origin_unique", - "columns": [ - "origin" - ], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "friend_requests": { - "name": "friend_requests", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "from_id": { - "name": "from_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "to_id": { - "name": "to_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'pending'" - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_friend_requests_to_id": { - "name": "idx_friend_requests_to_id", - "columns": [ - "to_id" - ], - "isUnique": false - }, - "idx_friend_requests_from_id": { - "name": "idx_friend_requests_from_id", - "columns": [ - "from_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "friend_requests_from_id_users_id_fk": { - "name": "friend_requests_from_id_users_id_fk", - "tableFrom": "friend_requests", - "tableTo": "users", - "columnsFrom": [ - "from_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friend_requests_to_id_users_id_fk": { - "name": "friend_requests_to_id_users_id_fk", - "tableFrom": "friend_requests", - "tableTo": "users", - "columnsFrom": [ - "to_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "friends": { - "name": "friends", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "friend_id": { - "name": "friend_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_friends_user_id": { - "name": "idx_friends_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "idx_friends_friend_id": { - "name": "idx_friends_friend_id", - "columns": [ - "friend_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "friends_user_id_users_id_fk": { - "name": "friends_user_id_users_id_fk", - "tableFrom": "friends", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_friend_id_users_id_fk": { - "name": "friends_friend_id_users_id_fk", - "tableFrom": "friends", - "tableTo": "users", - "columnsFrom": [ - "friend_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_user_id_friend_id_pk": { - "columns": [ - "user_id", - "friend_id" - ], - "name": "friends_user_id_friend_id_pk" - } - }, - "uniqueConstraints": {} - }, - "instance_settings": { - "name": "instance_settings", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "instance_name": { - "name": "instance_name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'Backspace'" - }, - "worker_id": { - "name": "worker_id", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "discovery_enabled": { - "name": "discovery_enabled", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "max_bitrate_kbps": { - "name": "max_bitrate_kbps", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 20000 - }, - "min_bitrate_kbps": { - "name": "min_bitrate_kbps", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 500 - }, - "bitrate_step_kbps": { - "name": "bitrate_step_kbps", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 500 - }, - "allowed_resolutions": { - "name": "allowed_resolutions", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'540,720,1080'" - }, - "allowed_framerates": { - "name": "allowed_framerates", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'30,45,60'" - }, - "max_resolution": { - "name": "max_resolution", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1080 - }, - "max_framerate": { - "name": "max_framerate", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 60 - }, - "registration_open": { - "name": "registration_open", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "gif_api_key": { - "name": "gif_api_key", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "bitrate_matrix_overrides": { - "name": "bitrate_matrix_overrides", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "allow_custom_bitrate": { - "name": "allow_custom_bitrate", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "max_upload_size_bytes": { - "name": "max_upload_size_bytes", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "federation_relay_enabled": { - "name": "federation_relay_enabled", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "federation_relay_ttl_days": { - "name": "federation_relay_ttl_days", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 30 - }, - "default_auto_rotate_interval_days": { - "name": "default_auto_rotate_interval_days", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 90 - }, - "auto_accept_peering": { - "name": "auto_accept_peering", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "updated_at": { - "name": "updated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "join_requests": { - "name": "join_requests", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "message": { - "name": "message", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'pending'" - }, - "decided_by": { - "name": "decided_by", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "decided_at": { - "name": "decided_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "idx_join_requests_space_id_status": { - "name": "idx_join_requests_space_id_status", - "columns": [ - "space_id", - "status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "join_requests_space_id_spaces_id_fk": { - "name": "join_requests_space_id_spaces_id_fk", - "tableFrom": "join_requests", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "join_requests_user_id_users_id_fk": { - "name": "join_requests_user_id_users_id_fk", - "tableFrom": "join_requests", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "join_requests_decided_by_users_id_fk": { - "name": "join_requests_decided_by_users_id_fk", - "tableFrom": "join_requests", - "tableTo": "users", - "columnsFrom": [ - "decided_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "member_roles": { - "name": "member_roles", - "columns": { - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "role_id": { - "name": "role_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_member_roles_user_id_space_id": { - "name": "idx_member_roles_user_id_space_id", - "columns": [ - "user_id", - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "member_roles_space_id_spaces_id_fk": { - "name": "member_roles_space_id_spaces_id_fk", - "tableFrom": "member_roles", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "member_roles_user_id_users_id_fk": { - "name": "member_roles_user_id_users_id_fk", - "tableFrom": "member_roles", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "member_roles_role_id_roles_id_fk": { - "name": "member_roles_role_id_roles_id_fk", - "tableFrom": "member_roles", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "member_roles_space_id_user_id_role_id_pk": { - "columns": [ - "space_id", - "user_id", - "role_id" - ], - "name": "member_roles_space_id_user_id_role_id_pk" - } - }, - "uniqueConstraints": {} - }, - "messages": { - "name": "messages", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "channel_id": { - "name": "channel_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "reply_to_id": { - "name": "reply_to_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "edited_at": { - "name": "edited_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_messages_channel_id": { - "name": "idx_messages_channel_id", - "columns": [ - "channel_id" - ], - "isUnique": false - }, - "idx_messages_user_id": { - "name": "idx_messages_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "messages_channel_id_channels_id_fk": { - "name": "messages_channel_id_channels_id_fk", - "tableFrom": "messages", - "tableTo": "channels", - "columnsFrom": [ - "channel_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "messages_user_id_users_id_fk": { - "name": "messages_user_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "messages_reply_to_id_messages_id_fk": { - "name": "messages_reply_to_id_messages_id_fk", - "tableFrom": "messages", - "tableTo": "messages", - "columnsFrom": [ - "reply_to_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "reactions": { - "name": "reactions", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "message_id": { - "name": "message_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "emoji": { - "name": "emoji", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_reactions_message_id": { - "name": "idx_reactions_message_id", - "columns": [ - "message_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "reactions_message_id_messages_id_fk": { - "name": "reactions_message_id_messages_id_fk", - "tableFrom": "reactions", - "tableTo": "messages", - "columnsFrom": [ - "message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "reactions_user_id_users_id_fk": { - "name": "reactions_user_id_users_id_fk", - "tableFrom": "reactions", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "read_states": { - "name": "read_states", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "channel_id": { - "name": "channel_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "last_read_message_id": { - "name": "last_read_message_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "updated_at": { - "name": "updated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_read_states_user_id": { - "name": "idx_read_states_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "read_states_user_id_users_id_fk": { - "name": "read_states_user_id_users_id_fk", - "tableFrom": "read_states", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "read_states_user_id_channel_id_pk": { - "columns": [ - "user_id", - "channel_id" - ], - "name": "read_states_user_id_channel_id_pk" - } - }, - "uniqueConstraints": {} - }, - "roles": { - "name": "roles", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "color": { - "name": "color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'#b9bbbe'" - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "permissions": { - "name": "permissions", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_roles_space_id": { - "name": "idx_roles_space_id", - "columns": [ - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "roles_space_id_spaces_id_fk": { - "name": "roles_space_id_spaces_id_fk", - "tableFrom": "roles", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "space_folder_members": { - "name": "space_folder_members", - "columns": { - "folder_id": { - "name": "folder_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": {}, - "foreignKeys": { - "space_folder_members_folder_id_space_folders_id_fk": { - "name": "space_folder_members_folder_id_space_folders_id_fk", - "tableFrom": "space_folder_members", - "tableTo": "space_folders", - "columnsFrom": [ - "folder_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "space_folder_members_folder_id_space_id_pk": { - "columns": [ - "folder_id", - "space_id" - ], - "name": "space_folder_members_folder_id_space_id_pk" - } - }, - "uniqueConstraints": {} - }, - "space_folders": { - "name": "space_folders", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "color": { - "name": "color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "space_folders_user_id_users_id_fk": { - "name": "space_folders_user_id_users_id_fk", - "tableFrom": "space_folders", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "space_members": { - "name": "space_members", - "columns": { - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "nickname": { - "name": "nickname", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "joined_at": { - "name": "joined_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_space_members_user_id": { - "name": "idx_space_members_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "space_members_space_id_spaces_id_fk": { - "name": "space_members_space_id_spaces_id_fk", - "tableFrom": "space_members", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "space_members_user_id_users_id_fk": { - "name": "space_members_user_id_users_id_fk", - "tableFrom": "space_members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "space_members_space_id_user_id_pk": { - "columns": [ - "space_id", - "user_id" - ], - "name": "space_members_space_id_user_id_pk" - } - }, - "uniqueConstraints": {} - }, - "spaces": { - "name": "spaces", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "icon": { - "name": "icon", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "banner": { - "name": "banner", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "avatar_color": { - "name": "avatar_color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "owner_id": { - "name": "owner_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "invite_code": { - "name": "invite_code", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "visibility": { - "name": "visibility", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'private'" - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "spaces_invite_code_unique": { - "name": "spaces_invite_code_unique", - "columns": [ - "invite_code" - ], - "isUnique": true - } - }, - "foreignKeys": { - "spaces_owner_id_users_id_fk": { - "name": "spaces_owner_id_users_id_fk", - "tableFrom": "spaces", - "tableTo": "users", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "user_federation_registry": { - "name": "user_federation_registry", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "origin": { - "name": "origin", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "label": { - "name": "label", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "''" - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "''" - }, - "remote_user_id": { - "name": "remote_user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "''" - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'connected'" - }, - "added_at": { - "name": "added_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "last_connected_at": { - "name": "last_connected_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "disconnected_at": { - "name": "disconnected_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "error_message": { - "name": "error_message", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "user_federation_registry_user_id_users_id_fk": { - "name": "user_federation_registry_user_id_users_id_fk", - "tableFrom": "user_federation_registry", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "user_federation_registry_user_id_origin_pk": { - "columns": [ - "user_id", - "origin" - ], - "name": "user_federation_registry_user_id_origin_pk" - } - }, - "uniqueConstraints": {} - }, - "user_space_layout": { - "name": "user_space_layout", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "layout": { - "name": "layout", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'[]'" - }, - "updated_at": { - "name": "updated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "user_space_layout_user_id_users_id_fk": { - "name": "user_space_layout_user_id_users_id_fk", - "tableFrom": "user_space_layout", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "users": { - "name": "users", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "display_name": { - "name": "display_name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password_hash": { - "name": "password_hash", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "avatar": { - "name": "avatar", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'offline'" - }, - "custom_status": { - "name": "custom_status", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_admin": { - "name": "is_admin", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "home_instance": { - "name": "home_instance", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "home_user_id": { - "name": "home_user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "replicated_instances": { - "name": "replicated_instances", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'[]'" - }, - "banner": { - "name": "banner", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "accent_color": { - "name": "accent_color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "avatar_color": { - "name": "avatar_color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "bio": { - "name": "bio", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_deleted": { - "name": "is_deleted", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "discoverable": { - "name": "discoverable", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 1 - }, - "profile_updated_at": { - "name": "profile_updated_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password_changed_at": { - "name": "password_changed_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "show_activity": { - "name": "show_activity", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "federation_registry_updated_at": { - "name": "federation_registry_updated_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "users_username_unique": { - "name": "users_username_unique", - "columns": [ - "username" - ], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "voice_restrictions": { - "name": "voice_restrictions", - "columns": { - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "restriction_type": { - "name": "restriction_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "moderator_id": { - "name": "moderator_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_voice_restrictions_space_id": { - "name": "idx_voice_restrictions_space_id", - "columns": [ - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "voice_restrictions_space_id_spaces_id_fk": { - "name": "voice_restrictions_space_id_spaces_id_fk", - "tableFrom": "voice_restrictions", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "voice_restrictions_user_id_users_id_fk": { - "name": "voice_restrictions_user_id_users_id_fk", - "tableFrom": "voice_restrictions", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "voice_restrictions_moderator_id_users_id_fk": { - "name": "voice_restrictions_moderator_id_users_id_fk", - "tableFrom": "voice_restrictions", - "tableTo": "users", - "columnsFrom": [ - "moderator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "voice_restrictions_space_id_user_id_restriction_type_pk": { - "columns": [ - "space_id", - "user_id", - "restriction_type" - ], - "name": "voice_restrictions_space_id_user_id_restriction_type_pk" - } - }, - "uniqueConstraints": {} - } - }, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} \ No newline at end of file diff --git a/packages/server/drizzle/meta/0003_snapshot.json b/packages/server/drizzle/meta/0003_snapshot.json deleted file mode 100644 index d39c7df2..00000000 --- a/packages/server/drizzle/meta/0003_snapshot.json +++ /dev/null @@ -1,3225 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "cd27f0d9-4506-4906-be9c-fee112ad7bdd", - "prevId": "2148ab61-cd98-4493-8c98-912ae17eb14b", - "tables": { - "attachments": { - "name": "attachments", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "message_id": { - "name": "message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "dm_message_id": { - "name": "dm_message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "uploader_id": { - "name": "uploader_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "filename": { - "name": "filename", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_name": { - "name": "original_name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mimetype": { - "name": "mimetype", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "size": { - "name": "size", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "thumbnail_filename": { - "name": "thumbnail_filename", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "width": { - "name": "width", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "height": { - "name": "height", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "duration": { - "name": "duration", - "type": "real", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "federation_status": { - "name": "federation_status", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "federation_meta": { - "name": "federation_meta", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_attachments_message_id": { - "name": "idx_attachments_message_id", - "columns": [ - "message_id" - ], - "isUnique": false - }, - "idx_attachments_dm_message_id": { - "name": "idx_attachments_dm_message_id", - "columns": [ - "dm_message_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "attachments_message_id_messages_id_fk": { - "name": "attachments_message_id_messages_id_fk", - "tableFrom": "attachments", - "tableTo": "messages", - "columnsFrom": [ - "message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attachments_dm_message_id_dm_messages_id_fk": { - "name": "attachments_dm_message_id_dm_messages_id_fk", - "tableFrom": "attachments", - "tableTo": "dm_messages", - "columnsFrom": [ - "dm_message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "bans": { - "name": "bans", - "columns": { - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "reason": { - "name": "reason", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "banned_by": { - "name": "banned_by", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_bans_space_id": { - "name": "idx_bans_space_id", - "columns": [ - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "bans_space_id_spaces_id_fk": { - "name": "bans_space_id_spaces_id_fk", - "tableFrom": "bans", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "bans_user_id_users_id_fk": { - "name": "bans_user_id_users_id_fk", - "tableFrom": "bans", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "bans_banned_by_users_id_fk": { - "name": "bans_banned_by_users_id_fk", - "tableFrom": "bans", - "tableTo": "users", - "columnsFrom": [ - "banned_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "bans_space_id_user_id_pk": { - "columns": [ - "space_id", - "user_id" - ], - "name": "bans_space_id_user_id_pk" - } - }, - "uniqueConstraints": {} - }, - "category_overrides": { - "name": "category_overrides", - "columns": { - "category_id": { - "name": "category_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "allow": { - "name": "allow", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - }, - "deny": { - "name": "deny", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - } - }, - "indexes": { - "idx_category_overrides_category_id": { - "name": "idx_category_overrides_category_id", - "columns": [ - "category_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "category_overrides_category_id_channel_categories_id_fk": { - "name": "category_overrides_category_id_channel_categories_id_fk", - "tableFrom": "category_overrides", - "tableTo": "channel_categories", - "columnsFrom": [ - "category_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "category_overrides_category_id_target_type_target_id_pk": { - "columns": [ - "category_id", - "target_type", - "target_id" - ], - "name": "category_overrides_category_id_target_type_target_id_pk" - } - }, - "uniqueConstraints": {} - }, - "channel_categories": { - "name": "channel_categories", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_channel_categories_space_id": { - "name": "idx_channel_categories_space_id", - "columns": [ - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "channel_categories_space_id_spaces_id_fk": { - "name": "channel_categories_space_id_spaces_id_fk", - "tableFrom": "channel_categories", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "channel_overrides": { - "name": "channel_overrides", - "columns": { - "channel_id": { - "name": "channel_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "allow": { - "name": "allow", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - }, - "deny": { - "name": "deny", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - } - }, - "indexes": { - "idx_channel_overrides_channel_id": { - "name": "idx_channel_overrides_channel_id", - "columns": [ - "channel_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "channel_overrides_channel_id_channels_id_fk": { - "name": "channel_overrides_channel_id_channels_id_fk", - "tableFrom": "channel_overrides", - "tableTo": "channels", - "columnsFrom": [ - "channel_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "channel_overrides_channel_id_target_type_target_id_pk": { - "columns": [ - "channel_id", - "target_type", - "target_id" - ], - "name": "channel_overrides_channel_id_target_type_target_id_pk" - } - }, - "uniqueConstraints": {} - }, - "channels": { - "name": "channels", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "topic": { - "name": "topic", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "category_id": { - "name": "category_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_channels_space_id": { - "name": "idx_channels_space_id", - "columns": [ - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "channels_space_id_spaces_id_fk": { - "name": "channels_space_id_spaces_id_fk", - "tableFrom": "channels", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "dm_channels": { - "name": "dm_channels", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "owner_id": { - "name": "owner_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "federated_id": { - "name": "federated_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "owner_home_user_id": { - "name": "owner_home_user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "owner_home_instance": { - "name": "owner_home_instance", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "deleted_at": { - "name": "deleted_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_dm_federated": { - "name": "idx_dm_federated", - "columns": [ - "federated_id" - ], - "isUnique": true, - "where": "federated_id IS NOT NULL" - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "dm_members": { - "name": "dm_members", - "columns": { - "dm_channel_id": { - "name": "dm_channel_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "closed": { - "name": "closed", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": { - "idx_dm_members_user_id": { - "name": "idx_dm_members_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "dm_members_dm_channel_id_dm_channels_id_fk": { - "name": "dm_members_dm_channel_id_dm_channels_id_fk", - "tableFrom": "dm_members", - "tableTo": "dm_channels", - "columnsFrom": [ - "dm_channel_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "dm_members_user_id_users_id_fk": { - "name": "dm_members_user_id_users_id_fk", - "tableFrom": "dm_members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "dm_members_dm_channel_id_user_id_pk": { - "columns": [ - "dm_channel_id", - "user_id" - ], - "name": "dm_members_dm_channel_id_user_id_pk" - } - }, - "uniqueConstraints": {} - }, - "dm_messages": { - "name": "dm_messages", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "dm_channel_id": { - "name": "dm_channel_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "reply_to_id": { - "name": "reply_to_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'user'" - }, - "edited_at": { - "name": "edited_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "source_instance": { - "name": "source_instance", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "source_message_id": { - "name": "source_message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "encryption_version": { - "name": "encryption_version", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_dm_messages_dm_channel_id": { - "name": "idx_dm_messages_dm_channel_id", - "columns": [ - "dm_channel_id" - ], - "isUnique": false - }, - "idx_dm_messages_user_id": { - "name": "idx_dm_messages_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "idx_dm_messages_source_unique": { - "name": "idx_dm_messages_source_unique", - "columns": [ - "source_instance", - "source_message_id" - ], - "isUnique": true, - "where": "source_instance IS NOT NULL" - } - }, - "foreignKeys": { - "dm_messages_dm_channel_id_dm_channels_id_fk": { - "name": "dm_messages_dm_channel_id_dm_channels_id_fk", - "tableFrom": "dm_messages", - "tableTo": "dm_channels", - "columnsFrom": [ - "dm_channel_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "dm_messages_user_id_users_id_fk": { - "name": "dm_messages_user_id_users_id_fk", - "tableFrom": "dm_messages", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "dm_messages_reply_to_id_dm_messages_id_fk": { - "name": "dm_messages_reply_to_id_dm_messages_id_fk", - "tableFrom": "dm_messages", - "tableTo": "dm_messages", - "columnsFrom": [ - "reply_to_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "dm_reactions": { - "name": "dm_reactions", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "dm_message_id": { - "name": "dm_message_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "emoji": { - "name": "emoji", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_dm_reactions_dm_message_id": { - "name": "idx_dm_reactions_dm_message_id", - "columns": [ - "dm_message_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "dm_reactions_dm_message_id_dm_messages_id_fk": { - "name": "dm_reactions_dm_message_id_dm_messages_id_fk", - "tableFrom": "dm_reactions", - "tableTo": "dm_messages", - "columnsFrom": [ - "dm_message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "dm_reactions_user_id_users_id_fk": { - "name": "dm_reactions_user_id_users_id_fk", - "tableFrom": "dm_reactions", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "embeds": { - "name": "embeds", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "message_id": { - "name": "message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "dm_message_id": { - "name": "dm_message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "url": { - "name": "url", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "embed_type": { - "name": "embed_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "embed_url": { - "name": "embed_url", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "width": { - "name": "width", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "height": { - "name": "height", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "color": { - "name": "color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_embeds_message_id": { - "name": "idx_embeds_message_id", - "columns": [ - "message_id" - ], - "isUnique": false - }, - "idx_embeds_dm_message_id": { - "name": "idx_embeds_dm_message_id", - "columns": [ - "dm_message_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "embeds_message_id_messages_id_fk": { - "name": "embeds_message_id_messages_id_fk", - "tableFrom": "embeds", - "tableTo": "messages", - "columnsFrom": [ - "message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "embeds_dm_message_id_dm_messages_id_fk": { - "name": "embeds_dm_message_id_dm_messages_id_fk", - "tableFrom": "embeds", - "tableTo": "dm_messages", - "columnsFrom": [ - "dm_message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "federation_file_queue": { - "name": "federation_file_queue", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "peer_origin": { - "name": "peer_origin", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "dm_message_id": { - "name": "dm_message_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_filename": { - "name": "target_filename", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "original_name": { - "name": "original_name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mimetype": { - "name": "mimetype", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "size": { - "name": "size", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'pending'" - }, - "rejection_reason": { - "name": "rejection_reason", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "attempts": { - "name": "attempts", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "next_retry_at": { - "name": "next_retry_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "federation_mutation_log": { - "name": "federation_mutation_log", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "entity_id": { - "name": "entity_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "context_id": { - "name": "context_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "context_type": { - "name": "context_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'dm'" - }, - "mutation_type": { - "name": "mutation_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mutated_at": { - "name": "mutated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "payload": { - "name": "payload", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "idx_mutation_log_time": { - "name": "idx_mutation_log_time", - "columns": [ - "mutated_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "federation_outbox": { - "name": "federation_outbox", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "peer_id": { - "name": "peer_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "context_id": { - "name": "context_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "entity_id": { - "name": "entity_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "context_type": { - "name": "context_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'dm'" - }, - "event_type": { - "name": "event_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "payload": { - "name": "payload", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "encryption_version": { - "name": "encryption_version", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "attempts": { - "name": "attempts", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "next_retry_at": { - "name": "next_retry_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_outbox_retry": { - "name": "idx_outbox_retry", - "columns": [ - "next_retry_at" - ], - "isUnique": false - }, - "federation_outbox_peer_id_entity_id_unique": { - "name": "federation_outbox_peer_id_entity_id_unique", - "columns": [ - "peer_id", - "entity_id" - ], - "isUnique": true - } - }, - "foreignKeys": { - "federation_outbox_peer_id_federation_peers_id_fk": { - "name": "federation_outbox_peer_id_federation_peers_id_fk", - "tableFrom": "federation_outbox", - "tableTo": "federation_peers", - "columnsFrom": [ - "peer_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "federation_peers": { - "name": "federation_peers", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "origin": { - "name": "origin", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "instance_name": { - "name": "instance_name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "hmac_secret": { - "name": "hmac_secret", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'active'" - }, - "last_seen_at": { - "name": "last_seen_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "last_failure_at": { - "name": "last_failure_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "consecutive_failures": { - "name": "consecutive_failures", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "consecutive_auth_failures": { - "name": "consecutive_auth_failures", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "remote_max_upload_size": { - "name": "remote_max_upload_size", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "nonce_supported": { - "name": "nonce_supported", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "pending_hmac_secret": { - "name": "pending_hmac_secret", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "secret_rotation_at": { - "name": "secret_rotation_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "secret_rotated_at": { - "name": "secret_rotated_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "auto_rotate_interval_days": { - "name": "auto_rotate_interval_days", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 90 - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "federation_peers_origin_unique": { - "name": "federation_peers_origin_unique", - "columns": [ - "origin" - ], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "friend_requests": { - "name": "friend_requests", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "from_id": { - "name": "from_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "to_id": { - "name": "to_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'pending'" - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_friend_requests_to_id": { - "name": "idx_friend_requests_to_id", - "columns": [ - "to_id" - ], - "isUnique": false - }, - "idx_friend_requests_from_id": { - "name": "idx_friend_requests_from_id", - "columns": [ - "from_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "friend_requests_from_id_users_id_fk": { - "name": "friend_requests_from_id_users_id_fk", - "tableFrom": "friend_requests", - "tableTo": "users", - "columnsFrom": [ - "from_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friend_requests_to_id_users_id_fk": { - "name": "friend_requests_to_id_users_id_fk", - "tableFrom": "friend_requests", - "tableTo": "users", - "columnsFrom": [ - "to_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "friends": { - "name": "friends", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "friend_id": { - "name": "friend_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_friends_user_id": { - "name": "idx_friends_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "idx_friends_friend_id": { - "name": "idx_friends_friend_id", - "columns": [ - "friend_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "friends_user_id_users_id_fk": { - "name": "friends_user_id_users_id_fk", - "tableFrom": "friends", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_friend_id_users_id_fk": { - "name": "friends_friend_id_users_id_fk", - "tableFrom": "friends", - "tableTo": "users", - "columnsFrom": [ - "friend_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_user_id_friend_id_pk": { - "columns": [ - "user_id", - "friend_id" - ], - "name": "friends_user_id_friend_id_pk" - } - }, - "uniqueConstraints": {} - }, - "instance_settings": { - "name": "instance_settings", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "instance_name": { - "name": "instance_name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'Backspace'" - }, - "worker_id": { - "name": "worker_id", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "discovery_enabled": { - "name": "discovery_enabled", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "max_bitrate_kbps": { - "name": "max_bitrate_kbps", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 20000 - }, - "min_bitrate_kbps": { - "name": "min_bitrate_kbps", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 500 - }, - "bitrate_step_kbps": { - "name": "bitrate_step_kbps", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 500 - }, - "allowed_resolutions": { - "name": "allowed_resolutions", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'540,720,1080'" - }, - "allowed_framerates": { - "name": "allowed_framerates", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'30,45,60'" - }, - "max_resolution": { - "name": "max_resolution", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1080 - }, - "max_framerate": { - "name": "max_framerate", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 60 - }, - "registration_open": { - "name": "registration_open", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "gif_api_key": { - "name": "gif_api_key", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "bitrate_matrix_overrides": { - "name": "bitrate_matrix_overrides", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "allow_custom_bitrate": { - "name": "allow_custom_bitrate", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "max_upload_size_bytes": { - "name": "max_upload_size_bytes", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "federation_relay_enabled": { - "name": "federation_relay_enabled", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "federation_relay_ttl_days": { - "name": "federation_relay_ttl_days", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 30 - }, - "default_auto_rotate_interval_days": { - "name": "default_auto_rotate_interval_days", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 90 - }, - "auto_accept_peering": { - "name": "auto_accept_peering", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "updated_at": { - "name": "updated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "join_requests": { - "name": "join_requests", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "message": { - "name": "message", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'pending'" - }, - "decided_by": { - "name": "decided_by", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "decided_at": { - "name": "decided_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "idx_join_requests_space_id_status": { - "name": "idx_join_requests_space_id_status", - "columns": [ - "space_id", - "status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "join_requests_space_id_spaces_id_fk": { - "name": "join_requests_space_id_spaces_id_fk", - "tableFrom": "join_requests", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "join_requests_user_id_users_id_fk": { - "name": "join_requests_user_id_users_id_fk", - "tableFrom": "join_requests", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "join_requests_decided_by_users_id_fk": { - "name": "join_requests_decided_by_users_id_fk", - "tableFrom": "join_requests", - "tableTo": "users", - "columnsFrom": [ - "decided_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "member_roles": { - "name": "member_roles", - "columns": { - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "role_id": { - "name": "role_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_member_roles_user_id_space_id": { - "name": "idx_member_roles_user_id_space_id", - "columns": [ - "user_id", - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "member_roles_space_id_spaces_id_fk": { - "name": "member_roles_space_id_spaces_id_fk", - "tableFrom": "member_roles", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "member_roles_user_id_users_id_fk": { - "name": "member_roles_user_id_users_id_fk", - "tableFrom": "member_roles", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "member_roles_role_id_roles_id_fk": { - "name": "member_roles_role_id_roles_id_fk", - "tableFrom": "member_roles", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "member_roles_space_id_user_id_role_id_pk": { - "columns": [ - "space_id", - "user_id", - "role_id" - ], - "name": "member_roles_space_id_user_id_role_id_pk" - } - }, - "uniqueConstraints": {} - }, - "messages": { - "name": "messages", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "channel_id": { - "name": "channel_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "reply_to_id": { - "name": "reply_to_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "edited_at": { - "name": "edited_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_messages_channel_id": { - "name": "idx_messages_channel_id", - "columns": [ - "channel_id" - ], - "isUnique": false - }, - "idx_messages_user_id": { - "name": "idx_messages_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "messages_channel_id_channels_id_fk": { - "name": "messages_channel_id_channels_id_fk", - "tableFrom": "messages", - "tableTo": "channels", - "columnsFrom": [ - "channel_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "messages_user_id_users_id_fk": { - "name": "messages_user_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "messages_reply_to_id_messages_id_fk": { - "name": "messages_reply_to_id_messages_id_fk", - "tableFrom": "messages", - "tableTo": "messages", - "columnsFrom": [ - "reply_to_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "peer_approval_requests": { - "name": "peer_approval_requests", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "origin": { - "name": "origin", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "instance_name": { - "name": "instance_name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "hmac_secret": { - "name": "hmac_secret", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "requested_at": { - "name": "requested_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "peer_approval_requests_origin_unique": { - "name": "peer_approval_requests_origin_unique", - "columns": [ - "origin" - ], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "reactions": { - "name": "reactions", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "message_id": { - "name": "message_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "emoji": { - "name": "emoji", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_reactions_message_id": { - "name": "idx_reactions_message_id", - "columns": [ - "message_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "reactions_message_id_messages_id_fk": { - "name": "reactions_message_id_messages_id_fk", - "tableFrom": "reactions", - "tableTo": "messages", - "columnsFrom": [ - "message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "reactions_user_id_users_id_fk": { - "name": "reactions_user_id_users_id_fk", - "tableFrom": "reactions", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "read_states": { - "name": "read_states", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "channel_id": { - "name": "channel_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "last_read_message_id": { - "name": "last_read_message_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "updated_at": { - "name": "updated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_read_states_user_id": { - "name": "idx_read_states_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "read_states_user_id_users_id_fk": { - "name": "read_states_user_id_users_id_fk", - "tableFrom": "read_states", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "read_states_user_id_channel_id_pk": { - "columns": [ - "user_id", - "channel_id" - ], - "name": "read_states_user_id_channel_id_pk" - } - }, - "uniqueConstraints": {} - }, - "roles": { - "name": "roles", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "color": { - "name": "color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'#b9bbbe'" - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "permissions": { - "name": "permissions", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_roles_space_id": { - "name": "idx_roles_space_id", - "columns": [ - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "roles_space_id_spaces_id_fk": { - "name": "roles_space_id_spaces_id_fk", - "tableFrom": "roles", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "space_folder_members": { - "name": "space_folder_members", - "columns": { - "folder_id": { - "name": "folder_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": {}, - "foreignKeys": { - "space_folder_members_folder_id_space_folders_id_fk": { - "name": "space_folder_members_folder_id_space_folders_id_fk", - "tableFrom": "space_folder_members", - "tableTo": "space_folders", - "columnsFrom": [ - "folder_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "space_folder_members_folder_id_space_id_pk": { - "columns": [ - "folder_id", - "space_id" - ], - "name": "space_folder_members_folder_id_space_id_pk" - } - }, - "uniqueConstraints": {} - }, - "space_folders": { - "name": "space_folders", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "color": { - "name": "color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "space_folders_user_id_users_id_fk": { - "name": "space_folders_user_id_users_id_fk", - "tableFrom": "space_folders", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "space_members": { - "name": "space_members", - "columns": { - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "nickname": { - "name": "nickname", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "joined_at": { - "name": "joined_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_space_members_user_id": { - "name": "idx_space_members_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "space_members_space_id_spaces_id_fk": { - "name": "space_members_space_id_spaces_id_fk", - "tableFrom": "space_members", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "space_members_user_id_users_id_fk": { - "name": "space_members_user_id_users_id_fk", - "tableFrom": "space_members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "space_members_space_id_user_id_pk": { - "columns": [ - "space_id", - "user_id" - ], - "name": "space_members_space_id_user_id_pk" - } - }, - "uniqueConstraints": {} - }, - "spaces": { - "name": "spaces", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "icon": { - "name": "icon", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "banner": { - "name": "banner", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "avatar_color": { - "name": "avatar_color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "owner_id": { - "name": "owner_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "invite_code": { - "name": "invite_code", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "visibility": { - "name": "visibility", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'private'" - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "spaces_invite_code_unique": { - "name": "spaces_invite_code_unique", - "columns": [ - "invite_code" - ], - "isUnique": true - } - }, - "foreignKeys": { - "spaces_owner_id_users_id_fk": { - "name": "spaces_owner_id_users_id_fk", - "tableFrom": "spaces", - "tableTo": "users", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "user_federation_registry": { - "name": "user_federation_registry", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "origin": { - "name": "origin", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "label": { - "name": "label", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "''" - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "''" - }, - "remote_user_id": { - "name": "remote_user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "''" - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'connected'" - }, - "added_at": { - "name": "added_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "last_connected_at": { - "name": "last_connected_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "disconnected_at": { - "name": "disconnected_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "error_message": { - "name": "error_message", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "user_federation_registry_user_id_users_id_fk": { - "name": "user_federation_registry_user_id_users_id_fk", - "tableFrom": "user_federation_registry", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "user_federation_registry_user_id_origin_pk": { - "columns": [ - "user_id", - "origin" - ], - "name": "user_federation_registry_user_id_origin_pk" - } - }, - "uniqueConstraints": {} - }, - "user_space_layout": { - "name": "user_space_layout", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "layout": { - "name": "layout", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'[]'" - }, - "updated_at": { - "name": "updated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "user_space_layout_user_id_users_id_fk": { - "name": "user_space_layout_user_id_users_id_fk", - "tableFrom": "user_space_layout", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "users": { - "name": "users", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "display_name": { - "name": "display_name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password_hash": { - "name": "password_hash", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "avatar": { - "name": "avatar", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'offline'" - }, - "custom_status": { - "name": "custom_status", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_admin": { - "name": "is_admin", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "home_instance": { - "name": "home_instance", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "home_user_id": { - "name": "home_user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "replicated_instances": { - "name": "replicated_instances", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'[]'" - }, - "banner": { - "name": "banner", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "accent_color": { - "name": "accent_color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "avatar_color": { - "name": "avatar_color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "bio": { - "name": "bio", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_deleted": { - "name": "is_deleted", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "discoverable": { - "name": "discoverable", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 1 - }, - "profile_updated_at": { - "name": "profile_updated_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password_changed_at": { - "name": "password_changed_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "show_activity": { - "name": "show_activity", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "federation_registry_updated_at": { - "name": "federation_registry_updated_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "users_username_unique": { - "name": "users_username_unique", - "columns": [ - "username" - ], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "voice_restrictions": { - "name": "voice_restrictions", - "columns": { - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "restriction_type": { - "name": "restriction_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "moderator_id": { - "name": "moderator_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_voice_restrictions_space_id": { - "name": "idx_voice_restrictions_space_id", - "columns": [ - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "voice_restrictions_space_id_spaces_id_fk": { - "name": "voice_restrictions_space_id_spaces_id_fk", - "tableFrom": "voice_restrictions", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "voice_restrictions_user_id_users_id_fk": { - "name": "voice_restrictions_user_id_users_id_fk", - "tableFrom": "voice_restrictions", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "voice_restrictions_moderator_id_users_id_fk": { - "name": "voice_restrictions_moderator_id_users_id_fk", - "tableFrom": "voice_restrictions", - "tableTo": "users", - "columnsFrom": [ - "moderator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "voice_restrictions_space_id_user_id_restriction_type_pk": { - "columns": [ - "space_id", - "user_id", - "restriction_type" - ], - "name": "voice_restrictions_space_id_user_id_restriction_type_pk" - } - }, - "uniqueConstraints": {} - } - }, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} \ No newline at end of file diff --git a/packages/server/drizzle/meta/0004_snapshot.json b/packages/server/drizzle/meta/0004_snapshot.json deleted file mode 100644 index beff91e4..00000000 --- a/packages/server/drizzle/meta/0004_snapshot.json +++ /dev/null @@ -1,3225 +0,0 @@ -{ - "version": "6", - "dialect": "sqlite", - "id": "7256684b-1915-48e0-884c-e2f3103b99da", - "prevId": "cd27f0d9-4506-4906-be9c-fee112ad7bdd", - "tables": { - "attachments": { - "name": "attachments", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "message_id": { - "name": "message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "dm_message_id": { - "name": "dm_message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "uploader_id": { - "name": "uploader_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "filename": { - "name": "filename", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "original_name": { - "name": "original_name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mimetype": { - "name": "mimetype", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "size": { - "name": "size", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "thumbnail_filename": { - "name": "thumbnail_filename", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "width": { - "name": "width", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "height": { - "name": "height", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "duration": { - "name": "duration", - "type": "real", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "federation_status": { - "name": "federation_status", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "federation_meta": { - "name": "federation_meta", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_attachments_message_id": { - "name": "idx_attachments_message_id", - "columns": [ - "message_id" - ], - "isUnique": false - }, - "idx_attachments_dm_message_id": { - "name": "idx_attachments_dm_message_id", - "columns": [ - "dm_message_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "attachments_message_id_messages_id_fk": { - "name": "attachments_message_id_messages_id_fk", - "tableFrom": "attachments", - "tableTo": "messages", - "columnsFrom": [ - "message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "attachments_dm_message_id_dm_messages_id_fk": { - "name": "attachments_dm_message_id_dm_messages_id_fk", - "tableFrom": "attachments", - "tableTo": "dm_messages", - "columnsFrom": [ - "dm_message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "bans": { - "name": "bans", - "columns": { - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "reason": { - "name": "reason", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "banned_by": { - "name": "banned_by", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_bans_space_id": { - "name": "idx_bans_space_id", - "columns": [ - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "bans_space_id_spaces_id_fk": { - "name": "bans_space_id_spaces_id_fk", - "tableFrom": "bans", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "bans_user_id_users_id_fk": { - "name": "bans_user_id_users_id_fk", - "tableFrom": "bans", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "bans_banned_by_users_id_fk": { - "name": "bans_banned_by_users_id_fk", - "tableFrom": "bans", - "tableTo": "users", - "columnsFrom": [ - "banned_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "bans_space_id_user_id_pk": { - "columns": [ - "space_id", - "user_id" - ], - "name": "bans_space_id_user_id_pk" - } - }, - "uniqueConstraints": {} - }, - "category_overrides": { - "name": "category_overrides", - "columns": { - "category_id": { - "name": "category_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "allow": { - "name": "allow", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - }, - "deny": { - "name": "deny", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - } - }, - "indexes": { - "idx_category_overrides_category_id": { - "name": "idx_category_overrides_category_id", - "columns": [ - "category_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "category_overrides_category_id_channel_categories_id_fk": { - "name": "category_overrides_category_id_channel_categories_id_fk", - "tableFrom": "category_overrides", - "tableTo": "channel_categories", - "columnsFrom": [ - "category_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "category_overrides_category_id_target_type_target_id_pk": { - "columns": [ - "category_id", - "target_type", - "target_id" - ], - "name": "category_overrides_category_id_target_type_target_id_pk" - } - }, - "uniqueConstraints": {} - }, - "channel_categories": { - "name": "channel_categories", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_channel_categories_space_id": { - "name": "idx_channel_categories_space_id", - "columns": [ - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "channel_categories_space_id_spaces_id_fk": { - "name": "channel_categories_space_id_spaces_id_fk", - "tableFrom": "channel_categories", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "channel_overrides": { - "name": "channel_overrides", - "columns": { - "channel_id": { - "name": "channel_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_type": { - "name": "target_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_id": { - "name": "target_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "allow": { - "name": "allow", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - }, - "deny": { - "name": "deny", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'0'" - } - }, - "indexes": { - "idx_channel_overrides_channel_id": { - "name": "idx_channel_overrides_channel_id", - "columns": [ - "channel_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "channel_overrides_channel_id_channels_id_fk": { - "name": "channel_overrides_channel_id_channels_id_fk", - "tableFrom": "channel_overrides", - "tableTo": "channels", - "columnsFrom": [ - "channel_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "channel_overrides_channel_id_target_type_target_id_pk": { - "columns": [ - "channel_id", - "target_type", - "target_id" - ], - "name": "channel_overrides_channel_id_target_type_target_id_pk" - } - }, - "uniqueConstraints": {} - }, - "channels": { - "name": "channels", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "topic": { - "name": "topic", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "category_id": { - "name": "category_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_channels_space_id": { - "name": "idx_channels_space_id", - "columns": [ - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "channels_space_id_spaces_id_fk": { - "name": "channels_space_id_spaces_id_fk", - "tableFrom": "channels", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "dm_channels": { - "name": "dm_channels", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "owner_id": { - "name": "owner_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "federated_id": { - "name": "federated_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "owner_home_user_id": { - "name": "owner_home_user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "owner_home_instance": { - "name": "owner_home_instance", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "deleted_at": { - "name": "deleted_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_dm_federated": { - "name": "idx_dm_federated", - "columns": [ - "federated_id" - ], - "isUnique": true, - "where": "federated_id IS NOT NULL" - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "dm_members": { - "name": "dm_members", - "columns": { - "dm_channel_id": { - "name": "dm_channel_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "closed": { - "name": "closed", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": { - "idx_dm_members_user_id": { - "name": "idx_dm_members_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "dm_members_dm_channel_id_dm_channels_id_fk": { - "name": "dm_members_dm_channel_id_dm_channels_id_fk", - "tableFrom": "dm_members", - "tableTo": "dm_channels", - "columnsFrom": [ - "dm_channel_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "dm_members_user_id_users_id_fk": { - "name": "dm_members_user_id_users_id_fk", - "tableFrom": "dm_members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "dm_members_dm_channel_id_user_id_pk": { - "columns": [ - "dm_channel_id", - "user_id" - ], - "name": "dm_members_dm_channel_id_user_id_pk" - } - }, - "uniqueConstraints": {} - }, - "dm_messages": { - "name": "dm_messages", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "dm_channel_id": { - "name": "dm_channel_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "reply_to_id": { - "name": "reply_to_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "type": { - "name": "type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'user'" - }, - "edited_at": { - "name": "edited_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "source_instance": { - "name": "source_instance", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "source_message_id": { - "name": "source_message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "encryption_version": { - "name": "encryption_version", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_dm_messages_dm_channel_id": { - "name": "idx_dm_messages_dm_channel_id", - "columns": [ - "dm_channel_id" - ], - "isUnique": false - }, - "idx_dm_messages_user_id": { - "name": "idx_dm_messages_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "idx_dm_messages_source_unique": { - "name": "idx_dm_messages_source_unique", - "columns": [ - "source_instance", - "source_message_id" - ], - "isUnique": true, - "where": "source_instance IS NOT NULL" - } - }, - "foreignKeys": { - "dm_messages_dm_channel_id_dm_channels_id_fk": { - "name": "dm_messages_dm_channel_id_dm_channels_id_fk", - "tableFrom": "dm_messages", - "tableTo": "dm_channels", - "columnsFrom": [ - "dm_channel_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "dm_messages_user_id_users_id_fk": { - "name": "dm_messages_user_id_users_id_fk", - "tableFrom": "dm_messages", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "dm_messages_reply_to_id_dm_messages_id_fk": { - "name": "dm_messages_reply_to_id_dm_messages_id_fk", - "tableFrom": "dm_messages", - "tableTo": "dm_messages", - "columnsFrom": [ - "reply_to_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "dm_reactions": { - "name": "dm_reactions", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "dm_message_id": { - "name": "dm_message_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "emoji": { - "name": "emoji", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_dm_reactions_dm_message_id": { - "name": "idx_dm_reactions_dm_message_id", - "columns": [ - "dm_message_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "dm_reactions_dm_message_id_dm_messages_id_fk": { - "name": "dm_reactions_dm_message_id_dm_messages_id_fk", - "tableFrom": "dm_reactions", - "tableTo": "dm_messages", - "columnsFrom": [ - "dm_message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "dm_reactions_user_id_users_id_fk": { - "name": "dm_reactions_user_id_users_id_fk", - "tableFrom": "dm_reactions", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "embeds": { - "name": "embeds", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "message_id": { - "name": "message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "dm_message_id": { - "name": "dm_message_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "url": { - "name": "url", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "embed_type": { - "name": "embed_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "provider": { - "name": "provider", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "title": { - "name": "title", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "image": { - "name": "image", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "embed_url": { - "name": "embed_url", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "width": { - "name": "width", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "height": { - "name": "height", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "color": { - "name": "color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_embeds_message_id": { - "name": "idx_embeds_message_id", - "columns": [ - "message_id" - ], - "isUnique": false - }, - "idx_embeds_dm_message_id": { - "name": "idx_embeds_dm_message_id", - "columns": [ - "dm_message_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "embeds_message_id_messages_id_fk": { - "name": "embeds_message_id_messages_id_fk", - "tableFrom": "embeds", - "tableTo": "messages", - "columnsFrom": [ - "message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "embeds_dm_message_id_dm_messages_id_fk": { - "name": "embeds_dm_message_id_dm_messages_id_fk", - "tableFrom": "embeds", - "tableTo": "dm_messages", - "columnsFrom": [ - "dm_message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "federation_file_queue": { - "name": "federation_file_queue", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "peer_origin": { - "name": "peer_origin", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "dm_message_id": { - "name": "dm_message_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "source_url": { - "name": "source_url", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "target_filename": { - "name": "target_filename", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "original_name": { - "name": "original_name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mimetype": { - "name": "mimetype", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "size": { - "name": "size", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'pending'" - }, - "rejection_reason": { - "name": "rejection_reason", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "attempts": { - "name": "attempts", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "next_retry_at": { - "name": "next_retry_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "federation_mutation_log": { - "name": "federation_mutation_log", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "entity_id": { - "name": "entity_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "context_id": { - "name": "context_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "context_type": { - "name": "context_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'dm'" - }, - "mutation_type": { - "name": "mutation_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "mutated_at": { - "name": "mutated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "payload": { - "name": "payload", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "idx_mutation_log_time": { - "name": "idx_mutation_log_time", - "columns": [ - "mutated_at" - ], - "isUnique": false - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "federation_outbox": { - "name": "federation_outbox", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "peer_id": { - "name": "peer_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "context_id": { - "name": "context_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "entity_id": { - "name": "entity_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "context_type": { - "name": "context_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'dm'" - }, - "event_type": { - "name": "event_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "payload": { - "name": "payload", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "encryption_version": { - "name": "encryption_version", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "attempts": { - "name": "attempts", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "next_retry_at": { - "name": "next_retry_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_outbox_retry": { - "name": "idx_outbox_retry", - "columns": [ - "next_retry_at" - ], - "isUnique": false - }, - "federation_outbox_peer_id_entity_id_unique": { - "name": "federation_outbox_peer_id_entity_id_unique", - "columns": [ - "peer_id", - "entity_id" - ], - "isUnique": true - } - }, - "foreignKeys": { - "federation_outbox_peer_id_federation_peers_id_fk": { - "name": "federation_outbox_peer_id_federation_peers_id_fk", - "tableFrom": "federation_outbox", - "tableTo": "federation_peers", - "columnsFrom": [ - "peer_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "federation_peers": { - "name": "federation_peers", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "origin": { - "name": "origin", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "instance_name": { - "name": "instance_name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "hmac_secret": { - "name": "hmac_secret", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'active'" - }, - "last_seen_at": { - "name": "last_seen_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "last_failure_at": { - "name": "last_failure_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "consecutive_failures": { - "name": "consecutive_failures", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "consecutive_auth_failures": { - "name": "consecutive_auth_failures", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "last_synced_at": { - "name": "last_synced_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "remote_max_upload_size": { - "name": "remote_max_upload_size", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "nonce_supported": { - "name": "nonce_supported", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 0 - }, - "pending_hmac_secret": { - "name": "pending_hmac_secret", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "secret_rotation_at": { - "name": "secret_rotation_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "secret_rotated_at": { - "name": "secret_rotated_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "auto_rotate_interval_days": { - "name": "auto_rotate_interval_days", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 90 - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "federation_peers_origin_unique": { - "name": "federation_peers_origin_unique", - "columns": [ - "origin" - ], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "friend_requests": { - "name": "friend_requests", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "from_id": { - "name": "from_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "to_id": { - "name": "to_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'pending'" - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_friend_requests_to_id": { - "name": "idx_friend_requests_to_id", - "columns": [ - "to_id" - ], - "isUnique": false - }, - "idx_friend_requests_from_id": { - "name": "idx_friend_requests_from_id", - "columns": [ - "from_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "friend_requests_from_id_users_id_fk": { - "name": "friend_requests_from_id_users_id_fk", - "tableFrom": "friend_requests", - "tableTo": "users", - "columnsFrom": [ - "from_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friend_requests_to_id_users_id_fk": { - "name": "friend_requests_to_id_users_id_fk", - "tableFrom": "friend_requests", - "tableTo": "users", - "columnsFrom": [ - "to_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "friends": { - "name": "friends", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "friend_id": { - "name": "friend_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_friends_user_id": { - "name": "idx_friends_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - }, - "idx_friends_friend_id": { - "name": "idx_friends_friend_id", - "columns": [ - "friend_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "friends_user_id_users_id_fk": { - "name": "friends_user_id_users_id_fk", - "tableFrom": "friends", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "friends_friend_id_users_id_fk": { - "name": "friends_friend_id_users_id_fk", - "tableFrom": "friends", - "tableTo": "users", - "columnsFrom": [ - "friend_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "friends_user_id_friend_id_pk": { - "columns": [ - "user_id", - "friend_id" - ], - "name": "friends_user_id_friend_id_pk" - } - }, - "uniqueConstraints": {} - }, - "instance_settings": { - "name": "instance_settings", - "columns": { - "id": { - "name": "id", - "type": "integer", - "primaryKey": true, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "instance_name": { - "name": "instance_name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'Backspace'" - }, - "worker_id": { - "name": "worker_id", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "discovery_enabled": { - "name": "discovery_enabled", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "max_bitrate_kbps": { - "name": "max_bitrate_kbps", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 20000 - }, - "min_bitrate_kbps": { - "name": "min_bitrate_kbps", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 500 - }, - "bitrate_step_kbps": { - "name": "bitrate_step_kbps", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 500 - }, - "allowed_resolutions": { - "name": "allowed_resolutions", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'540,720,1080'" - }, - "allowed_framerates": { - "name": "allowed_framerates", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'30,45,60'" - }, - "max_resolution": { - "name": "max_resolution", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1080 - }, - "max_framerate": { - "name": "max_framerate", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 60 - }, - "registration_open": { - "name": "registration_open", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "gif_api_key": { - "name": "gif_api_key", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "bitrate_matrix_overrides": { - "name": "bitrate_matrix_overrides", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "allow_custom_bitrate": { - "name": "allow_custom_bitrate", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "max_upload_size_bytes": { - "name": "max_upload_size_bytes", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "federation_relay_enabled": { - "name": "federation_relay_enabled", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "federation_relay_ttl_days": { - "name": "federation_relay_ttl_days", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 30 - }, - "default_auto_rotate_interval_days": { - "name": "default_auto_rotate_interval_days", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 90 - }, - "auto_accept_peering": { - "name": "auto_accept_peering", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "updated_at": { - "name": "updated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "join_requests": { - "name": "join_requests", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "message": { - "name": "message", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'pending'" - }, - "decided_by": { - "name": "decided_by", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "decided_at": { - "name": "decided_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": { - "idx_join_requests_space_id_status": { - "name": "idx_join_requests_space_id_status", - "columns": [ - "space_id", - "status" - ], - "isUnique": false - } - }, - "foreignKeys": { - "join_requests_space_id_spaces_id_fk": { - "name": "join_requests_space_id_spaces_id_fk", - "tableFrom": "join_requests", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "join_requests_user_id_users_id_fk": { - "name": "join_requests_user_id_users_id_fk", - "tableFrom": "join_requests", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "join_requests_decided_by_users_id_fk": { - "name": "join_requests_decided_by_users_id_fk", - "tableFrom": "join_requests", - "tableTo": "users", - "columnsFrom": [ - "decided_by" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "member_roles": { - "name": "member_roles", - "columns": { - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "role_id": { - "name": "role_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_member_roles_user_id_space_id": { - "name": "idx_member_roles_user_id_space_id", - "columns": [ - "user_id", - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "member_roles_space_id_spaces_id_fk": { - "name": "member_roles_space_id_spaces_id_fk", - "tableFrom": "member_roles", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "member_roles_user_id_users_id_fk": { - "name": "member_roles_user_id_users_id_fk", - "tableFrom": "member_roles", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "member_roles_role_id_roles_id_fk": { - "name": "member_roles_role_id_roles_id_fk", - "tableFrom": "member_roles", - "tableTo": "roles", - "columnsFrom": [ - "role_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "member_roles_space_id_user_id_role_id_pk": { - "columns": [ - "space_id", - "user_id", - "role_id" - ], - "name": "member_roles_space_id_user_id_role_id_pk" - } - }, - "uniqueConstraints": {} - }, - "messages": { - "name": "messages", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "channel_id": { - "name": "channel_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "reply_to_id": { - "name": "reply_to_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "content": { - "name": "content", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "edited_at": { - "name": "edited_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_messages_channel_id": { - "name": "idx_messages_channel_id", - "columns": [ - "channel_id" - ], - "isUnique": false - }, - "idx_messages_user_id": { - "name": "idx_messages_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "messages_channel_id_channels_id_fk": { - "name": "messages_channel_id_channels_id_fk", - "tableFrom": "messages", - "tableTo": "channels", - "columnsFrom": [ - "channel_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "messages_user_id_users_id_fk": { - "name": "messages_user_id_users_id_fk", - "tableFrom": "messages", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - }, - "messages_reply_to_id_messages_id_fk": { - "name": "messages_reply_to_id_messages_id_fk", - "tableFrom": "messages", - "tableTo": "messages", - "columnsFrom": [ - "reply_to_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "set null", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "peer_approval_requests": { - "name": "peer_approval_requests", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "origin": { - "name": "origin", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "instance_name": { - "name": "instance_name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "hmac_secret": { - "name": "hmac_secret", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "requested_at": { - "name": "requested_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "expires_at": { - "name": "expires_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "peer_approval_requests_origin_unique": { - "name": "peer_approval_requests_origin_unique", - "columns": [ - "origin" - ], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "reactions": { - "name": "reactions", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "message_id": { - "name": "message_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "emoji": { - "name": "emoji", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_reactions_message_id": { - "name": "idx_reactions_message_id", - "columns": [ - "message_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "reactions_message_id_messages_id_fk": { - "name": "reactions_message_id_messages_id_fk", - "tableFrom": "reactions", - "tableTo": "messages", - "columnsFrom": [ - "message_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "reactions_user_id_users_id_fk": { - "name": "reactions_user_id_users_id_fk", - "tableFrom": "reactions", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "read_states": { - "name": "read_states", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "channel_id": { - "name": "channel_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "last_read_message_id": { - "name": "last_read_message_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "updated_at": { - "name": "updated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_read_states_user_id": { - "name": "idx_read_states_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "read_states_user_id_users_id_fk": { - "name": "read_states_user_id_users_id_fk", - "tableFrom": "read_states", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "read_states_user_id_channel_id_pk": { - "columns": [ - "user_id", - "channel_id" - ], - "name": "read_states_user_id_channel_id_pk" - } - }, - "uniqueConstraints": {} - }, - "roles": { - "name": "roles", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "color": { - "name": "color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'#b9bbbe'" - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "permissions": { - "name": "permissions", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_roles_space_id": { - "name": "idx_roles_space_id", - "columns": [ - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "roles_space_id_spaces_id_fk": { - "name": "roles_space_id_spaces_id_fk", - "tableFrom": "roles", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "space_folder_members": { - "name": "space_folder_members", - "columns": { - "folder_id": { - "name": "folder_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - } - }, - "indexes": {}, - "foreignKeys": { - "space_folder_members_folder_id_space_folders_id_fk": { - "name": "space_folder_members_folder_id_space_folders_id_fk", - "tableFrom": "space_folder_members", - "tableTo": "space_folders", - "columnsFrom": [ - "folder_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "space_folder_members_folder_id_space_id_pk": { - "columns": [ - "folder_id", - "space_id" - ], - "name": "space_folder_members_folder_id_space_id_pk" - } - }, - "uniqueConstraints": {} - }, - "space_folders": { - "name": "space_folders", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "color": { - "name": "color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "position": { - "name": "position", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "space_folders_user_id_users_id_fk": { - "name": "space_folders_user_id_users_id_fk", - "tableFrom": "space_folders", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "space_members": { - "name": "space_members", - "columns": { - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "nickname": { - "name": "nickname", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "joined_at": { - "name": "joined_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_space_members_user_id": { - "name": "idx_space_members_user_id", - "columns": [ - "user_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "space_members_space_id_spaces_id_fk": { - "name": "space_members_space_id_spaces_id_fk", - "tableFrom": "space_members", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "space_members_user_id_users_id_fk": { - "name": "space_members_user_id_users_id_fk", - "tableFrom": "space_members", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "space_members_space_id_user_id_pk": { - "columns": [ - "space_id", - "user_id" - ], - "name": "space_members_space_id_user_id_pk" - } - }, - "uniqueConstraints": {} - }, - "spaces": { - "name": "spaces", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "name": { - "name": "name", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "icon": { - "name": "icon", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "banner": { - "name": "banner", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "avatar_color": { - "name": "avatar_color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "owner_id": { - "name": "owner_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "invite_code": { - "name": "invite_code", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "visibility": { - "name": "visibility", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'private'" - }, - "description": { - "name": "description", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "spaces_invite_code_unique": { - "name": "spaces_invite_code_unique", - "columns": [ - "invite_code" - ], - "isUnique": true - } - }, - "foreignKeys": { - "spaces_owner_id_users_id_fk": { - "name": "spaces_owner_id_users_id_fk", - "tableFrom": "spaces", - "tableTo": "users", - "columnsFrom": [ - "owner_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "user_federation_registry": { - "name": "user_federation_registry", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "origin": { - "name": "origin", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "label": { - "name": "label", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "''" - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "''" - }, - "remote_user_id": { - "name": "remote_user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "''" - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'connected'" - }, - "added_at": { - "name": "added_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "last_connected_at": { - "name": "last_connected_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "disconnected_at": { - "name": "disconnected_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "error_message": { - "name": "error_message", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "user_federation_registry_user_id_users_id_fk": { - "name": "user_federation_registry_user_id_users_id_fk", - "tableFrom": "user_federation_registry", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "user_federation_registry_user_id_origin_pk": { - "columns": [ - "user_id", - "origin" - ], - "name": "user_federation_registry_user_id_origin_pk" - } - }, - "uniqueConstraints": {} - }, - "user_space_layout": { - "name": "user_space_layout", - "columns": { - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "layout": { - "name": "layout", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": "'[]'" - }, - "updated_at": { - "name": "updated_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": {}, - "foreignKeys": { - "user_space_layout_user_id_users_id_fk": { - "name": "user_space_layout_user_id_users_id_fk", - "tableFrom": "user_space_layout", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "users": { - "name": "users", - "columns": { - "id": { - "name": "id", - "type": "text", - "primaryKey": true, - "notNull": true, - "autoincrement": false - }, - "username": { - "name": "username", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "display_name": { - "name": "display_name", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password_hash": { - "name": "password_hash", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "avatar": { - "name": "avatar", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "status": { - "name": "status", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'offline'" - }, - "custom_status": { - "name": "custom_status", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_admin": { - "name": "is_admin", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "home_instance": { - "name": "home_instance", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "home_user_id": { - "name": "home_user_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "replicated_instances": { - "name": "replicated_instances", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": "'[]'" - }, - "banner": { - "name": "banner", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "accent_color": { - "name": "accent_color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "avatar_color": { - "name": "avatar_color", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "bio": { - "name": "bio", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "is_deleted": { - "name": "is_deleted", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "discoverable": { - "name": "discoverable", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 1 - }, - "profile_updated_at": { - "name": "profile_updated_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "password_changed_at": { - "name": "password_changed_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "show_activity": { - "name": "show_activity", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false, - "default": 1 - }, - "federation_registry_updated_at": { - "name": "federation_registry_updated_at", - "type": "integer", - "primaryKey": false, - "notNull": false, - "autoincrement": false, - "default": 0 - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "users_username_unique": { - "name": "users_username_unique", - "columns": [ - "username" - ], - "isUnique": true - } - }, - "foreignKeys": {}, - "compositePrimaryKeys": {}, - "uniqueConstraints": {} - }, - "voice_restrictions": { - "name": "voice_restrictions", - "columns": { - "space_id": { - "name": "space_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "user_id": { - "name": "user_id", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "restriction_type": { - "name": "restriction_type", - "type": "text", - "primaryKey": false, - "notNull": true, - "autoincrement": false - }, - "moderator_id": { - "name": "moderator_id", - "type": "text", - "primaryKey": false, - "notNull": false, - "autoincrement": false - }, - "created_at": { - "name": "created_at", - "type": "integer", - "primaryKey": false, - "notNull": true, - "autoincrement": false - } - }, - "indexes": { - "idx_voice_restrictions_space_id": { - "name": "idx_voice_restrictions_space_id", - "columns": [ - "space_id" - ], - "isUnique": false - } - }, - "foreignKeys": { - "voice_restrictions_space_id_spaces_id_fk": { - "name": "voice_restrictions_space_id_spaces_id_fk", - "tableFrom": "voice_restrictions", - "tableTo": "spaces", - "columnsFrom": [ - "space_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "voice_restrictions_user_id_users_id_fk": { - "name": "voice_restrictions_user_id_users_id_fk", - "tableFrom": "voice_restrictions", - "tableTo": "users", - "columnsFrom": [ - "user_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "cascade", - "onUpdate": "no action" - }, - "voice_restrictions_moderator_id_users_id_fk": { - "name": "voice_restrictions_moderator_id_users_id_fk", - "tableFrom": "voice_restrictions", - "tableTo": "users", - "columnsFrom": [ - "moderator_id" - ], - "columnsTo": [ - "id" - ], - "onDelete": "no action", - "onUpdate": "no action" - } - }, - "compositePrimaryKeys": { - "voice_restrictions_space_id_user_id_restriction_type_pk": { - "columns": [ - "space_id", - "user_id", - "restriction_type" - ], - "name": "voice_restrictions_space_id_user_id_restriction_type_pk" - } - }, - "uniqueConstraints": {} - } - }, - "enums": {}, - "_meta": { - "schemas": {}, - "tables": {}, - "columns": {} - }, - "internal": { - "indexes": {} - } -} \ No newline at end of file diff --git a/packages/server/drizzle/meta/_journal.json b/packages/server/drizzle/meta/_journal.json index ff9d5e25..d3c40e33 100644 --- a/packages/server/drizzle/meta/_journal.json +++ b/packages/server/drizzle/meta/_journal.json @@ -5,36 +5,8 @@ { "idx": 0, "version": "6", - "when": 1775687181033, - "tag": "0000_initial", - "breakpoints": true - }, - { - "idx": 1, - "version": "6", - "when": 1775734599940, - "tag": "0001_clear_earthquake", - "breakpoints": true - }, - { - "idx": 2, - "version": "6", - "when": 1776689384005, - "tag": "0002_peer_approval_requests", - "breakpoints": true - }, - { - "idx": 3, - "version": "6", - "when": 1776789567488, - "tag": "0003_classy_loki", - "breakpoints": true - }, - { - "idx": 4, - "version": "6", - "when": 1776802580650, - "tag": "0004_cooing_black_knight", + "when": 1777065939127, + "tag": "0000_lethal_wildside", "breakpoints": true } ] diff --git a/packages/server/src/db/index.ts b/packages/server/src/db/index.ts index fa52fb3f..ffa0682f 100644 --- a/packages/server/src/db/index.ts +++ b/packages/server/src/db/index.ts @@ -3,7 +3,7 @@ import { drizzle } from 'drizzle-orm/better-sqlite3'; import { migrate } from 'drizzle-orm/better-sqlite3/migrator'; import { config } from '../config.js'; import * as schema from './schema.js'; -import { baselineExistingInstall, healInitialSchemaDrift, healRenamedColumns, ensureDefaults } from './migrate.js'; +import { ensureDefaults } from './migrate.js'; import { setWorkerId } from '../utils/snowflake.js'; import { mkdirSync } from 'fs'; import { dirname, resolve } from 'path'; @@ -24,24 +24,6 @@ export function initDatabase() { sqlite.pragma('journal_mode = WAL'); sqlite.pragma('foreign_keys = ON'); - // Baseline existing installs before Drizzle migrate() runs — - // marks the initial migration as applied so it doesn't try to - // CREATE TABLE on a database that already has tables. - baselineExistingInstall(sqlite); - - // Reconcile any columns present in the 0000 baseline but missing - // from the physical schema. Fixes drift between the pre-drizzle - // manual migration system and drizzle-kit's assumed baseline — - // a no-op on fresh installs and correctly-migrated DBs. - healInitialSchemaDrift(sqlite); - - // Second-pass heal for rename/removal drift that the ADD-only pass - // can't resolve: for tables whose column set still doesn't match - // the 0000 snapshot and which are empty, DROP and rebuild from - // 0000_initial.sql. Non-empty tables are skipped with a warning. - // No-op on correctly-migrated DBs. - healRenamedColumns(sqlite); - // Apply any pending Drizzle migrations const migrationsFolder = resolve(__dirname, '../../drizzle'); const db = drizzle(sqlite, { schema }); diff --git a/packages/server/src/db/migrate.ts b/packages/server/src/db/migrate.ts index d318790f..70448c64 100644 --- a/packages/server/src/db/migrate.ts +++ b/packages/server/src/db/migrate.ts @@ -1,353 +1,5 @@ import Database from 'better-sqlite3'; import crypto from 'crypto'; -import fs from 'fs'; -import path from 'path'; -import { fileURLToPath } from 'url'; - -const __dirname = path.dirname(fileURLToPath(import.meta.url)); - -/** - * Baseline an existing install so Drizzle's migrate() skips the initial - * migration (tables already exist). Must be called BEFORE migrate(). - * - * Detects existing installs by checking: users table exists but - * __drizzle_migrations table does not. - * - * Drizzle's __drizzle_migrations table schema (verified SQLite DDL): - * "id" integer PRIMARY KEY AUTOINCREMENT NOT NULL - * "hash" text NOT NULL -- SHA-256 hex of the migration SQL file (raw UTF-8) - * "created_at" numeric -- journalEntry.when (ms timestamp from journal) - * - * Hash must match Drizzle's exactly: read SQL file as raw UTF-8 string, - * hash it with SHA-256. Line endings matter — don't normalize \r\n vs \n. - */ -export function baselineExistingInstall(db: Database.Database): void { - const hasUsers = db.prepare( - "SELECT name FROM sqlite_master WHERE type='table' AND name='users'" - ).get(); - const hasJournal = db.prepare( - "SELECT name FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'" - ).get(); - - if (!hasUsers || hasJournal) return; // Fresh install or already baselined - - console.log('[migrate] Existing install detected — baselining Drizzle migrations...'); - - // Read the journal to get the initial migration metadata - const migrationsFolder = path.resolve(__dirname, '../../drizzle'); - const journalPath = path.join(migrationsFolder, 'meta', '_journal.json'); - const journal = JSON.parse(fs.readFileSync(journalPath, 'utf-8')); - const initialEntry = journal.entries[0]; - - if (!initialEntry) { - throw new Error('No entries found in drizzle migration journal'); - } - - // Compute the hash the same way Drizzle does: SHA-256 of the SQL file content - const sqlPath = path.join(migrationsFolder, `${initialEntry.tag}.sql`); - const sqlContent = fs.readFileSync(sqlPath, 'utf-8'); - const hash = crypto.createHash('sha256').update(sqlContent).digest('hex'); - - // Create the journal table matching Drizzle's exact SQLite DDL - db.exec(` - CREATE TABLE IF NOT EXISTS "__drizzle_migrations" ( - "id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, - "hash" text NOT NULL, - "created_at" numeric - ) - `); - - db.prepare( - 'INSERT INTO __drizzle_migrations (hash, created_at) VALUES (?, ?)' - ).run(hash, initialEntry.when); - - console.log(`[migrate] Baselined initial migration: ${initialEntry.tag} (hash: ${hash.slice(0, 12)}...)`); -} - -/** - * Heal column drift between an existing install and the 0000_initial - * schema baseline. - * - * The baseline in `baselineExistingInstall` assumes that any existing - * install's schema already matches 0000_initial.sql. That assumption is - * usually fine for installs created through the old pre-drizzle manual - * migration system — but a DB can fall behind if it skipped one of those - * manual ALTERs (e.g. a dev-env that was paused before the - * `remote_max_upload_size` migration in 1e4e71a landed). On such DBs, - * baseline marks 0000 as applied without the columns actually being - * there, and a later migration that recreates the table (e.g. - * 0004_cooing_black_knight) crashes trying to SELECT them. - * - * Walks every table defined in 0000_snapshot.json; for each that already - * exists in the DB, ADDs any columns the snapshot declares but the table - * is missing. Idempotent: on a correctly-migrated DB every column is - * already present and the loop is a no-op. Columns that SQLite's - * ALTER TABLE ADD COLUMN cannot express (PRIMARY KEY; NOT NULL without a - * default) are skipped with a warning rather than corrupting data. - * - * Only reconciles against the 0000 baseline — later migrations add their - * own columns through normal migration SQL and are handled by - * Drizzle's migrator. - */ -export function healInitialSchemaDrift(db: Database.Database): void { - const migrationsFolder = path.resolve(__dirname, '../../drizzle'); - const snapshotPath = path.join(migrationsFolder, 'meta', '0000_snapshot.json'); - const snapshot = JSON.parse(fs.readFileSync(snapshotPath, 'utf-8')) as { - tables: Record; - }>; - }; - - for (const table of Object.values(snapshot.tables)) { - const exists = db.prepare( - "SELECT name FROM sqlite_master WHERE type='table' AND name=?" - ).get(table.name); - if (!exists) continue; - - const existingCols = new Set( - (db.prepare(`PRAGMA table_info("${table.name}")`).all() as { name: string }[]) - .map(c => c.name) - ); - - for (const col of Object.values(table.columns)) { - if (existingCols.has(col.name)) continue; - - if (col.primaryKey) { - console.warn(`[migrate] Skipping drift heal for ${table.name}.${col.name}: PRIMARY KEY cannot be added via ALTER TABLE`); - continue; - } - if (col.notNull && col.default === undefined) { - console.warn(`[migrate] Skipping drift heal for ${table.name}.${col.name}: NOT NULL with no default (would violate existing rows)`); - continue; - } - - const parts = [`"${col.name}"`, col.type]; - if (col.notNull) parts.push('NOT NULL'); - if (col.default !== undefined) parts.push(`DEFAULT ${col.default}`); - - const sql = `ALTER TABLE "${table.name}" ADD COLUMN ${parts.join(' ')}`; - console.log(`[migrate] Healing schema drift: ${sql}`); - db.exec(sql); - } - } -} - -/** - * Second-pass heal for pre-drizzle dev DBs whose column drift is not a - * pure add-column problem. - * - * `healInitialSchemaDrift` handles tables that are missing columns — it - * ALTERs them in. But a pre-drizzle dev DB can also carry *renamed* - * columns: e.g. `federation_outbox` on some old installs retains the - * pre-rename `message_id` / `dm_channel_id` columns instead of the - * current `entity_id` / `context_id`. The missing columns are NOT NULL - * without a default, so the earlier heal correctly skips them, and the - * outbox worker then fails every tick with `no such column: - * federation_outbox.context_id`. - * - * For tables whose physical column set is *missing* columns declared by - * the current-migration-state snapshot (the one matching the highest - * `__drizzle_migrations` entry — NOT the latest snapshot on disk) *and* - * which hold zero rows, this pass DROPs the table and rebuilds it from - * the snapshot's JSON (columns, defaults, foreign keys, composite PKs, - * unique constraints, indexes). Targeting the current-state snapshot - * — rather than the latest — is critical: rebuilding to a future - * snapshot would introduce columns that drizzle's migrator is about - * to add via ALTER TABLE ADD COLUMN, causing duplicate-column errors. - * Extra-only drift (leftover columns from pre-drizzle manual migrations - * that no current code reads) is left alone — the trigger is missing - * columns, because that's what breaks runtime queries. - * - * Non-empty tables are skipped with a warning — data preservation wins - * over heal, and this path should only ever be hit by a pre-drizzle dev - * DB that never exercised the affected tables in the first place. - * - * Idempotent: on correctly-migrated DBs the column sets already match, - * so the mismatch check short-circuits for every table and nothing is - * dropped. Production Pi+VM instances are unaffected. - */ -type SnapshotColumn = { - name: string; - type: string; - primaryKey: boolean; - notNull: boolean; - autoincrement: boolean; - default?: string | number; -}; - -type SnapshotTable = { - name: string; - columns: Record; - indexes: Record; - foreignKeys: Record; - compositePrimaryKeys: Record; - uniqueConstraints: Record; -}; - -type DrizzleSnapshot = { tables: Record }; - -function loadSnapshotForCurrentMigrationState( - db: Database.Database, - migrationsFolder: string -): DrizzleSnapshot { - // The rebuild target must be the snapshot that reflects what drizzle - // has already applied — NOT the latest snapshot on disk. Rebuilding - // to a future snapshot would introduce columns that pending ALTER - // TABLE ADD COLUMN migrations are about to add, causing duplicate- - // column errors when drizzle's migrator runs right after. - // - // __drizzle_migrations rows store `created_at` = the journal entry's - // `when` timestamp. Pick the row with the highest id (most recently - // applied), match it to a journal entry by that timestamp, then walk - // backward to find the nearest existing snapshot (some idx values - // may lack a snapshot if the migration was hand-written outside of - // `drizzle-kit generate`, e.g. 0002 in this codebase). - const journalPath = path.join(migrationsFolder, 'meta', '_journal.json'); - const journal = JSON.parse(fs.readFileSync(journalPath, 'utf-8')) as { - entries: { idx: number; tag: string; when: number }[]; - }; - - const hasJournal = db.prepare( - "SELECT name FROM sqlite_master WHERE type='table' AND name='__drizzle_migrations'" - ).get(); - if (!hasJournal) { - // No migrations recorded at all — caller is about to run them all - // from scratch via drizzle's migrate(). Nothing to rebuild against; - // return an empty snapshot so the heal loop is a no-op. - return { tables: {} }; - } - - const latest = db.prepare( - 'SELECT created_at FROM __drizzle_migrations ORDER BY id DESC LIMIT 1' - ).get() as { created_at: number } | undefined; - if (!latest) return { tables: {} }; - - const entry = journal.entries.find(e => e.when === latest.created_at); - if (!entry) { - throw new Error( - `__drizzle_migrations.created_at=${latest.created_at} has no matching journal entry` - ); - } - - const candidates = journal.entries - .filter(e => e.idx <= entry.idx) - .sort((a, b) => b.idx - a.idx); - for (const candidate of candidates) { - const idxPadded = String(candidate.idx).padStart(4, '0'); - const snapshotPath = path.join(migrationsFolder, 'meta', `${idxPadded}_snapshot.json`); - if (fs.existsSync(snapshotPath)) { - return JSON.parse(fs.readFileSync(snapshotPath, 'utf-8')) as DrizzleSnapshot; - } - } - // No snapshot at or below current migration state — shouldn't happen - // in practice because 0000_snapshot.json always exists, but fall - // through to a no-op rather than guessing. - return { tables: {} }; -} - -function buildCreateTableStatement(table: SnapshotTable): string { - const lines: string[] = []; - for (const col of Object.values(table.columns)) { - const parts = [`\`${col.name}\``, col.type]; - if (col.primaryKey) parts.push('PRIMARY KEY'); - if (col.notNull) parts.push('NOT NULL'); - if (col.default !== undefined) parts.push(`DEFAULT ${col.default}`); - lines.push('\t' + parts.join(' ')); - } - for (const cpk of Object.values(table.compositePrimaryKeys)) { - lines.push('\tPRIMARY KEY(' + cpk.columns.map(c => `\`${c}\``).join(', ') + ')'); - } - for (const uc of Object.values(table.uniqueConstraints)) { - lines.push('\tUNIQUE(' + uc.columns.map(c => `\`${c}\``).join(', ') + ')'); - } - for (const fk of Object.values(table.foreignKeys)) { - const from = fk.columnsFrom.map(c => `\`${c}\``).join(', '); - const to = fk.columnsTo.map(c => `\`${c}\``).join(', '); - const onUpdate = fk.onUpdate ? ` ON UPDATE ${fk.onUpdate}` : ''; - const onDelete = fk.onDelete ? ` ON DELETE ${fk.onDelete}` : ''; - lines.push(`\tFOREIGN KEY (${from}) REFERENCES \`${fk.tableTo}\`(${to})${onUpdate}${onDelete}`); - } - return `CREATE TABLE \`${table.name}\` (\n${lines.join(',\n')}\n)`; -} - -function buildIndexStatements(table: SnapshotTable): string[] { - return Object.values(table.indexes).map(idx => { - const unique = idx.isUnique ? 'UNIQUE ' : ''; - const cols = idx.columns.map(c => `\`${c}\``).join(', '); - return `CREATE ${unique}INDEX \`${idx.name}\` ON \`${table.name}\` (${cols})`; - }); -} - -export function healRenamedColumns(db: Database.Database): void { - const migrationsFolder = path.resolve(__dirname, '../../drizzle'); - const snapshot = loadSnapshotForCurrentMigrationState(db, migrationsFolder); - - for (const table of Object.values(snapshot.tables)) { - const exists = db.prepare( - "SELECT name FROM sqlite_master WHERE type='table' AND name=?" - ).get(table.name); - if (!exists) continue; - - const snapshotCols = new Set(Object.keys(table.columns)); - const physicalCols = new Set( - (db.prepare(`PRAGMA table_info("${table.name}")`).all() as { name: string }[]) - .map(c => c.name) - ); - - const missingFromPhysical = [...snapshotCols].filter(c => !physicalCols.has(c)); - const extraInPhysical = [...physicalCols].filter(c => !snapshotCols.has(c)); - - // Trigger the rebuild only when the physical table is *missing* - // columns the snapshot declares — that's the runtime-breaking - // case the app code relies on. Extra-only drift (leftover columns - // from pre-drizzle manual migrations that no current code reads) - // is left alone: dropping those would risk losing data the app - // doesn't care about but the operator might. - if (missingFromPhysical.length === 0) continue; - - const rowCount = (db.prepare( - `SELECT COUNT(*) AS c FROM "${table.name}"` - ).get() as { c: number }).c; - - if (rowCount > 0) { - console.warn( - `[migrate] Column drift on ${table.name} (missing: [${missingFromPhysical.join(', ')}], extra: [${extraInPhysical.join(', ')}]) — skipping rebuild: table has ${rowCount} rows, manual data migration required` - ); - continue; - } - - console.log( - `[migrate] Rebuilding empty table ${table.name} to match current-migration-state snapshot (missing: [${missingFromPhysical.join(', ')}], extra: [${extraInPhysical.join(', ')}])` - ); - - const createStmt = buildCreateTableStatement(table); - const indexStmts = buildIndexStatements(table); - - // Wrap in a transaction so a partial rebuild rolls back cleanly. - const rebuild = db.transaction(() => { - db.exec(`DROP TABLE "${table.name}"`); - db.exec(createStmt); - for (const stmt of indexStmts) db.exec(stmt); - }); - rebuild(); - } -} /** * Ensure data invariants after schema migration. Idempotent — safe to run