/* triggers.js — HTTP и Cron триггеры */ function httpTriggerByFn(fnName) { return (S.httpTriggers || []).find(function (t) { return t.spec && t.spec.functionref && t.spec.functionref.name === fnName; }); } function timeTriggerByFn(fnName) { return (S.timeTriggers || []).find(function (t) { return t.spec && t.spec.functionref && t.spec.functionref.name === fnName; }); } function toggleScheduleFields(prefix) { var enabled = !!document.getElementById(prefix + '-schedule-enabled').checked; var cronEl = document.getElementById(prefix + '-cron'); cronEl.disabled = !enabled; if (enabled && !cronEl.value.trim()) { cronEl.value = '*/5 * * * *'; } } function schedulePayload(prefix) { return { enabled: !!document.getElementById(prefix + '-schedule-enabled').checked, cron: (document.getElementById(prefix + '-cron').value || '').trim() }; } async function syncScheduleForFunction(name, prefix) { var schedule = schedulePayload(prefix); var existing = timeTriggerByFn(name); var existingName = (existing && existing.metadata && existing.metadata.name) || name; if (!schedule.enabled) { if (existing) { await requestJSON(API_BASE + '/timetriggers/' + encodeURIComponent(existingName), 'DELETE'); } return; } if (!schedule.cron) { throw new Error('cron is required'); } var payload = { name: existingName, functionName: name, cron: schedule.cron, method: 'POST', subpath: '/' }; if (existing) { await requestJSON(API_BASE + '/timetriggers/' + encodeURIComponent(existingName), 'PUT', payload); } else { await requestJSON(API_BASE + '/timetriggers', 'POST', payload); } }