import * as Effect from "effect/Effect";import * as SqlClient from "effect/unstable/sql/SqlClient";// Client-declared surface (web/desktop/mobile) and app version, refreshed on// every WebSocket connect so the row tracks the client's current build instead// of freezing at session issuance. Nullable: old clients never report them.export default Effect.gen(function* () { const sql = yield* SqlClient.SqlClient; const columns = yield* sql<{ readonly name: string }>` PRAGMA table_info(auth_sessions) `; if (!columns.some((column) => column.name === "client_surface")) { yield* sql` ALTER TABLE auth_sessions ADD COLUMN client_surface TEXT `; } if (!columns.some((column) => column.name === "client_app_version")) { yield* sql` ALTER TABLE auth_sessions ADD COLUMN client_app_version TEXT `; }});
import * as Effect from "effect/Effect";
import * as SqlClient from "effect/unstable/sql/SqlClient";
// Client-declared surface (web/desktop/mobile) and app version, refreshed on
// every WebSocket connect so the row tracks the client's current build instead
// of freezing at session issuance. Nullable: old clients never report them.
export default Effect.gen(function* () {
const sql = yield* SqlClient.SqlClient;
const columns = yield* sql<{ readonly name: string }>`
PRAGMA table_info(auth_sessions)
`;
if (!columns.some((column) => column.name === "client_surface")) {
yield* sql`
ALTER TABLE auth_sessions
ADD COLUMN client_surface TEXT
`;
}
if (!columns.some((column) => column.name === "client_app_version")) {
yield* sql`
ALTER TABLE auth_sessions
ADD COLUMN client_app_version TEXT
`;
}
});