randomayzer/docs/VK_CLIENT.md

3.4 KiB

VK Client Architecture & Official API Specification

The VK Integration layer is structured into decoupled components located under src/integrations/vk/.


Architecture Overview

[SocialMediaProvider Interface]
               │
               ▼
        [VkProvider]
               │
               ▼
          [VkClient]
      ┌────────┼────────┐
      │        │        │
      ▼        ▼        ▼
 [VkAuth] [VkRateLimit] [VkRetry]
      │        │        │
      └────────┼────────┘
               │ (POST https://api.vk.com/method/*)
               ▼
           [VK API]

Verified VK API Specifications (v5.199)

1. wall.getById

  • Official Docs: https://dev.vk.com/ru/method/wall.getById
  • Method: POST/GET https://api.vk.com/method/wall.getById
  • Parameters: posts (e.g. "-100_12345"), extended=1.
  • Response: { items: VkWallPost[], profiles?: VkUserProfile[], groups?: VkGroupProfile[] }.
  • Behavior: Returns empty items: [] or error 210 if post is deleted or wall is private.

2. likes.getList

  • Official Docs: https://dev.vk.com/ru/method/likes.getList
  • Method: POST/GET https://api.vk.com/method/likes.getList
  • Parameters: type="post", owner_id, item_id, filter="likes", extended=1, count (max 100), offset.
  • Response: { count: number, items: VkUserProfile[] }.

3. wall.getComments

  • Official Docs: https://dev.vk.com/ru/method/wall.getComments
  • Method: POST/GET https://api.vk.com/method/wall.getComments
  • Parameters: owner_id, post_id, extended=1, count (max 100), offset, fields="photo_100,photo_200,screen_name".
  • Response: { count: number, items: VkCommentItem[], profiles?: VkUserProfile[] }.

4. groups.isMember

  • Official Docs: https://dev.vk.com/ru/method/groups.isMember
  • Method: POST/GET https://api.vk.com/method/groups.isMember
  • Parameters: group_id, user_ids (comma-separated list of IDs up to 500 max per batch call).
  • Response: Array<{ user_id: number, member: 1 | 0 }>.

5. Reposts Limitation [CONFIRMED_LIMITATION]

  • Official Status: VK API does not provide a public method to list all users who reposted an arbitrary third-party post due to user privacy settings. wall.getReposts only works for community managers on their own wall posts.
  • Provider Flag: capabilities.reposts = false.

6. Admin Detection [UNVERIFIED]

  • Official Status: Checking if a user is an administrator of a target community requires groups.getMembers with filter=managers, which requires community admin rights.
  • Provider Flag: capabilities.adminDetection = false.

Cancellation vs Timeout Lifecycle

Failure Mode Error Class Retryable? Behavior
Caller AbortSignal fires VkCancelledError No Request aborted immediately; retry engine halts without retry.
Client timeout timer expires VkTimeoutError Yes Attempt aborted; backoff delay computed and retry initiated up to maxRetries.
HTTP 429 Too Many Requests VkRateLimitError Yes Retryable with backoff.
HTTP 500..504 Server Error VkTemporaryError Yes Retryable with backoff.
HTTP 400/401/403/404 VkClientError subclasses No Fast fail.