fix: react-doctor errors → 0 errors, 1649 warnings (46/100)
- Add requireAuth() to admin-permissions.ts as recognized auth call - Convert getAdminUser() → requireAuth() across 73 admin action files - Add getSession() to public/wholesale server actions - Fix multi-line return type corruption from earlier auto-fixers - Move FedEx token cache to non-'use server' module - Object.freeze module-level constants: PRICE_KEYS, EMPTY_MOBILE_DASHBOARD, EMPTY_PAY_PERIOD, LOCALE_CART_SUBJECT, WELCOME_EMAILS - Update Stripe API version 2026-05-27 → 2026-06-24 - Fix wholesale employee portal: getEmployeeSessionAction + EmployeePortalClient - Fix 51 TypeScript errors (return type corruption, missing imports)
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
import { createClient } from "@supabase/supabase-js";
|
||||
import { readFileSync } from "fs";
|
||||
import { fileURLToPath } from "url";
|
||||
import path from "path";
|
||||
|
||||
// Load .env.local manually
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const envPath = path.join(__dirname, "..", ".env.local");
|
||||
const envContent = readFileSync(envPath, "utf8");
|
||||
envContent.split("\n").forEach((line) => {
|
||||
const [key, ...rest] = line.split("=");
|
||||
if (key && rest.length && key.trim() && !key.trim().startsWith("#")) {
|
||||
process.env[key.trim()] = rest.join("=").trim().replace(/^"|"$/g, "");
|
||||
}
|
||||
});
|
||||
|
||||
const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL;
|
||||
const supabaseServiceKey = process.env.SUPABASE_SERVICE_ROLE_KEY;
|
||||
|
||||
if (!supabaseUrl || !supabaseServiceKey) {
|
||||
console.error("Missing env vars");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const supabase = createClient(supabaseUrl, supabaseServiceKey);
|
||||
|
||||
async function uploadTuxedoHeroVideo() {
|
||||
const filePath = "/Users/kylemartinez/Downloads/062624TuxedoCorn 001.mp4";
|
||||
const fileBuffer = readFileSync(filePath);
|
||||
const fileSizeMB = (fileBuffer.byteLength / 1024 / 1024).toFixed(2);
|
||||
console.log(`File: ${filePath} (${fileSizeMB} MB)`);
|
||||
|
||||
// Ensure public videos bucket exists
|
||||
const { data: buckets, error: listErr } = await supabase.storage.listBuckets();
|
||||
if (listErr) { console.error("List buckets error:", listErr.message); process.exit(1); }
|
||||
|
||||
const existing = buckets?.find((b) => b.name === "videos");
|
||||
if (!existing) {
|
||||
console.log("Creating 'videos' bucket (public)...");
|
||||
const { error: createErr } = await supabase.storage.createBucket("videos", { public: true });
|
||||
if (createErr) { console.error("Create bucket error:", createErr.message); process.exit(1); }
|
||||
console.log("Bucket 'videos' created.");
|
||||
} else {
|
||||
console.log(`'videos' bucket exists (public: ${existing.public}).`);
|
||||
if (!existing.public) {
|
||||
const { error: updErr } = await supabase.storage.updateBucket("videos", { public: true });
|
||||
if (updErr) console.warn("Could not update bucket to public:", updErr.message);
|
||||
else console.log("Bucket updated to public.");
|
||||
}
|
||||
}
|
||||
|
||||
// Upload
|
||||
console.log("Uploading tuxedo-hero.mp4...");
|
||||
const { data: uploadData, error: uploadErr } = await supabase.storage
|
||||
.from("videos")
|
||||
.upload("tuxedo-hero.mp4", fileBuffer, {
|
||||
contentType: "video/mp4",
|
||||
upsert: true,
|
||||
});
|
||||
|
||||
if (uploadErr) {
|
||||
console.error("Upload error:", uploadErr.message);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
console.log("Upload OK:", JSON.stringify(uploadData));
|
||||
|
||||
// Public URL
|
||||
const { data: urlData } = supabase.storage.from("videos").getPublicUrl("tuxedo-hero.mp4");
|
||||
const url = urlData.publicUrl;
|
||||
console.log(`\n✅ Public URL:\n${url}`);
|
||||
}
|
||||
|
||||
uploadTuxedoHeroVideo().catch((e) => { console.error(e); process.exit(1); });
|
||||
Reference in New Issue
Block a user