| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- #!/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<string> {
- 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();
- }
|