export declare function ownableColumns(): { ownerEmail: import("drizzle-orm").HasDefault>>; orgId: import("drizzle-orm/pg-core").PgTextBuilderInitial<"org_id", [string, ...string[]]>; visibility: import("drizzle-orm").HasDefault>>; }; /** * Create a companion shares table for an ownable resource. Call this right * after defining the parent table. * * Columns: * - `id` — share row id (generated by the share action) * - `resourceId` — id of the parent resource * - `principalType` — `'user' | 'group' | 'org'` * - `principalId` — email (for user) or org id (for org) * - `role` — `'viewer' | 'commenter' | 'editor' | 'admin'` * - `createdBy` — email of the user who created the share * - `createdAt` — ISO timestamp * * Uniqueness across `(resource_id, principal_type, principal_id)` is enforced * at the action layer via upsert-style logic. A composite DB-level unique * index can be added per template if desired — omitted here to keep the * factory uses the shared Postgres schema helpers. */ export declare function createSharesTable(tableName: string): import("drizzle-orm/pg-core").PgTableWithColumns<{ name: string; schema: undefined; columns: { id: import("drizzle-orm/pg-core").PgColumn<{ name: "id"; tableName: string; dataType: "string"; columnType: "PgText"; data: string; driverParam: string; notNull: true; hasDefault: false; isPrimaryKey: true; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}, {}>; resourceId: import("drizzle-orm/pg-core").PgColumn<{ name: "resource_id"; tableName: string; dataType: "string"; columnType: "PgText"; data: string; driverParam: string; notNull: true; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}, {}>; principalType: import("drizzle-orm/pg-core").PgColumn<{ name: "principal_type"; tableName: string; dataType: "string"; columnType: "PgText"; data: "group" | "org" | "user"; driverParam: string; notNull: true; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: ["user", "group", "org"]; baseColumn: never; identity: undefined; generated: undefined; }, {}, {}>; principalId: import("drizzle-orm/pg-core").PgColumn<{ name: "principal_id"; tableName: string; dataType: "string"; columnType: "PgText"; data: string; driverParam: string; notNull: true; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}, {}>; role: import("drizzle-orm/pg-core").PgColumn<{ name: "role"; tableName: string; dataType: "string"; columnType: "PgText"; data: "admin" | "commenter" | "editor" | "viewer"; driverParam: string; notNull: true; hasDefault: true; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: ["viewer", "commenter", "editor", "admin"]; baseColumn: never; identity: undefined; generated: undefined; }, {}, {}>; createdBy: import("drizzle-orm/pg-core").PgColumn<{ name: "created_by"; tableName: string; dataType: "string"; columnType: "PgText"; data: string; driverParam: string; notNull: true; hasDefault: true; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}, {}>; createdAt: import("drizzle-orm/pg-core").PgColumn<{ name: "created_at"; tableName: string; dataType: "string"; columnType: "PgText"; data: string; driverParam: string; notNull: true; hasDefault: true; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}, {}>; notifiedAt: import("drizzle-orm/pg-core").PgColumn<{ name: "notified_at"; tableName: string; dataType: "string"; columnType: "PgText"; data: string; driverParam: string; notNull: false; hasDefault: false; isPrimaryKey: false; isAutoincrement: false; hasRuntimeDefault: false; enumValues: [string, ...string[]]; baseColumn: never; identity: undefined; generated: undefined; }, {}, {}>; }; dialect: 'pg'; }>; export type Visibility = "private" | "org" | "public"; export type ShareRole = "viewer" | "commenter" | "editor" | "admin"; export type PrincipalType = "user" | "group" | "org"; export declare const ROLE_RANK: Record; export declare function roleSatisfies(actual: ShareRole | "owner", minimum: ShareRole | "owner"): boolean;