tensorgrid-ui 1.1.2 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/lib/index.js +23 -8
  2. package/package.json +1 -1
package/lib/index.js CHANGED
@@ -189,25 +189,40 @@ export function apply(ctx) {
189
189
 
190
190
  // ── Вход по подписке ────────────────────────────────────────────────
191
191
  //
192
- // Стойка входа монтируется отдельной строкой профиля, и её может не
193
- // быть. Берём мягко: без неё маршрут честно отвечает, что вход
194
- // недоступен, вместо того чтобы уронить весь ряд.
192
+ // Стойка входа монтируется отдельной строкой профиля, и её может не быть
193
+ // вовсе.
194
+ //
195
+ // Прочитать её через ctx.get мало: возвращённая служба остаётся под
196
+ // охраной контекста, который её не объявил, и первое же обращение к
197
+ // методу отвечает «cannot get property "list" without inject». Объявить
198
+ // стойку в inject всего ряда тоже нельзя — тогда без неё не
199
+ // смонтируется ни палитра, ни перевод.
200
+ //
201
+ // Поэтому службы забираются ВЛОЖЕННЫМ рядом и запоминаются: он ждёт их
202
+ // появления, не задерживая остальное, и ссылки остаются пригодными,
203
+ // потому что связаны с контекстом, который их объявил. Маршрут при этом
204
+ // регистрируется всегда — профиль без стойки получает внятный ответ, а
205
+ // не молчание.
206
+ let authorization = null
207
+ let credentials = null
208
+ web.inject(['authorization', 'credentials'], (bound) => {
209
+ authorization = bound.authorization
210
+ credentials = bound.credentials
211
+ bound.effect(() => () => { authorization = null; credentials = null })
212
+ })
213
+
195
214
  web.effect(() =>
196
215
  web.webServer.register({
197
216
  kind: 'exact',
198
217
  path: '/api/tensorgrid.auth',
199
218
  async handler(req, res) {
200
219
  try {
201
- const authorization = web.get('authorization')
202
- if (authorization === undefined) {
220
+ if (authorization === null) {
203
221
  reply(res, 200, { available: false, problem: 'стойка входа не смонтирована' })
204
222
  return
205
223
  }
206
224
 
207
225
  const bridge = await loadModule('./auth-bridge.js')
208
- // Хранилище учётных данных читается тем же способом: как
209
- // свойство оно потребовало бы объявления в inject.
210
- const credentials = web.get('credentials')
211
226
 
212
227
  if (req.method === 'GET') {
213
228
  reply(res, 200, { available: true, ...(await bridge.listProviders(authorization, credentials)) })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tensorgrid-ui",
3
- "version": "1.1.2",
3
+ "version": "1.1.3",
4
4
  "description": "TENSOR GRID — фирменный интерфейс поверх DeepSeek Harness: палитра, живой ambient-слой, айдентика и русский язык-пакет",
5
5
  "type": "module",
6
6
  "main": "lib/index.js",