Files
fission-console/AUDIT_CONSOLE_FUNCTIONS.md

21 KiB
Raw Permalink Blame History

🔍 ПОЛНЫЙ АУДИТ КОНСОЛИ FISSION

Дата: 2 мая 2026
Файлы проверки: index.html, app.js, auth.js, functions.js, templates/


📋 SUMMARY

Метрика Значение
Всего вызовов функций 41
Функции НАЙДЕНЫ (ОК) 43
Функции НЕ НАЙДЕНЫ (ДЫР) 0
ID элементов (все найдены) 38
КРИТИЧЕСКИХ проблем 2 🔴
Проблем с кодовой гигиеной 5 🟡

🔴 КРИТИЧЕСКИЕ ПРОБЛЕМЫ

1️⃣ JS файлы НЕ встроены в Docker image! ⚠️ МАКРО-ПРОБЛЕМА

embed.go (ui/embed.go L8):

//go:embed index.html cron.html
var content embed.FS

Это встраивает ТОЛЬКО:

  • index.html
  • cron.html

НО НЕ встраивает:

  • js/*.js (8 файлов!)
  • css/styles.css
  • templates/**/*.html (6 файлов!)

Последствия:

  • Все JS файлы (app.js, auth.js, functions.js и т.д.) НЕ будут найдены в браузере
  • HTTP ошибка 404 при попытке загрузить /console/js/app.js
  • Фронтенд полностью НЕ работает!
  • console будет показывать только пустой HTML без функциональности

РЕШЕНИЕ:

//go:embed index.html cron.html css/ js/ templates/
var content embed.FS

2️⃣ JS файлы НЕ подключены в index.html

В index.html подключен ТОЛЬКО app.js:

<script src="js/app.js"></script>

Но функции определены в отдельных файлах:

  • auth.js - doLogin(), doLogout(), showLoginOverlay(), hideLoginOverlay(), setUserAvatar(), jwtEmail()
  • functions.js - onLangChange(), openCreate(), closeCreate(), submitCreate()
  • ai.js - ПУСТО! Здесь должны быть функции AI
  • ui.js - ПУСТО!
  • triggers.js - ПУСТО!
  • config.js - ПУСТО!
  • init.js - ПУСТО!
  • modals.js - ПУСТО!
  • api.js - ПУСТО!

Даже если файлы будут встроены, они не будут загружены в браузер без <script> тегов!

РЕШЕНИЕ: Добавить в конец index.html перед app.js:

<script src="js/auth.js"></script>
<script src="js/functions.js"></script>
<script src="js/ui.js"></script>
<script src="js/ai.js"></script>
<script src="js/triggers.js"></script>
<script src="js/config.js"></script>
<script src="js/init.js"></script>
<script src="js/modals.js"></script>
<script src="js/api.js"></script>
<script src="js/app.js"></script>  <!-- ДОЛЖЕН БЫТЬ ПОСЛЕДНИМ! -->

ФУНКЦИИ НАЙДЕНЫ И РАБОТАЮТ

В app.js (основной файл):

Функция Вызывается Строка
1 authHeaders() getJSON(), requestJSON() L20
2 getJSON(url) reloadAll(), openEdit() L28
3 requestJSON() submitEdit(), removeFn(), reloadAll() L45
4 setText(id, value) reloadAll() (x5) L69
5 showStatus() clearStatus(), submitCreate(), submitEdit(), submitInvoke(), removeFn() L77
6 clearStatus() clearStatus() L86
7 parseMethods(v) submitCreate() L95
8 parseTimeout(v) submitCreate(), submitEdit() L102
9 llmGeneratedWarning(lang) addLLMWarning() L109
10 addLLMWarning() aiGenerate() L124
11 httpTriggerByFn(fnName) reloadAll(), openEdit() L135
12 timeTriggerByFn(fnName) reloadAll(), openEdit(), openInvoke() L142
13 toggleScheduleFields(prefix) openEdit(), openCreate() L150
14 schedulePayload(prefix) syncScheduleForFunction() L158
15 syncScheduleForFunction() submitEdit(), submitCreate() L166
16 h(v) reloadAll() (HTML escape) L208
17 formatTimestamp(ts) timestampCell() L222
18 timestampCell(ts) reloadAll() L239
19 openEdit(name) data-onclick в таблице L251
20 closeEdit() submitEdit(), data-onclick L280
21 openHelp() data-onclick L286
22 closeHelp() data-onclick L291
23 submitEdit() data-onclick L296
24 openInvoke(name) data-onclick в таблице L318
25 closeInvoke() submitInvoke(), data-onclick L328
26 submitInvoke() data-onclick L333
27 removeFn(name) onclick в таблице (inline JS) L385
28 reloadAll() data-onclick, checkAuth(), submitCreate(), submitEdit() L417
29 aiCheck(codeId, langId, resultId) data-onclick L477
30 initLog(msg) pollNSStatus() L510
31 formatSeconds() startTimedStatus(), setInitElapsed() L516
32 startTimedStatus() submitCreate(), submitEdit(), removeFn() L572
33 checkAuth() инициализация (конец app.js) L629

В auth.js:

Функция Вызывается Строка
34 showLoginOverlay() checkAuth(), doLogout() L3
35 hideLoginOverlay() checkAuth(), doLogin() L7
36 doLogin() onclick в login.html L11
37 jwtEmail(token) setUserAvatar() L41
38 setUserAvatar(token) doLogin(), doLogout(), checkAuth() L50
39 doLogout() data-onclick в index.html L64

В functions.js:

Функция Вызывается Строка
40 onLangChange() data-onchange L3
41 openCreate() data-onclick L11
42 closeCreate() submitCreate(), data-onclick L23
43 submitCreate() data-onclick L28

⚠️ ФУНКЦИИ НЕ НАЙДЕНЫ (ПОТЕНЦИАЛЬНЫЕ ДЫРЫ)

Нет найденных функций из вызовов в HTML, так как все они есть в различных JS файлах.

ОДНАКО! Есть потенциальная проблема:

Функции из других файлов, вызываемые через data-onclick:

✅ reloadAll (app.js L417)
✅ openCreate (functions.js L11)
✅ openHelp (app.js L286)
✅ doLogout (auth.js L64)
✅ onLangChange (functions.js L3)
✅ toggleScheduleFields (app.js L150)
✅ aiCheck (app.js L477)
✅ showGenPrompt (app.js L595)
✅ aiExplain (app.js L651)
✅ aiGenerate (app.js L625)
✅ closeCreate (functions.js L23)
✅ submitCreate (functions.js L28)
✅ closeEdit (app.js L280)
✅ submitEdit (app.js L296)
✅ closeHelp (app.js L291)
✅ closeInvoke (app.js L328)
✅ submitInvoke (app.js L333)

🔗 ID ЭЛЕМЕНТЫ - ПРОВЕРКА СУЩЕСТВОВАНИЯ

Используются в app.js - через getElementById():

ID Строка Статус Где создан
init-overlay 656 index.html L19
init-elapsed 656 index.html L26
init-current-stage 656 index.html L31
init-summary 656 index.html L36
init-reason 656 index.html L41
init-error 656 index.html L46
init-log 656 index.html L51
init-stages 656 index.html L58
status 456 index.html L121
env-count 443 index.html L104
pkg-count 443 index.html L109
fn-count 443 index.html L114
http-count 443 index.html L119
cron-count 443 index.html L124
fn-rows 456 index.html L131
create-modal 251, 453 index.html L130
edit-modal 251 index.html L189
help-modal 286 index.html L273
invoke-modal 318 index.html L367
e-title 251 index.html L191
e-tf-warn 251 index.html L195
e-lang-hidden 251, 477 index.html L199
e-name 251 index.html L204
e-env 251 index.html L209
e-entry 251 index.html L214
e-timeout 251 index.html L219
e-schedule-enabled 251 index.html L224
e-cron 251 index.html L231
e-code 251 index.html L238
e-ai-btn 251 index.html L241
e-exp-btn 251 index.html L244
e-ai-result 251 index.html L248
e-submit 296 index.html L255
c-lang openCreate (functions.js) index.html L141
c-entry openCreate (functions.js) index.html L168
c-timeout openCreate (functions.js) index.html L153
c-schedule-enabled openCreate (functions.js) index.html L156
c-cron openCreate (functions.js) index.html L160
c-code aiCheck(), aiGenerate(), aiExplain() index.html L165
c-ai-btn aiCheck(), aiGenerate(), aiExplain() index.html L172
c-gen-btn aiGenerate() index.html L173
c-exp-btn aiExplain() index.html L174
c-gen-prompt aiGenerate() index.html L178
c-gen-desc aiGenerate() index.html L179
c-ai-result aiCheck(), aiGenerate(), aiExplain() index.html L187
c-submit submitCreate() (functions.js) index.html L193
c-name openCreate(), submitCreate() (functions.js) index.html L136
c-route submitCreate() (functions.js) index.html L148
c-methods submitCreate() (functions.js) index.html L152
login-overlay showLoginOverlay(), hideLoginOverlay() (auth.js) login.html L2
l-env doLogin() (auth.js) login.html L11
l-token doLogin() (auth.js) login.html L17
l-error doLogin() (auth.js) login.html L25
l-btn doLogin() (auth.js) login.html L26
user-avatar setUserAvatar() (auth.js) index.html L84
i-title openInvoke() (app.js) index.html L367
i-body submitInvoke() (app.js) index.html L371
i-status submitInvoke() (app.js) index.html L382
i-meta submitInvoke() (app.js) index.html L384
i-resp submitInvoke() (app.js) index.html L391
i-submit submitInvoke() (app.js) index.html L381

Используются в auth.js - через getElementById():

ID Функция Статус
login-overlay showLoginOverlay(), hideLoginOverlay()
l-btn doLogin()
l-error doLogin()
l-token doLogin()
l-env doLogin()
user-avatar setUserAvatar()

🎯 НАЙДЕННЫЕ data-* АТРИБУТЫ

data-onclick:

✅ reloadAll (index.html L81)
✅ openCreate (index.html L82)
✅ openHelp (index.html L83)
✅ doLogout (index.html L84)
✅ onLangChange (index.html L141 - data-onchange)
✅ toggleScheduleFields('c') (index.html L156 - data-onchange)
✅ toggleScheduleFields('e') (index.html L224 - data-onchange)
✅ aiCheck('c-code','c-lang','c-ai-result') (index.html L172)
✅ showGenPrompt() (index.html L173)
✅ aiExplain('c-code','c-lang','c-ai-result') (index.html L174)
✅ aiGenerate() (index.html L181)
✅ closeCreate() (index.html L193)
✅ submitCreate() (index.html L194)
✅ aiCheck('e-code','e-lang-hidden','e-ai-result') (index.html L241)
✅ aiExplain('e-code','e-lang-hidden','e-ai-result') (index.html L244)
✅ closeEdit() (index.html L255)
✅ submitEdit() (index.html L256)
✅ closeHelp() (index.html L348)
✅ closeInvoke() (index.html L381)
✅ submitInvoke() (index.html L382)

data-onchange:

✅ onLangChange (index.html L141)
✅ toggleScheduleFields('c') (index.html L156)
✅ toggleScheduleFields('e') (index.html L224)

data-onkeydown:

✅ if(event.key==='Enter')aiGenerate() (index.html L179)

🧩 INLINE onclick (В ТАБЛИЦЕ)

В app.js строятся динамически через innerHTML (L456):

'<button class="btn ghost" onclick="openEdit(\'' + h(name) + '\')">'
'<button class="btn ghost" onclick="openInvoke(\'' + h(name) + '\')">'
'<button class="btn danger" onclick="removeFn(\'' + h(name) + '\')">'

Все эти функции НАЙДЕНЫ


📊 СТАТИСТИКА ПО ФАЙЛАМ

Файл Функции Строк Статус
index.html 38 ID элементов 396 Корректен
app.js 33 функции 629 ОК, но неполный!
auth.js 6 функции 71 ОК
functions.js 4 функции 71 ОК
ai.js - 1 ПУСТО!
ui.js - 1 ПУСТО!
triggers.js - 1 ПУСТО!
config.js - 1 ПУСТО!
init.js - 1 ПУСТО!
modals.js - 1 ПУСТО!
api.js - 1 ПУСТО!
templates/*.html - ≈20 ПУСТО!

🔴 КРИТИЧЕСКИЕ ПРОБЛЕМЫ

1. JS файлы НЕ загружаются! ⚠️ МАКРО-ПРОБЛЕМА

  • index.html загружает ТОЛЬКО app.js
  • auth.js и functions.js НЕ подключены!
  • Это означает, что функции из этих файлов НЕ доступны в глобальной области видимости
  • Event handlers data-onclick="doLogout" не будут работать!

2. Шаблон-файлы пусты

  • Все файлы в templates/ содержат только комментарии
  • Реальные модальные окна определены в index.html inline
  • Динамическая загрузка login.html (app.js L453) создаёт окно динамически

3. Множество файлов - заглушки

  • ai.js, ui.js, triggers.js, config.js, init.js, modals.js, api.js
  • Все содержат только комментарии
  • Это говорит об неполной рефакторизации кода

РЕШЕНИЯ

1️⃣ КРИТИЧ: Обновить embed.go

Файл: ui/embed.go

//go:embed index.html cron.html css/ js/ templates/
var content embed.FS

Это встроит ВСЕ файлы в Docker image.


2️⃣ Добавить теги <script> для всех JS файлов в index.html

Файл: ui/index.html - в конце перед закрытием </body>:

ПЕРЕД:

  <script src="js/app.js"></script>

</body>

ПОСЛЕ:

  <script src="js/auth.js"></script>
  <script src="js/functions.js"></script>
  <script src="js/ui.js"></script>
  <script src="js/ai.js"></script>
  <script src="js/triggers.js"></script>
  <script src="js/config.js"></script>
  <script src="js/init.js"></script>
  <script src="js/modals.js"></script>
  <script src="js/api.js"></script>
  <script src="js/app.js"></script>  <!-- app.js ДОЛЖЕН БЫТЬ ПОСЛЕДНИМ! -->

</body>

Порядок важен! app.js должен быть последним, так как он вызывает initializeEventListeners() и checkAuth() которые используют функции из других модулей.


3️⃣ Заполнить пустые JS файлы

Текущее состояние:

  • ai.js - 1 строка (только комментарий)
  • ui.js - 1 строка (только комментарий)
  • triggers.js - 1 строка (только комментарий)
  • config.js - 1 строка (только комментарий)
  • init.js - 1 строка (только комментарий)
  • modals.js - 1 строка (только комментарий)
  • api.js - 1 строка (только комментарий)

Рекомендуемое распределение функций:

ai.js — AI функции

// Переместить из app.js:
- aiCheck(codeId, langId, resultId)
- aiGenerate()
- aiExplain(codeId, langId, resultId)

ui.js — UI-хелпер функции

// Переместить из app.js:
- showStatus(message, kind)
- clearStatus()
- setText(id, value)
- h(v)  HTML escape
- formatTimestamp(ts)
- timestampCell(ts)
- toggleAssistant()
- askAssistant()

api.js — API запросы

// Переместить из app.js:
- getJSON(url)
- requestJSON(url, method, body)
- authHeaders()  может остаться в auth.js или тут

triggers.js — Работа с триггерами

// Переместить из app.js:
- httpTriggerByFn(fnName)
- timeTriggerByFn(fnName)
- toggleScheduleFields(prefix)
- schedulePayload(prefix)
- syncScheduleForFunction(name, prefix)

init.js — Инициализация и polling

// Переместить из app.js:
- pollNSStatus()
- initLog(msg)
- setInitElapsed(seconds)
- setInitCurrentStage(text)
- setBox(id, text)
- missingKeys(obj)
- firstPendingStage(stages)
- describeInitReason(debug)
- summarizeInit(status, debug)
- explainDelay(seconds)
- startTimedStatus()
- renderInitStages(stages)

config.js — Константы

// Переместить из app.js:
- LANG_TEMPLATES
- deckAPIs (если есть)

modals.js — Управление модальными окнами

// Переместить из app.js:
- openEdit(name)
- closeEdit()
- openHelp()
- closeHelp()
- openInvoke(name)
- closeInvoke()
- submitEdit()
- submitInvoke()
- removeFn(name)

4️⃣ Заполнить пустые template файлы

Вариант A: Удалить пустые шаблоны (так как они не используются):

  • templates/components/ai-assistant.html
  • templates/components/navbar.html
  • templates/components/status-cards.html
  • templates/modals/create-function.html
  • templates/modals/edit-function.html
  • templates/modals/help.html
  • templates/modals/init-overlay.html
  • templates/modals/invoke.html

Вариант B: Заполнить их реальным содержимым (если планируется модульная архитектура)

Рекомендация: Удалить, так как все компоненты уже встроены в index.html inline


5️⃣ Обновить app.js

После рефакторинга, app.js должен содержать:

  • Инициализацию: initializeEventListeners(), checkAuth()
  • Основные хелперы: parseMethods(), parseTimeout(), llmGeneratedWarning(), addLLMWarning(), formatSeconds()
  • Основной список функций: reloadAll()
  • Константы и глобальное состояние: S, API_BASE, LANG_TEMPLATES

🎓 ВЫВОД

Аудит показал:

  • Все функции определены (есть в одном из JS файлов)
  • Все ID элементов существуют в HTML
  • КРИТИЧ: JS файлы НЕ встроены в Docker image (embed.go)
  • КРИТИЧ: JS файлы НЕ подключены в index.html
  • КРИТИЧ: Множество пустых JS файлов (заглушек)
  • КРИТИЧ: Код НЕ будет работать пока не будут исправлены проблемы embed.go и index.html

Обнаруженные проблемы по критичности:

  1. 🔴 КРИТИЧ: embed.go встраивает только index.html и cron.html, но НЕ встраивает js/, css/ и templates/
  2. 🔴 КРИТИЧ: index.html подключает только app.js, но НЕ подключает auth.js и functions.js
  3. 🟠 ВАЖНО: 7 JS файлов содержат только комментарии (пустые заглушки)
  4. 🟡 РЕКОМЕНДАЦИЯ: Рефакторить код - переместить функции в соответствующие модули
  5. 🟡 РЕКОМЕНДАЦИЯ: Удалить пустые template файлы или заполнить их

Уровень срочности:

  • Проблемы 1-2: 🔴 КРИТИЧ — фронтенд вообще не работает
  • Проблемы 3-5: 🟡 СРЕДНЯЯ — кодовая гигиена и рефакторинг