1// Script to create a wildcard CNAME for *.demo.everydaytech.au pointing to your Cloudflare Tunnel hostname
2require('dotenv').config();
3const axios = require('axios');
5const CLOUDFLARE_BASE_URL = process.env.CLOUDFLARE_BASE_URL || 'https://api.cloudflare.com/client/v4';
6const CLOUDFLARE_ZONE_ID = process.env.CLOUDFLARE_ZONE_ID;
7const CLOUDFLARE_TOKEN = process.env.CLOUDFLARE_TOKEN;
8const ZONE_NAME = process.env.ZONE_NAME || 'everydaytech.au';
9const TUNNEL_HOSTNAME = '52106555-6961-4b4d-bb84-1026b4892bec.cfargotunnel.com';
14async function createWildcardCNAME() {
15 if (!CLOUDFLARE_ZONE_ID || !CLOUDFLARE_TOKEN) {
16 throw new Error('Cloudflare credentials not configured');
19 const wildcardName = `*.demo.${ZONE_NAME}`;
21 Authorization: `Bearer ${CLOUDFLARE_TOKEN}`,
22 'Content-Type': 'application/json'
25 // Check for existing record
26 const listUrl = `${CLOUDFLARE_BASE_URL}/zones/${CLOUDFLARE_ZONE_ID}/dns_records?type=CNAME&name=${wildcardName}`;
27 const res = await axios.get(listUrl, { headers });
28 if (res.data.result && res.data.result.length > 0) {
29 console.log(`Wildcard CNAME for ${wildcardName} already exists.`);
33 // Create wildcard CNAME
34 const createUrl = `${CLOUDFLARE_BASE_URL}/zones/${CLOUDFLARE_ZONE_ID}/dns_records`;
38 content: TUNNEL_HOSTNAME,
43 const createRes = await axios.post(createUrl, payload, { headers });
44 if (createRes.data.success) {
45 console.log(`✅ Created wildcard CNAME for ${wildcardName} → ${TUNNEL_HOSTNAME}`);
47 console.error('❌ Failed to create wildcard CNAME:', createRes.data.errors);
51createWildcardCNAME().catch(err => {
52 console.error('Error:', err.message);