62 lines · 1.6 KB · TypeScript
RawDownload
import * as Effect from "effect/Effect";import * as SqlClient from "effect/unstable/sql/SqlClient"; export default Effect.gen(function* () {  const sql = yield* SqlClient.SqlClient;   const pairingLinkColumns = yield* sql<{ readonly name: string }>`    PRAGMA table_info(auth_pairing_links)  `;  if (!pairingLinkColumns.some((column) => column.name === "label")) {    yield* sql`      ALTER TABLE auth_pairing_links      ADD COLUMN label TEXT    `;  }   const sessionColumns = yield* sql<{ readonly name: string }>`    PRAGMA table_info(auth_sessions)  `;   if (!sessionColumns.some((column) => column.name === "client_label")) {    yield* sql`      ALTER TABLE auth_sessions      ADD COLUMN client_label TEXT    `;  }   if (!sessionColumns.some((column) => column.name === "client_ip_address")) {    yield* sql`      ALTER TABLE auth_sessions      ADD COLUMN client_ip_address TEXT    `;  }   if (!sessionColumns.some((column) => column.name === "client_user_agent")) {    yield* sql`      ALTER TABLE auth_sessions      ADD COLUMN client_user_agent TEXT    `;  }   if (!sessionColumns.some((column) => column.name === "client_device_type")) {    yield* sql`      ALTER TABLE auth_sessions      ADD COLUMN client_device_type TEXT NOT NULL DEFAULT 'unknown'    `;  }   if (!sessionColumns.some((column) => column.name === "client_os")) {    yield* sql`      ALTER TABLE auth_sessions      ADD COLUMN client_os TEXT    `;  }   if (!sessionColumns.some((column) => column.name === "client_browser")) {    yield* sql`      ALTER TABLE auth_sessions      ADD COLUMN client_browser TEXT    `;  }});