Skip to content

v0.2.0

Choose a tag to compare

@jerbersoft jerbersoft released this 09 Sep 18:01

The first version published to nuget.org. The 0.1/0.2 numbering follows the project's own
milestones rather than a release history: everything below has been in the repository for some
time, and 0.2.0 is the first version anyone can dotnet add package.

Added

  • MassiveDotNet.Rest — 60 of the platform's 147 REST operations, generated from Massive's
    OpenAPI description: 21 under Stocks (aggregates, trades, quotes, snapshots, indicators) and 39
    under Reference (tickers, news, corporate actions, financials, SEC filings, exchanges and
    conditions). Options, crypto, forex, futures, indices and the vendor datasets are not in this
    release. Coverage is contract-tested and cannot regress: an endpoint may be added, never removed,
    except when Massive retires the route from the description itself.
    • Paginated endpoints get ListXxxAsync (one page) and EnumerateXxxAsync
      (IAsyncEnumerable<T>, every page, one in flight at a time, retaining no memory proportional to
      the pages traversed).
    • Comparator parameters collapse to one filter-typed argument per field — RangeFilter<T>,
      SetFilter<T>, Filter<T>, ArrayFilter<T> — chosen from the suffix set the description
      declares, so an unsupported comparator is a compile error rather than a silently dropped query
      string. This replaced 1,182 flat parameters, one endpoint of which had a 114-argument method.
    • Cursors are followed verbatim, and only when next_url names the same origin as the configured
      BaseAddress. A mismatch throws rather than sending the caller's key to a host the response
      body chose.
  • MassiveDotNet.WebSocket — six stock topics (trades, NBBO quotes, second and minute
    aggregates, net order imbalances, limit up-limit down) over a persistent connection, with backoff
    reconnect and subscription replay.
    • Topics are a typed enum. The server silently drops an unrecognised topic code, so every
      subscribe is acknowledgement-counted and throws when the server accepted fewer pairs than were
      asked for.
    • Each topic owns a bounded buffer that drops the oldest event and counts it exactly, so a slow
      consumer never stalls the read loop shared by every other topic.
  • MassiveDotNet.Extensions.DependencyInjection — AddMassive, wiring the client through
    IHttpClientFactory. The only package permitted to reference Microsoft.Extensions.*.
  • MassiveDotNet — the core the three share: transport, both authentication schemes,
    exceptions, and the allocation-conscious serialization helpers.
  • Opt-in rate limiting and retry, both off unless configured, composed auth outermost then retry
    then the limiter. The ordering is load-bearing: a retry handler placed outside authentication
    appends the API key once per attempt under the query-string scheme.
  • Native AOT support across all four packages, verified by a publish that must emit zero IL
    warnings and by running the resulting native binary.

Notes for consumers

  • net10.0 only. No multi-targeting.
  • NodaTime is the temporal vocabulary. Instant, LocalDate, Duration and ZonedDateTime
    rather than DateTime, because a bar window, a tick timestamp and an ex-dividend date are three
    different things that DateTime collapses into one. This is the single largest adjustment for a
    caller coming from another SDK.
  • AddMassive has no IConfiguration overload, deliberately. MassiveClientOptions.Timeout is
    a Duration, which the configuration binder cannot convert — and it fails silently, binding clean
    and leaving the default in place. Read the values yourself:
    options.ApiKey = configuration["Massive:ApiKey"].
  • The DI package's Microsoft.Extensions.* dependencies are published as minimum-version ranges at
    10.0.0, as every NuGet dependency is, so a consumer on a lower version is floated upward.
  • Some operations that the description declares are not served by the API and answer 404. They
    ship as declared, with the status and the date observed pinned in a test, because the description
    is the contract for what ships.

Published to nuget.org by publish.yml
through OIDC Trusted Publishing. The repository holds no long-lived credential.