Skip to content

Add message reactions, and thread/message create+update endpoints - #1

Merged
stromcom merged 5 commits into
masterfrom
feature/reactions-and-write-endpoints
Oct 16, 2026
Merged

stromcom merged 5 commits into
masterfrom
feature/reactions-and-write-endpoints

Conversation

@stromcom

Copy link
Copy Markdown
Owner

Summary

Audit of htdocs/route/route.api.customer.v1.php in the main repo against this SDK's resources found it only covered reads: no way to create a thread, update one, or send a message at all, and reactions (already live server-side) weren't wrapped either.

  • MessageResource::reactions() → GET /threads/{code}/messages/{hash}/reactions/ — new MessageReaction / MessageReactionUser models (hydrated from the real repository shape, not the slightly stale OpenAPI doc).
  • ThreadResource::create(array $payload) → POST /threads/ — upsert by code, optional initial message + attachments.
  • ThreadResource::update(string $code, array $changes) → PUT /threads/{code}/.
  • MessageResource::create(string $threadCode, array $payload) → POST /threads/{code}/messages/.

All new write methods follow the existing "arrays in, typed models out" convention (same as users()->create()).

This also moves CHANGELOG.md's [Unreleased] entries into [0.1.0] - 2026-07-17 — this package has never been tagged, so 0.1.0 is proposed as the first release version. Happy to adjust before tagging.

Test plan

  • composer test — 89 tests, 250 assertions, all green
  • vendor/bin/phpstan analyse (level 9) — no errors
  • composer cs (php-cs-fixer dry-run) — clean

stromcom added 2 commits July 17, 2026 12:05
Closes the gap between the SDK and the Customer API: reactions were
already live server-side but unwrapped, and thread/message creation had
no SDK surface at all (read-only until now).

- MessageResource::reactions() -> GET .../messages/{hash}/reactions/
  (MessageReaction, MessageReactionUser models)
- ThreadResource::create()     -> POST /threads/ (upsert by code,
  optional initial message + attachments)
- ThreadResource::update()     -> PUT /threads/{code}/
- MessageResource::create()    -> POST /threads/{code}/messages/

Prepares CHANGELOG.md for the first tagged release, 0.1.0.
… type

The OpenAPI spec lives at /docs/customer/openapi.json. The lastMessageHash cursor is inclusive and the API has no page size, so paginate_messages.php is rewritten as an incremental sync. README now documents that 402 plan limits and 403 ACTION_FORBIDDEN surface as ApiException, which API key type the SDK needs, and that response meta is not exposed.
stromcom and others added 3 commits October 16, 2026 19:14
Fix OpenAPI link, document cursor semantics, 402/403 errors and token type
Reject an empty HTTP method or URL in CurlHttpClient before calling cURL
(fixes PHPStan 2.3 curl_setopt_array non-empty-string check) and date the
first release in the changelog.
@stromcom
stromcom merged commit 2a8942b into master Oct 16, 2026
4 checks passed
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.

1 participant