(()=>{ 'use strict'; if(window.CateriumTrialPromoDeveloperV181)return; const VERSION='18.1-trial-promo-developer'; const $=id=>document.getElementById(id),qa=(s,r=document)=>[...r.querySelectorAll(s)]; const client=()=>window.SunCloudV2?.getClient?.()||null; const dev=()=>window.SunDeveloperV22||null; const esc=v=>window.SunSafe?.escapeHTML?window.SunSafe.escapeHTML(String(v??'')):String(v??'').replace(/[&<>"']/g,c=>({'&':'&','<':'<','>':'>','"':'"',"'":'''}[c])); const toast=(t,type='info')=>window.SunEnterprise?.toast?.(t,type,5000); async function rpc(name,args={}){const c=client();if(!c)throw new Error('Supabase не подключён.');const {data,error}=await c.rpc(name,args);if(error)throw error;return data;} function fmt(v){if(!v)return'—';try{return new Date(v).toLocaleString('ru-RU',{dateStyle:'short',timeStyle:'short'})}catch(_){return String(v)}} function ensureStyle(){if($('cateriumPromoDevStyle'))return;const s=document.createElement('style');s.id='cateriumPromoDevStyle';s.textContent=`.ctm-promo-tools{display:grid;grid-template-columns:1.2fr 1.2fr .65fr .65fr .65fr auto;gap:8px;align-items:end;margin-bottom:14px}.ctm-promo-tools label{display:grid;gap:5px;font-size:11px;font-weight:800;color:#686e76}.ctm-promo-tools input,.ctm-promo-tools select{min-height:39px;border:1px solid #d8dbe0;border-radius:9px;padding:7px 9px;background:#fff}.ctm-promo-code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:900;letter-spacing:.04em}.ctm-promo-copy{cursor:pointer}.ctm-promo-note{margin:0 0 12px;color:#747b83;font-size:12px}@media(max-width:1000px){.ctm-promo-tools{grid-template-columns:1fr 1fr}.ctm-promo-tools button{grid-column:1/-1}}`;document.head.appendChild(s);} function addTab(){const root=$('sun-developer-console-v22');if(!root)return false;const tabs=root.querySelector('[data-dev-tab]')?.parentElement;if(!tabs)return false;if(!tabs.querySelector('[data-dev-tab="promos"]')){const b=document.createElement('button');b.type='button';b.dataset.devTab='promos';b.textContent='Промокоды';tabs.appendChild(b);}return true;} async function render(){const root=$('sunDevBody');if(!root)return;qa('#sun-developer-console-v22 [data-dev-tab]').forEach(b=>b.classList.toggle('on',b.dataset.devTab==='promos'));try{localStorage.setItem('sunDeveloperActiveTabV22','promos')}catch(_){}root.innerHTML='
Сгенерируйте код автоматически или напишите свой. Email можно оставить пустым для универсального кода. По умолчанию код одноразовый.
| Код | Клиент | Trial | Действует до | Использования | Последняя активация | Статус | |
|---|---|---|---|---|---|---|---|
| ${esc(r.client_email||'Любой email')} | ${Number(r.trial_days||0)} дн. | ${fmt(r.valid_until)} | ${Number(r.use_count||0)} / ${Number(r.max_uses||0)} | ${r.last_redeemed_at?`${fmt(r.last_redeemed_at)} ${esc(r.last_workspace_name||'')} ${esc(r.last_redeemed_email||'')} `:'—'} | ${r.is_active?'Активен':'Отключён'} | ||
| Промокодов пока нет. | |||||||
${esc(e?.message||e)}