Something went wrong. Try again.
A lexicon-driven AppView for ATProto.
Something went wrong. Try again.
1.9 kB · 60 lines
SQL
at main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061-- Plugin registryCREATE TABLE plugins ( id TEXT PRIMARY KEY, source TEXT NOT NULL CHECK (source IN ('file', 'url')), url TEXT, sha256 TEXT, enabled INTEGER NOT NULL DEFAULT 1, loaded_at TEXT, api_version TEXT NOT NULL);
-- Plugin configurationCREATE TABLE plugin_configs ( plugin_id TEXT PRIMARY KEY REFERENCES plugins(id) ON DELETE CASCADE, config TEXT NOT NULL DEFAULT '{}', updated_at TEXT NOT NULL DEFAULT (datetime('now')));
-- External account tokens (encrypted)CREATE TABLE external_account_tokens ( id TEXT PRIMARY KEY, did TEXT NOT NULL, plugin_id TEXT NOT NULL REFERENCES plugins(id) ON DELETE CASCADE, account_id TEXT NOT NULL, access_token BLOB NOT NULL, refresh_token BLOB, token_type TEXT, scope TEXT, expires_at TEXT, created_at TEXT NOT NULL DEFAULT (datetime('now')), updated_at TEXT NOT NULL DEFAULT (datetime('now')), UNIQUE(did, plugin_id));
-- Deduplication keys for sync recordsCREATE TABLE plugin_dedup_keys ( plugin_id TEXT NOT NULL REFERENCES plugins(id) ON DELETE CASCADE, did TEXT NOT NULL, dedup_key TEXT NOT NULL, record_uri TEXT NOT NULL, updated_at TEXT NOT NULL DEFAULT (datetime('now')), PRIMARY KEY (plugin_id, did, dedup_key));
-- KV storage for plugins (scoped per plugin + context)CREATE TABLE plugin_kv ( plugin_id TEXT NOT NULL REFERENCES plugins(id) ON DELETE CASCADE, scope TEXT NOT NULL, key TEXT NOT NULL, value BLOB NOT NULL, expires_at TEXT, created_at TEXT NOT NULL DEFAULT (datetime('now')), PRIMARY KEY (plugin_id, scope, key));
-- Index for KV expiration cleanupCREATE INDEX idx_plugin_kv_expires ON plugin_kv(expires_at) WHERE expires_at IS NOT NULL;
-- Index for token lookup by DIDCREATE INDEX idx_external_tokens_did ON external_account_tokens(did);