@iola_adm/iola-cli 0.2.7 → 0.2.8

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iola_adm/iola-cli",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "description": "CLI и AI-агент городского округа Йошкар-Ола.",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/adm-iola/iola-cli#readme",
package/src/cli.js CHANGED
@@ -3159,19 +3159,31 @@ async function yandexDiskList(remotePath, options = {}) {
3159
3159
  }
3160
3160
 
3161
3161
  async function yandexDiskFind(query, options = {}) {
3162
- const payload = await yandexDiskRequest("GET", "/resources/files", { query: { limit: Math.max(100, Number(options.limit || 50) * 5), fields: "items.name,items.path,items.size,items.type" } });
3163
3162
  const needle = normalizeGeoText(query);
3164
- return (payload.items || [])
3165
- .map((item) => ({
3166
- type: item.type === "dir" ? "dir" : "file",
3167
- name: item.name || path.basename(item.path || ""),
3168
- path: denormalizeYandexDiskPath(item.path || ""),
3169
- size: item.size || "-",
3170
- }))
3163
+ const rows = await yandexDiskListRecursive(options.path || CLOUD_DEFAULT_REMOTE_DIR, { depth: Number(options.depth || 4), limit: Math.max(100, Number(options.limit || 50) * 5) });
3164
+ return rows
3171
3165
  .filter((item) => normalizeGeoText(`${item.name} ${item.path}`).includes(needle))
3172
3166
  .slice(0, Number(options.limit || 50));
3173
3167
  }
3174
3168
 
3169
+ async function yandexDiskListRecursive(remotePath, options = {}) {
3170
+ const depth = Number(options.depth || 4);
3171
+ const limit = Number(options.limit || 200);
3172
+ const rows = [];
3173
+ await yandexDiskWalk(remotePath, rows, depth, limit);
3174
+ return rows;
3175
+ }
3176
+
3177
+ async function yandexDiskWalk(remotePath, rows, depth, limit) {
3178
+ if (rows.length >= limit || depth < 0) return;
3179
+ const items = await yandexDiskList(remotePath).catch(() => []);
3180
+ for (const item of items) {
3181
+ if (rows.length >= limit) break;
3182
+ rows.push(item);
3183
+ if (item.type === "dir") await yandexDiskWalk(item.path, rows, depth - 1, limit);
3184
+ }
3185
+ }
3186
+
3175
3187
  async function yandexDiskUpload(localPath, remotePath, options = {}) {
3176
3188
  const resolved = path.resolve(localPath);
3177
3189
  const info = await stat(resolved);
@@ -36,20 +36,60 @@ iola cloud backup
36
36
  - получение OAuth-токена: `https://yandex.ru/dev/id/doc/ru/access`
37
37
  - получение токена вручную для проверки: `https://yandex.ru/dev/id/doc/ru/tokens/debug-token`
38
38
 
39
- Что сделать:
39
+ ### Получение OAuth-токена Яндекс Диска
40
40
 
41
41
  1. Откройте страницу Яндекс OAuth: `https://oauth.yandex.ru/`.
42
- 2. Создайте приложение для личного использования.
43
- 3. В правах приложения выберите доступ к Яндекс Диску.
44
- 4. Получите OAuth-токен.
45
- 5. В CLI выполните:
42
+ 2. Если Яндекс просит пройти верификацию через Госуслуги, пройдите ее. Без этого создание OAuth-приложения может быть недоступно.
43
+ 3. Нажмите `Создать`.
44
+ 4. В окне `Какое приложение хотите создать?` выберите `Для авторизации пользователей`.
45
+ 5. Нажмите `Перейти к созданию`.
46
+ 6. На шаге `Создание приложения` заполните:
47
+ - `Название вашего сервиса`: например `iola-cli`;
48
+ - `Иконка сервиса`: загрузите любую простую PNG-иконку до 1 МБ;
49
+ - `Почта для связи`: оставьте свою почту или укажите актуальную.
50
+ 7. Нажмите `Продолжить`.
51
+ 8. На шаге `Платформы приложений` выберите `Веб-сервисы`.
52
+ 9. В поле `Redirect URI` укажите:
53
+
54
+ ```text
55
+ https://oauth.yandex.ru/verification_code
56
+ ```
57
+
58
+ 10. Нажмите кнопку добавления рядом с `Redirect URI`, если интерфейс показывает такую кнопку.
59
+ 11. В поле `Suggest Hostname`, если оно обязательно, укажите сайт проекта или любой понятный URL сервиса, например:
60
+
61
+ ```text
62
+ https://github.com
63
+ ```
64
+
65
+ 12. Нажмите `Продолжить`.
66
+ 13. На шаге `Права доступа к данным пользователей` не выбирайте лишние основные права: телефон, почта, дата рождения, профиль не нужны.
67
+ 14. В блоке `Дополнительные` через поле `Название доступа` добавьте три права:
68
+ - `Чтение всего Диска` / `cloud_api:disk.read`;
69
+ - `Запись в любом месте на Диске` / `cloud_api:disk.write`;
70
+ - `Доступ к информации о Диске` / `cloud_api:disk.info`.
71
+ 15. Нажмите `Продолжить`.
72
+ 16. На финальном экране проверьте, что приложение запрашивает только три права Диска.
73
+ 17. Нажмите `Всё верно, создать приложение`.
74
+ 18. На странице созданного приложения скопируйте `ClientID`.
75
+ 19. Откройте ссылку, заменив `CLIENT_ID` на ваш `ClientID`:
76
+
77
+ ```text
78
+ https://oauth.yandex.ru/authorize?response_type=token&client_id=CLIENT_ID
79
+ ```
80
+
81
+ 20. На экране авторизации нажмите `Войти как ...`.
82
+ 21. Если Яндекс показывает предупреждение `Сервис ещё не верифицирован`, это нормально для личного приложения. Продолжайте только если приложение создавали вы сами и доверяете ему.
83
+ 22. Яндекс перенаправит на страницу `verification_code`, где будет показан OAuth-токен. В адресной строке он также находится после `access_token=`.
84
+ 23. Скопируйте OAuth-токен.
85
+ 24. В CLI выполните:
46
86
 
47
87
  ```bash
48
88
  iola cloud setup yandex-disk
49
89
  ```
50
90
 
51
- 6. Вставьте OAuth-токен.
52
- 7. Проверьте подключение:
91
+ 25. Вставьте OAuth-токен.
92
+ 26. Проверьте подключение:
53
93
 
54
94
  ```bash
55
95
  iola cloud doctor
@@ -57,6 +97,10 @@ iola cloud doctor
57
97
 
58
98
  Секрет сохраняется локально в `~/.iola/secrets.json`.
59
99
 
100
+ После успешной проверки CLI создаст или использует папку `/IOLA` на Яндекс Диске.
101
+
102
+ Обычно такой токен выдается на длительный срок. Если доступ перестал работать, получите новый токен через ту же ссылку авторизации и повторите `iola cloud setup yandex-disk`.
103
+
60
104
  ## Облако Mail.ru
61
105
 
62
106
  Облако Mail.ru подключается через WebDAV.