itd-sdk-js 1.0.1 → 1.0.2

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/API_REFERENCE.md CHANGED
@@ -63,6 +63,18 @@ client.auth.isAuthenticated = true;
63
63
 
64
64
  - **Параметры**: `text` (string), `imagePath` (string, опционально).
65
65
 
66
+ ### createWallPost(username, text, imagePath?)
67
+
68
+ Создает пост **на стене другого пользователя** (wall post).
69
+
70
+ - Делается через `POST /api/posts` с телом `{ content, wallRecipientId }`.
71
+ - `wallRecipientId` — это **ID пользователя-получателя**, поэтому метод сначала запрашивает профиль через `getUserProfile(username)` и берет `profile.id`.
72
+
73
+ - **Параметры**:
74
+ - `username` — username получателя (string)
75
+ - `text` — текст поста (string)
76
+ - `imagePath` — путь к изображению (string, опционально)
77
+
66
78
  ### getPost(postId)
67
79
 
68
80
  Запрашивает данные конкретного поста.
@@ -248,4 +260,4 @@ if (result.pagination.hasMore) {
248
260
 
249
261
  ---
250
262
 
251
- **Последнее обновление документации**: 2026-01-27.
263
+ **Последнее обновление документации**: 2026-01-28.
package/README.md CHANGED
@@ -84,6 +84,13 @@ console.log(`${stats.likes} лайков, ${stats.views} просмотров`);
84
84
 
85
85
  Полное описание каждого метода — в **[API_REFERENCE.md](API_REFERENCE.md)**.
86
86
 
87
+ ## Пост на чужой стене (wall post)
88
+
89
+ ```javascript
90
+ // Пишем пост на стене другого пользователя (нужен wallRecipientId, SDK получит его сам)
91
+ await client.createWallPost('ITD_API', 'Тестовый пост на чужой стене 🦫');
92
+ ```
93
+
87
94
  ## Важно
88
95
 
89
96
  Это неофициальный проект. Если разработчики сайта изменят структуру API или введут новую защиту, методы могут временно перестать работать. Используйте аккуратно и не спамьте запросами.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "itd-sdk-js",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "Unofficial SDK for итд.com - Node.js library for working with API. Automatic token refresh, session management, and convenient methods for posts, comments, users, and notifications.",
5
5
  "main": "src/client.js",
6
6
  "type": "module",
package/src/client.js CHANGED
@@ -239,6 +239,18 @@ export class ITDClient {
239
239
  return await this.posts.createPost(text, imagePath);
240
240
  }
241
241
 
242
+ /**
243
+ * Создает пост на стене другого пользователя (wall post)
244
+ *
245
+ * @param {string} username - Имя пользователя, на чью стену нужно написать
246
+ * @param {string} text - Текст поста
247
+ * @param {string|null} imagePath - Путь к изображению (опционально)
248
+ * @returns {Promise<Object|null>} Данные созданного поста или null
249
+ */
250
+ async createWallPost(username, text, imagePath = null) {
251
+ return await this.posts.createWallPost(username, text, imagePath);
252
+ }
253
+
242
254
  /**
243
255
  * Редактирует пост (удобный метод)
244
256
  *
package/src/posts.js CHANGED
@@ -69,6 +69,71 @@ export class PostsManager {
69
69
  }
70
70
  }
71
71
 
72
+ /**
73
+ * Создает пост на стене другого пользователя (wall post)
74
+ *
75
+ * @param {string} username - Имя пользователя, на чью стену нужно написать
76
+ * @param {string} text - Текст поста
77
+ * @param {string|null} imagePath - Путь к изображению (опционально)
78
+ * @returns {Promise<Object|null>} Данные созданного поста или null при ошибке
79
+ */
80
+ async createWallPost(username, text, imagePath = null) {
81
+ if (!await this.client.auth.checkAuth()) {
82
+ console.error('Ошибка: необходимо войти в аккаунт');
83
+ return null;
84
+ }
85
+
86
+ try {
87
+ // Получаем профиль пользователя, чтобы получить его ID
88
+ const profile = await this.client.users.getUserProfile(username);
89
+ if (!profile || !profile.id) {
90
+ console.error(`Ошибка: не удалось получить профиль пользователя ${username}`);
91
+ return null;
92
+ }
93
+
94
+ const wallRecipientId = profile.id;
95
+
96
+ // Реальный URL из анализа
97
+ const postUrl = `${this.client.baseUrl}/api/posts`;
98
+
99
+ // Подготовка данных с wallRecipientId
100
+ let postData = {
101
+ content: text,
102
+ wallRecipientId: wallRecipientId, // ID получателя поста на стене
103
+ };
104
+
105
+ // Если есть изображение
106
+ if (imagePath) {
107
+ // Сначала загружаем файл через /api/files/upload
108
+ const uploadedFile = await this.client.files.uploadFile(imagePath);
109
+ if (!uploadedFile) {
110
+ console.error('Ошибка: не удалось загрузить изображение');
111
+ return null;
112
+ }
113
+
114
+ // Затем создаем пост с ID загруженного файла
115
+ postData.attachments = [uploadedFile.id];
116
+ }
117
+
118
+ // Создаем пост на стене
119
+ const response = await this.axios.post(postUrl, postData);
120
+
121
+ if (response.status === 200 || response.status === 201) {
122
+ return response.data;
123
+ } else {
124
+ console.error(`Ошибка создания поста на стене: ${response.status} - ${JSON.stringify(response.data)}`);
125
+ return null;
126
+ }
127
+ } catch (error) {
128
+ console.error('Исключение при создании поста на стене:', error.message);
129
+ if (error.response) {
130
+ console.error('Response status:', error.response.status);
131
+ console.error('Response data:', error.response.data);
132
+ }
133
+ return null;
134
+ }
135
+ }
136
+
72
137
  /**
73
138
  * Получает список постов пользователя или ленту
74
139
  *