1function maskedSecret(secret: string): string {2 const prefix = String(secret).match(/^[a-z]+_/)?.[0] || '';3 return `${prefix}***`;4}56export function renderSecretCommand(container: Element, verb: string, secret: string) {7 const command = `devsite ${verb} ${secret}`;8 const group = document.createElement('div');9 group.className = 'secret-command';10 group.setAttribute('role', 'group');11 group.setAttribute('aria-label', `devsite ${verb} command`);1213 const code = document.createElement('code');14 const executable = document.createElement('span');15 executable.className = 'command-executable';16 executable.textContent = 'devsite';17 const action = document.createElement('span');18 action.className = 'command-verb';19 action.textContent = verb;20 const masked = document.createElement('span');21 masked.className = 'command-secret';22 masked.textContent = maskedSecret(secret);23 code.append(executable, ' ', action, ' ', masked);2425 const button = document.createElement('button');26 button.type = 'button';27 button.textContent = 'Copy';28 const status = document.createElement('small');29 status.className = 'secret-copy-status';30 status.setAttribute('aria-live', 'polite');31 button.addEventListener('click', async () => {32 await navigator.clipboard.writeText(command);33 status.textContent = 'Copied.';34 });3536 group.append(code, button);37 container.replaceChildren(group, status);38}