#!/usr/bin/env -S deno run --allow-env /** * Internal API Key Generator * * Generates a secure internal API key and its bcrypt hash for manual insertion * into the internal_api_keys table. * * Usage: * deno run --allow-env scripts/generate-internal-api-key.ts [key_name] * * Example: * deno run --allow-env scripts/generate-internal-api-key.ts "Analytics Service" */ import * as bcrypt from "https://deno.land/x/bcrypt@v0.4.1/mod.ts"; function generateApiKey(): string { const characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-"; const length = 48; let result = "int_shopcall_"; for (let i = 0; i < length; i++) { result += characters.charAt(Math.floor(Math.random() * characters.length)); } return result; } async function hashApiKey(apiKey: string): Promise { const salt = await bcrypt.genSalt(12); return await bcrypt.hash(apiKey, salt); } async function main() { const args = Deno.args; const keyName = args[0] || "Untitled Internal Key"; console.log("\nšŸ”‘ Generating Internal API Key...\n"); console.log("━".repeat(80)); // Generate API key const apiKey = generateApiKey(); console.log("\nāœ… API Key Generated:"); console.log(` ${apiKey}`); // Generate hash console.log("\nā³ Generating bcrypt hash (this may take a few seconds)..."); const hash = await hashApiKey(apiKey); console.log("āœ… Hash Generated:"); console.log(` ${hash}`); // Generate SQL console.log("\nšŸ“ SQL INSERT Statement:"); console.log("━".repeat(80)); console.log(` INSERT INTO internal_api_keys ( key_name, api_key, key_hash, description, created_by, expires_at ) VALUES ( '${keyName}', '${apiKey}', '${hash}', 'Auto-generated internal API key', 'admin', NULL -- or set expiration: '2025-12-31 23:59:59+00' ); `); console.log("━".repeat(80)); console.log("\nāš ļø IMPORTANT:"); console.log(" 1. Store the API key securely - it cannot be retrieved later!"); console.log(" 2. Execute the SQL statement in your Supabase database"); console.log(" 3. Update the description and created_by fields as needed"); console.log(" 4. Set an expiration date if required"); console.log("\nšŸ“š See INTERNAL_API_KEYS.md for usage documentation\n"); } if (import.meta.main) { main(); }