Skip to content

✨ Добавить основу PHPMax SDK#71

Closed
murzein wants to merge 4 commits into
MaxApiTeam:mainfrom
varyagnord:main
Closed

✨ Добавить основу PHPMax SDK#71
murzein wants to merge 4 commits into
MaxApiTeam:mainfrom
varyagnord:main

Conversation

@murzein

@murzein murzein commented Jul 7, 2026

Copy link
Copy Markdown
  • Добавлен PHP 7.4+ Composer skeleton, PSR-4 namespace PHPMax и shared-hosting runtime с bounded lifecycle.
  • Перенесены ключевые слои: contracts/models, TCP/WebSocket protocol, auth/session, messages, chats, users/account, uploads, telemetry, proxy и release ZIP workflow.
  • Добавлены AGENTS/GEMINI, docs/phpmax, Justfile, GitHub Actions и guarded integration harness для token/SMS/session checks.
  • Покрыто lightweight test runner, contract manifest, PHP 7.4 compatibility scanner и release preflight.

Checks:

  • just pre-publish-check
  • rg secret/token scan reviewed; only code/test identifiers and fixtures found

Notes:

  • Composer is not installed locally, so composer validate was skipped by the project gate.

Описание

Кратко, что делает этот PR. Например, добавляет новый метод, исправляет баг, улучшает документацию.

Тип изменений

  • Исправление бага
  • Новая функциональность
  • Улучшение документации
  • Рефакторинг

Связанные задачи / Issue

Ссылка на issue, если есть: #

Тестирование

Покажите пример кода, который проверяет изменения:

import pymax

# пример использования нового функционала

- Добавлен PHP 7.4+ Composer skeleton, PSR-4 namespace PHPMax и shared-hosting runtime с bounded lifecycle.
- Перенесены ключевые слои: contracts/models, TCP/WebSocket protocol, auth/session, messages, chats, users/account, uploads, telemetry, proxy и release ZIP workflow.
- Добавлены AGENTS/GEMINI, docs/phpmax, Justfile, GitHub Actions и guarded integration harness для token/SMS/session checks.
- Покрыто lightweight test runner, contract manifest, PHP 7.4 compatibility scanner и release preflight.

Checks:
- just pre-publish-check
- rg secret/token scan reviewed; only code/test identifiers and fixtures found

Notes:
- Composer is not installed locally, so composer validate was skipped by the project gate.
@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 298 files, which is 148 over the limit of 150.

To get a review, narrow the scope:
• coderabbit review --type committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: a6845120-4818-4ad2-9488-6ae7aee38da8

📥 Commits

Reviewing files that changed from the base of the PR and between 8c40b71 and 071de00.

📒 Files selected for processing (298)
  • .github/pull_request_template.md
  • .github/workflows/publish.yml
  • .github/workflows/tests.yml
  • .mailmap
  • AGENTS.md
  • GEMINI.md
  • Justfile
  • README.md
  • composer.json
  • docs/phpmax/README.md
  • docs/phpmax/architecture.md
  • docs/phpmax/contracts.json
  • docs/phpmax/contracts.md
  • docs/phpmax/decision-log.md
  • docs/phpmax/documentation.md
  • docs/phpmax/implementation-status.md
  • docs/phpmax/release.md
  • docs/phpmax/roadmap.md
  • docs/phpmax/shared-hosting-runtime.md
  • docs/phpmax/testing.md
  • docs/phpmax/upstream-sync.md
  • phpstan.neon
  • phpunit.xml
  • src/PHPMax/Api/Account/AccountService.php
  • src/PHPMax/Api/Account/AvatarType.php
  • src/PHPMax/Api/Account/ChangeProfilePayload.php
  • src/PHPMax/Api/Account/CreateFolderPayload.php
  • src/PHPMax/Api/Account/DeleteFolderPayload.php
  • src/PHPMax/Api/Account/GetFolderPayload.php
  • src/PHPMax/Api/Account/SelfPayloadKey.php
  • src/PHPMax/Api/Account/UpdateFolderPayload.php
  • src/PHPMax/Api/Account/UploadPayload.php
  • src/PHPMax/Api/ApiFacade.php
  • src/PHPMax/Api/Auth/ApproveQrLoginPayload.php
  • src/PHPMax/Api/Auth/AuthService.php
  • src/PHPMax/Api/Auth/AuthType.php
  • src/PHPMax/Api/Auth/CheckPasswordChallengePayload.php
  • src/PHPMax/Api/Auth/CheckQrPayload.php
  • src/PHPMax/Api/Auth/ConfirmQrPayload.php
  • src/PHPMax/Api/Auth/ConfirmRegistrationPayload.php
  • src/PHPMax/Api/Auth/CreateAuthTrackPayload.php
  • src/PHPMax/Api/Auth/Exp.php
  • src/PHPMax/Api/Auth/ProfileOptions.php
  • src/PHPMax/Api/Auth/RemoveTwoFactorPayload.php
  • src/PHPMax/Api/Auth/RequestCodePayload.php
  • src/PHPMax/Api/Auth/RequestEmailCodePayload.php
  • src/PHPMax/Api/Auth/SendCodePayload.php
  • src/PHPMax/Api/Auth/SendEmailCodePayload.php
  • src/PHPMax/Api/Auth/SetHintPayload.php
  • src/PHPMax/Api/Auth/SetPasswordPayload.php
  • src/PHPMax/Api/Auth/SetTwoFactorPayload.php
  • src/PHPMax/Api/Auth/SyncPayload.php
  • src/PHPMax/Api/Auth/TwoFactorAction.php
  • src/PHPMax/Api/Auth/WebSyncPayload.php
  • src/PHPMax/Api/Binding.php
  • src/PHPMax/Api/Bots/BotsService.php
  • src/PHPMax/Api/Bots/RequestInitDataPayload.php
  • src/PHPMax/Api/Chats/ChangeGroupProfilePayload.php
  • src/PHPMax/Api/Chats/ChangeGroupSettingsOptions.php
  • src/PHPMax/Api/Chats/ChangeGroupSettingsPayload.php
  • src/PHPMax/Api/Chats/ChatLinkPrefix.php
  • src/PHPMax/Api/Chats/ChatMemberOperation.php
  • src/PHPMax/Api/Chats/ChatOption.php
  • src/PHPMax/Api/Chats/ChatPayloadKey.php
  • src/PHPMax/Api/Chats/ChatService.php
  • src/PHPMax/Api/Chats/ControlEvent.php
  • src/PHPMax/Api/Chats/CreateGroupAttach.php
  • src/PHPMax/Api/Chats/CreateGroupMessage.php
  • src/PHPMax/Api/Chats/CreateGroupPayload.php
  • src/PHPMax/Api/Chats/DeleteChatPayload.php
  • src/PHPMax/Api/Chats/FetchChatsPayload.php
  • src/PHPMax/Api/Chats/FetchJoinRequests.php
  • src/PHPMax/Api/Chats/GetChatInfoPayload.php
  • src/PHPMax/Api/Chats/InviteUsersPayload.php
  • src/PHPMax/Api/Chats/JoinChatPayload.php
  • src/PHPMax/Api/Chats/JoinRequestActionPayload.php
  • src/PHPMax/Api/Chats/LeaveChatPayload.php
  • src/PHPMax/Api/Chats/LinkInfoPayload.php
  • src/PHPMax/Api/Chats/RemoveUsersPayload.php
  • src/PHPMax/Api/Chats/ReworkInviteLinkPayload.php
  • src/PHPMax/Api/Messages/AddReactionPayload.php
  • src/PHPMax/Api/Messages/ChatHistoryPayload.php
  • src/PHPMax/Api/Messages/DeleteMessagePayload.php
  • src/PHPMax/Api/Messages/EditMessagePayload.php
  • src/PHPMax/Api/Messages/ForwardLink.php
  • src/PHPMax/Api/Messages/ForwardMessagePayload.php
  • src/PHPMax/Api/Messages/ForwardMessagePayloadMessage.php
  • src/PHPMax/Api/Messages/GetFilePayload.php
  • src/PHPMax/Api/Messages/GetMessagesPayload.php
  • src/PHPMax/Api/Messages/GetReactionsPayload.php
  • src/PHPMax/Api/Messages/GetVideoPayload.php
  • src/PHPMax/Api/Messages/ItemType.php
  • src/PHPMax/Api/Messages/MessagePayloadKey.php
  • src/PHPMax/Api/Messages/MessageService.php
  • src/PHPMax/Api/Messages/PinMessagePayload.php
  • src/PHPMax/Api/Messages/ReactionInfoPayload.php
  • src/PHPMax/Api/Messages/ReadAction.php
  • src/PHPMax/Api/Messages/ReadMessagesPayload.php
  • src/PHPMax/Api/Messages/RemoveReactionPayload.php
  • src/PHPMax/Api/Messages/ReplyLink.php
  • src/PHPMax/Api/Messages/SendMessagePayload.php
  • src/PHPMax/Api/Messages/SendMessagePayloadMessage.php
  • src/PHPMax/Api/Session/DeviceType.php
  • src/PHPMax/Api/Session/MobileHandshakePayload.php
  • src/PHPMax/Api/Session/MobileUserAgentPayload.php
  • src/PHPMax/Api/Session/SessionService.php
  • src/PHPMax/Api/Session/WebHandshakePayload.php
  • src/PHPMax/Api/Telemetry/NavigationPlanner.php
  • src/PHPMax/Api/Telemetry/NavigationRules.php
  • src/PHPMax/Api/Telemetry/RouteProfile.php
  • src/PHPMax/Api/Telemetry/Screen.php
  • src/PHPMax/Api/Telemetry/ScreenTransition.php
  • src/PHPMax/Api/Telemetry/TelemetryEvent.php
  • src/PHPMax/Api/Telemetry/TelemetryPayload.php
  • src/PHPMax/Api/Telemetry/TelemetryPayloadBuilder.php
  • src/PHPMax/Api/Telemetry/TelemetryService.php
  • src/PHPMax/Api/Uploads/AttachFilePayload.php
  • src/PHPMax/Api/Uploads/AttachPhotoPayload.php
  • src/PHPMax/Api/Uploads/FilePayloadResponse.php
  • src/PHPMax/Api/Uploads/FileUploadResponse.php
  • src/PHPMax/Api/Uploads/HttpUploadResponse.php
  • src/PHPMax/Api/Uploads/HttpUploaderInterface.php
  • src/PHPMax/Api/Uploads/NativeHttpUploader.php
  • src/PHPMax/Api/Uploads/PhotoPayloadResponse.php
  • src/PHPMax/Api/Uploads/PhotoUploadResponse.php
  • src/PHPMax/Api/Uploads/StreamBody.php
  • src/PHPMax/Api/Uploads/UploadPayload.php
  • src/PHPMax/Api/Uploads/UploadService.php
  • src/PHPMax/Api/Uploads/VideoAttachPayload.php
  • src/PHPMax/Api/Uploads/VideoPayloadResponse.php
  • src/PHPMax/Api/Uploads/VideoUploadResponse.php
  • src/PHPMax/Api/Users/ContactAction.php
  • src/PHPMax/Api/Users/ContactActionPayload.php
  • src/PHPMax/Api/Users/ContactPayload.php
  • src/PHPMax/Api/Users/FetchContactsPayload.php
  • src/PHPMax/Api/Users/ImportContactsPayload.php
  • src/PHPMax/Api/Users/SearchByPhonePayload.php
  • src/PHPMax/Api/Users/UserPayloadKey.php
  • src/PHPMax/Api/Users/UserService.php
  • src/PHPMax/Auth/AuthFlowInterface.php
  • src/PHPMax/Auth/AuthResult.php
  • src/PHPMax/Auth/ConsoleEmailCodeProvider.php
  • src/PHPMax/Auth/ConsolePasswordProvider.php
  • src/PHPMax/Auth/ConsoleQrHandler.php
  • src/PHPMax/Auth/ConsoleSmsCodeProvider.php
  • src/PHPMax/Auth/EmailCodeProviderInterface.php
  • src/PHPMax/Auth/PasswordProviderInterface.php
  • src/PHPMax/Auth/QrAuthFlow.php
  • src/PHPMax/Auth/QrHandlerInterface.php
  • src/PHPMax/Auth/SmsAuthFlow.php
  • src/PHPMax/Auth/SmsCodeProviderInterface.php
  • src/PHPMax/Client.php
  • src/PHPMax/Config/ClientOptions.php
  • src/PHPMax/Dispatch/ErrorContext.php
  • src/PHPMax/Dispatch/ErrorScope.php
  • src/PHPMax/Dispatch/EventMapper.php
  • src/PHPMax/Dispatch/EventResolver.php
  • src/PHPMax/Dispatch/EventType.php
  • src/PHPMax/Dispatch/Router.php
  • src/PHPMax/Domain/AccessType.php
  • src/PHPMax/Domain/AttachmentType.php
  • src/PHPMax/Domain/Attachments/AttachmentFactory.php
  • src/PHPMax/Domain/Attachments/AudioAttachment.php
  • src/PHPMax/Domain/Attachments/BaseAttachment.php
  • src/PHPMax/Domain/Attachments/CallAttachment.php
  • src/PHPMax/Domain/Attachments/ContactAttachment.php
  • src/PHPMax/Domain/Attachments/ControlAttachment.php
  • src/PHPMax/Domain/Attachments/FileAttachment.php
  • src/PHPMax/Domain/Attachments/InlineKeyboardAttachment.php
  • src/PHPMax/Domain/Attachments/PhotoAttachment.php
  • src/PHPMax/Domain/Attachments/ShareAttachment.php
  • src/PHPMax/Domain/Attachments/StickerAttachment.php
  • src/PHPMax/Domain/Attachments/UnknownAttachment.php
  • src/PHPMax/Domain/Attachments/VideoAttachment.php
  • src/PHPMax/Domain/Auth/CheckCodeResponse.php
  • src/PHPMax/Domain/Auth/CheckPasswordResponse.php
  • src/PHPMax/Domain/Auth/CheckQrResponse.php
  • src/PHPMax/Domain/Auth/ConfirmRegistrationResponse.php
  • src/PHPMax/Domain/Auth/PasswordChallenge.php
  • src/PHPMax/Domain/Auth/QrStatus.php
  • src/PHPMax/Domain/Auth/RequestQrResponse.php
  • src/PHPMax/Domain/Auth/StartAuthResponse.php
  • src/PHPMax/Domain/Auth/Token.php
  • src/PHPMax/Domain/Auth/TokenAttrs.php
  • src/PHPMax/Domain/Chat.php
  • src/PHPMax/Domain/ChatType.php
  • src/PHPMax/Domain/ContactInfo.php
  • src/PHPMax/Domain/Element.php
  • src/PHPMax/Domain/ElementAttributes.php
  • src/PHPMax/Domain/Events/FileUploadSignal.php
  • src/PHPMax/Domain/Events/MessageDeleteEvent.php
  • src/PHPMax/Domain/Events/MessageReadEvent.php
  • src/PHPMax/Domain/Events/PresenceEvent.php
  • src/PHPMax/Domain/Events/ReactionUpdateEvent.php
  • src/PHPMax/Domain/Events/TypingEvent.php
  • src/PHPMax/Domain/Events/VideoUploadSignal.php
  • src/PHPMax/Domain/FileRequest.php
  • src/PHPMax/Domain/Folder.php
  • src/PHPMax/Domain/FolderList.php
  • src/PHPMax/Domain/FolderUpdate.php
  • src/PHPMax/Domain/InitData.php
  • src/PHPMax/Domain/LoginConfig.php
  • src/PHPMax/Domain/LoginResponse.php
  • src/PHPMax/Domain/MaxApiError.php
  • src/PHPMax/Domain/Member.php
  • src/PHPMax/Domain/Message.php
  • src/PHPMax/Domain/MessageStatus.php
  • src/PHPMax/Domain/Name.php
  • src/PHPMax/Domain/Presence.php
  • src/PHPMax/Domain/Profile.php
  • src/PHPMax/Domain/ReactionCounter.php
  • src/PHPMax/Domain/ReactionInfo.php
  • src/PHPMax/Domain/ReadState.php
  • src/PHPMax/Domain/Session.php
  • src/PHPMax/Domain/SyncOverrides.php
  • src/PHPMax/Domain/SyncState.php
  • src/PHPMax/Domain/TranscriptionStatus.php
  • src/PHPMax/Domain/User.php
  • src/PHPMax/Domain/VideoRequest.php
  • src/PHPMax/Exception/ApiException.php
  • src/PHPMax/Exception/PHPMaxException.php
  • src/PHPMax/Exception/ProtocolException.php
  • src/PHPMax/Exception/UploadException.php
  • src/PHPMax/Exception/ValidationException.php
  • src/PHPMax/Files/BaseFile.php
  • src/PHPMax/Files/File.php
  • src/PHPMax/Files/Photo.php
  • src/PHPMax/Files/Video.php
  • src/PHPMax/Formatting/Formatter.php
  • src/PHPMax/Protocol/Command.php
  • src/PHPMax/Protocol/FrameProtocolInterface.php
  • src/PHPMax/Protocol/InboundFrame.php
  • src/PHPMax/Protocol/Opcode.php
  • src/PHPMax/Protocol/OutboundFrame.php
  • src/PHPMax/Protocol/Tcp/BinaryString.php
  • src/PHPMax/Protocol/Tcp/Lz4BlockCompression.php
  • src/PHPMax/Protocol/Tcp/MsgpackPayloadCodec.php
  • src/PHPMax/Protocol/Tcp/PackedPacket.php
  • src/PHPMax/Protocol/Tcp/TcpPacketFramer.php
  • src/PHPMax/Protocol/Tcp/TcpPacketHeader.php
  • src/PHPMax/Protocol/Tcp/TcpPayloadDecoder.php
  • src/PHPMax/Protocol/Tcp/TcpProtocol.php
  • src/PHPMax/Protocol/Tcp/ZstdCompression.php
  • src/PHPMax/Protocol/Ws/WsProtocol.php
  • src/PHPMax/Runtime/App.php
  • src/PHPMax/Runtime/ConnectionManager.php
  • src/PHPMax/Runtime/ExecutionBudget.php
  • src/PHPMax/Runtime/FrameReaderInterface.php
  • src/PHPMax/Runtime/TcpFrameReader.php
  • src/PHPMax/Runtime/WebSocketFrameReader.php
  • src/PHPMax/Session/JsonFileSessionStore.php
  • src/PHPMax/Session/SQLiteSessionStore.php
  • src/PHPMax/Session/SessionInfo.php
  • src/PHPMax/Session/SessionStoreInterface.php
  • src/PHPMax/Support/Model.php
  • src/PHPMax/Transport/MessageTransportInterface.php
  • src/PHPMax/Transport/ProxyConfig.php
  • src/PHPMax/Transport/ProxyConnector.php
  • src/PHPMax/Transport/TcpTransport.php
  • src/PHPMax/Transport/TransportInterface.php
  • src/PHPMax/Transport/WebSocketTransport.php
  • src/PHPMax/WebClient.php
  • tests-php/Account/AccountServiceTest.php
  • tests-php/Auth/AuthServiceTest.php
  • tests-php/Bots/BotsServiceTest.php
  • tests-php/Chats/ChatServiceTest.php
  • tests-php/Client/ClientLifecycleTest.php
  • tests-php/Contracts/ContractManifestTest.php
  • tests-php/Dispatch/ErrorScopeTest.php
  • tests-php/Dispatch/EventDispatchTest.php
  • tests-php/Domain/DomainBindingTest.php
  • tests-php/Files/BaseFileUrlTest.php
  • tests-php/Formatting/FormatterParityTest.php
  • tests-php/Messages/MessageServiceTest.php
  • tests-php/Protocol/BinaryPayloadTest.php
  • tests-php/Protocol/TcpProtocolTest.php
  • tests-php/Protocol/WsProtocolTest.php
  • tests-php/Runtime/ConnectionManagerTest.php
  • tests-php/Support/ContractManifestTest.php
  • tests-php/Support/IntegrationCheckTest.php
  • tests-php/Support/Php74CompatCheckTest.php
  • tests-php/Support/ReleaseBuildTest.php
  • tests-php/Telemetry/TelemetryServiceTest.php
  • tests-php/Transport/ProxyConfigTest.php
  • tests-php/Transport/ProxyConnectorTest.php
  • tests-php/Transport/WebSocketTransportTest.php
  • tests-php/Unit/ModelHydrationTest.php
  • tests-php/Unit/SessionStoreTest.php
  • tests-php/Unit/UserAgentPayloadTest.php
  • tests-php/Uploads/NativeHttpUploaderTest.php
  • tests-php/Uploads/UploadServiceTest.php
  • tests-php/Users/UserServiceTest.php
  • tests-php/bootstrap.php
  • tools/build-release.php
  • tools/contract-manifest.php
  • tools/integration-check.php
  • tools/php74-compat-check.php
  • tools/run-php-tests.php

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Varyag Nord and others added 3 commits July 7, 2026 20:28
- Preserve exp.chatsCountGroups as a MessagePack binary value via BinaryString and fallback encoder support.
- Harden login/event hydration for false string fields, malformed optional photo metadata and numeric reaction message ids.
- Add safe runFor diagnostics through ClientOptions::debugLogger and clearer TCP read timeout errors.
- Keep contract manifest checks tied to the PyMax reference commit and wire binary payload coverage into the PHP runner.

Checks:
- DOCS_REVIEWED=1 just doctor
- DOCS_REVIEWED=1 just pre-publish-check

Co-authored-by: Maksim Mazein <148742019+murzein@users.noreply.github.com>
- Empty attribution commit so GitHub Contributors can count murzein as a git author.
- Previous implementation commit remains unchanged and keeps its Co-authored-by trailer.

Checks:
- git status --short --branch
- Add a repository mailmap for GitHub no-reply contributor identities.
- Map the previous local Varyag email to the GitHub-recognized account email.

Checks:
- git check-mailmap 'Varyag Nord <varyagnord@example.com>' 'Maksim Mazein <148742019+murzein@users.noreply.github.com>'
@ink-developer

Copy link
Copy Markdown
Collaborator

PyMax - это исключительно про питон
Если вы заинтересованы, можно написать мне в лс (контакты в профиле) и мы можем договориться о добавлении нового репозитория в организацию, но никак не сюда

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants