Skip to content

feat: sync .NET client with Apify OpenAPI spec v2-2026-10-19T133704Z - #17

Closed
Pijukatel wants to merge 3 commits into
masterfrom
sync-2026-10-19-spec
Closed

Pijukatel wants to merge 3 commits into
masterfrom
sync-2026-10-19-spec

Conversation

@Pijukatel

Copy link
Copy Markdown
Collaborator

Syncs to OpenAPI spec v2-2026-10-19T133704Z (apify-docs#3087) and to apify-client-js changes merged since the last sync (apify-client-js#1140, #1145, #1139, #1141, #1152, #1142, #1144).

apify-docs#3087's request-schema changes (CreateActorRequest gains actorPermissionLevel; CreateOrUpdateVersionRequest splits into CreateVersionRequest/UpdateVersionRequest; EnvVarRequest becomes standalone; ScheduleNotifications is extracted) needed no code change: every mutating call in this client already accepts an arbitrary JSON-serializable object, so the API already accepts every field these schema changes describe.

Changes:

  • Added ApifyClientException, a common base ApifyApiException/ApifyTransportException now extend, so catch (ApifyClientException) catches every error this client raises for a failed call (apify-client-js#1145).
  • Added SetRecordOptions.ContentEncoding for uploading an already-compressed key-value-store record: sent verbatim as the Content-Encoding header, skipping the client's own compression (apify-client-js#1140).
  • Added DatasetClient.StreamItemsAsync for streaming a dataset item export instead of buffering it into a byte[] (apify-client-js#1139/#1152).
  • Added LogClient.GetBytesAsync for fetching a log as raw bytes instead of a decoded string (apify-client-js#1141).
  • Added KeyValueStoreClient.IterateKeysAsync (+ IterateKeysOptions), an auto-paging iterator over a store's keys with a per-page MaxPageLimit, matching the reference client's chunked listKeys() iteration (apify-client-js#1142). Limit = 0 yields no keys without issuing any request, since the API itself reads a literal limit=0 as unbounded rather than zero; MaxPageLimit must be positive for the same reason.
  • apify-client-js#1144 (pricingInfos/exampleRunInput on ActorUpdateOptions) needed no code change — ActorClient.UpdateAsync(object) already passes any fields through.

Bumped ApifyClientVersion.ApiSpecVersion to v2-2026-10-19T133704Z and the project version to 0.6.0. Updated docs/README.md, docs/storages.md, docs/misc.md, and CHANGELOG.md.

Verification: dotnet format --verify-no-changes clean, dotnet build -c Release 0 warnings/0 errors, dotnet test --filter Category=Unit 191/191 passing, dotnet test --filter "Category=Integration|Category=Examples" 67/67 passing against the live API.

Reviewed through three rounds by /review-client (dev-diary notes kept in the orchestration repo's working copy, archived separately); all open items were fixed and verified, final verdict Reviewer: Approved.


Generated by Claude Code

…and apify-client-js changes

Syncs to OpenAPI spec v2-2026-10-19T133704Z (apify-docs#3087 request-schema changes needed no code
change: every mutating call already takes an arbitrary JSON-serializable object) and to
apify-client-js#1140, #1145, #1139, #1141, #1152:

- Added ApifyClientException, a common base ApifyApiException/ApifyTransportException now extend, so
  catch (ApifyClientException) catches every client-raised error.
- Added SetRecordOptions.ContentEncoding for uploading already-compressed key-value-store records.
- Added DatasetClient.StreamItemsAsync for streaming a dataset item export instead of buffering it.
- Added LogClient.GetBytesAsync for fetching a log as raw bytes instead of a decoded string.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G3FfQf9r45KVCa5VAYAjkd
… as checked

Round 2 fix for the review's two open items:
- apify-client-js#1142 (chunkSize on listKeys()/listRequests() iterators): the request-queue side was
  already covered by the existing PaginateRequestsAsync/MaxPageLimit. Adds the missing key-value-store
  side: KeyValueStoreClient.IterateKeysAsync, an auto-paging iterator over a store's keys with a new
  IterateKeysOptions (Limit across pages, MaxPageLimit per page - never sent to the API, matching
  chunkSize - ExclusiveStartKey, Collection, Prefix).
- apify-client-js#1144 (pricingInfos/exampleRunInput on ActorUpdateOptions): recorded as checked, no
  code change needed (ActorClient.UpdateAsync(object) already passes any fields through).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G3FfQf9r45KVCa5VAYAjkd
Round 3 fix for the review's open item: the API reads limit=0 as unbounded, not zero, so Limit=0 (or an
already-exhausted total) now short-circuits before building any request instead of sending 0 and
yielding whatever the API returns regardless. MaxPageLimit must now be positive for the same reason (a
literal 0 would hit the same API quirk).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01G3FfQf9r45KVCa5VAYAjkd
@apify-service-account apify-service-account added the tested Temporary label used only programatically for some analytics. label Oct 19, 2026
@apify-service-account apify-service-account added the t-tooling Issues with this label are in the ownership of the tooling team. label Oct 19, 2026

Copy link
Copy Markdown
Collaborator Author

Superseded by #18, which carries the same commits plus two IterateKeysAsync fixes from a later review round, on the routine's designated branch. Closing this one.


Generated by Claude Code

@Pijukatel Pijukatel closed this Oct 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

t-tooling Issues with this label are in the ownership of the tooling team. tested Temporary label used only programatically for some analytics.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants