Skip to content

feat!: sync .NET client with Apify OpenAPI spec v2-2026-10-20T121847Z and validate responses against the spec - #19

Merged
Pijukatel merged 8 commits into
masterfrom
claude/compassionate-babbage-dgvy9d
Oct 23, 2026
Merged

Pijukatel merged 8 commits into
masterfrom
claude/compassionate-babbage-dgvy9d

Conversation

@Pijukatel

Copy link
Copy Markdown
Collaborator

Summary

Syncs the .NET client to OpenAPI spec v2-2026-10-20T121847Z (apify/apify-docs#3090, #3091, #3092, #3093, #3096) and reviews apify/apify-client-js#1143, #1146, #1164 and #1167. It also checks the compromised intermediate CA certificates incident. Client version goes to 0.7.0.

  • Spec sync:
    • RunChargeOptions.RequestId is sent as requestId in the charge body.
    • FLAT_PRICE_PER_MONTH is documented as no longer supported.
    • The new nullable fields and error types need no change.
  • Response validation: successful responses are now checked against the schemas the spec declares for each operation. Unknown fields and enum values still pass. The schemas are embedded and regenerated with tools/generate_response_schemas.py.
    • The check covers required properties, JSON types, nullability, and date-time, uri, pattern and min/max constraints.
    • A failure throws the new ResponseValidationException, which lists the problems in Issues.
    • The new InvalidResponseBodyException carries the status, method, path and body.
  • Iteration (behaviour changes):
    • New RunClient.IterateDatasetItemsAsync, and ChunkSize is now an option on the iterators.
    • Store Limit now caps the total number of Actors yielded, and paging follows the API's scanned-row count.
    • Dataset Limit now caps rows read, so with filters or Unwind it can yield fewer items than before.
    • Limit = 0 means unbounded, and a negative Offset or Limit now throws.
  • Timeouts: a run's or build's WithTimeout now also applies to its storage and log sub-clients.
  • Tests and CI:
    • Webhook integration tests use the public apify/hello-world Actor ID, because the API now rejects made-up run IDs.
    • New live and unit tests cover the changes.
    • A new test compiles every C# snippet in the README and docs/.
    • The CA1711 suppression is narrowed to the Queue suffix.
  • CA incident: no change needed. The client has no TLS stack or bundled trust store and uses the OS store. dotnet list package --vulnerable --include-transitive reports nothing.

Known API limitation: the Store's sort order is not stable between requests. So iterating with a large Limit can return duplicate Actors.

All 368 tests pass locally, including live integration and example tests.


Generated by Claude Code

Add RunChargeOptions.RequestId, document rental pricing removal, and fix
webhook integration tests to use an owned Actor as the condition.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUMWnU4gH573HweHieMhHi
…un dataset iteration, tests, docs)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUMWnU4gH573HweHieMhHi
… iteration fixes, doc snippet compile check)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUMWnU4gH573HweHieMhHi
… iteration with the reference, add timeout tests

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUMWnU4gH573HweHieMhHi
…eat limit 0 as unbounded

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUMWnU4gH573HweHieMhHi
…imit, relax email validation

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUMWnU4gH573HweHieMhHi
…ondense changelog

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUMWnU4gH573HweHieMhHi
…ct changelog

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UUMWnU4gH573HweHieMhHi
@Pijukatel Pijukatel added adhoc Ad-hoc unplanned task added during the sprint. t-tooling Issues with this label are in the ownership of the tooling team. labels Oct 21, 2026 — with Claude
@apify-service-account apify-service-account added the tested Temporary label used only programatically for some analytics. label Oct 21, 2026
@Pijukatel
Pijukatel merged commit 8297666 into master Oct 23, 2026
2 of 5 checks passed
@Pijukatel
Pijukatel deleted the claude/compassionate-babbage-dgvy9d branch October 23, 2026 07:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

adhoc Ad-hoc unplanned task added during the sprint. 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