Repository navigation
Releases: prdb-net/prdb-sdk
Release list
SDKs 0.24.0: stable Actor and Site public IDs
Added
- Stable Actor and Site public IDs. Actor and Site list/detail models,
nested Video Actor/Site models, favourites, ignored sites and their change
payloads exposepublicId. Video summaries exposesitePublicIdalongside
siteId. Actor IDs useAfollowed by at least eight decimal digits (for
example,A00000043); Site IDs useSfollowed by at least six (for example,
S000002). Larger numbers grow without truncation. These are strings; retain
their prefix and leading zeroes. - Actor and Site list
searchparameters accept exact public IDs. Retained
merged Actor IDs resolve to the active canonical Actor. Existing Actor/Site
rows are stamped by the migration so their IDs reach change-feed consumers.
Compatibility notes
- Existing GUID identities, routes, request bodies and status codes remain
unchanged. Public IDs supplement the GUIDs. SiteChangeSiteDto.publicIdis required but nullable: a Site deleted before
numbering was introduced has no assigned public ID. Other catalogue public
IDs are non-null in the API contract. The generated SDKs retain Kiota's
optional model properties, so an older server omitting a field can still be
read.
Packages: Python prdb-sdk==0.24.0, npm @prdb/sdk@0.24.0, NuGet Prdb.Sdk 0.24.0, Go github.com/prdb-net/prdb-sdk/go@v0.24.0.
Implemented in #71.
SDKs 0.23.0: SiteDateTitle identification rung
SDK 0.23.0 adds the sixth identification rung to all four SDKs.
IdentifyMatchKind(matchedByonIdentifyVideoResultDto) gainsSiteDateTitle(6): the file name carries the site, the release date and the whole title of exactly one of that site's videos released that day. It comes withconfidenceProbable(2), orAmbiguous(5) with candidates when several videos of that day match.matchedBystays a plain integer in every SDK, so only its documentation changes; code that handles unknown values keeps working. No field, route or status code changed.- Updated published spec, including clarified descriptions of preview images counting as filehash submissions and of
filesizeandsubmissionCounton filehash records.
Packages: prdb-sdk==0.23.0, @prdb/sdk@0.23.0, Prdb.Sdk 0.23.0, and Go tag go/v0.23.0. Prdb.Hashing is unchanged and independently versioned.
SDKs 0.22.0: Video baseline and Identification freshness
SDK 0.22.0 adds the bounded Video baseline and Identification freshness validation in Python, TypeScript, Go and C#.
- Full Video baseline documents with a scoped opaque continuation, catch-up watermark and typed 413 recovery.
- Optional Identify proofs and batched validation with
unchanged,identifiedandreidentifyresults. - Shared contract tests and adoption guidance covering durable checkpoints, tombstones, proof lifecycle, older-server fallback and quota accounting.
- Updated published spec, including image-upload idempotency/conflict codes and rolling-quota descriptions.
Read sync adoption before using these capabilities. Go date parameters require the tested fresh WithUrl pattern because of a Kiota runtime limitation. TypeScript callers must branch on freshness status rather than testing the nullable result object. Runtime minimums are unchanged.
Packages: prdb-sdk==0.22.0, @prdb/sdk@0.22.0, Prdb.Sdk 0.22.0, and Go tag go/v0.22.0. Prdb.Hashing is unchanged and independently versioned.
SDKs 0.21.0: preview-enrichment eligibility
All four SDKs now expose previewEnrichmentEligible on VideoDetailDto (GET /videos/{id}, POST /videos/batch) and VideoChangeVideoDto (GET /videos/changes). The field says whether prdb would welcome a preview image for a video from a client that already holds one of its files. It is a server-side selection hint only, not a download instruction and not evidence that a file belongs to the video. Eligibility can disappear after an image is published, a mapping is withdrawn or the video is deleted. Every change of the value reaches the feed, and tombstones carry false.
The generated property is nullable in every language, so a response from an older server that omits it reads as unknown, never as false or as eligible. When the server rule was widened to version 2 (confirmed creator-handle releases now count as well), existing videos changed value without feed events. Consumers adopting the field should take a full /videos/changes baseline. No other schema or operation changed.
A shared contract fixture backs one test per language. Each test covers true/false/absent values on detail and batch responses, upserts and tombstones across SinceId cursor pages, a later flip to false, and the declared 400/403/404 problems.
Python prdb-sdk, TypeScript @prdb/sdk, Go module github.com/prdb-net/prdb-sdk/go (tag go/v0.21.0) and C# Prdb.Sdk share version 0.21.0. Prdb.Hashing is unchanged.
Upstream: prdbnet/prdb!508 and !509 (PRDB-324). Downstream: porganizer#56 and porganizer#59.
SDKs 0.20.1: release metadata resolution
All four SDKs now expose read-only release metadata resolution through POST /releases/resolve: ordered single-video identities, Site/Actor context, candidate alternatives, explicit per-entry decisions, nullable dates, opaque versions and recheck times. Packs remain unsupported. Existing file-identification and feed contracts are unchanged.
The new route carries typed validation, authentication, quota, body/media and service problems. Shared contract tests cover all four adapters; C# consumer coverage includes preferences, ownership, unchanged rechecks and Retry-After. Go now sends plain JSON rather than Kiota's default gzip request bodies, matching the API and other SDKs.
Python prdb-sdk, TypeScript @prdb/sdk, Go module github.com/prdb-net/prdb-sdk/go (tag go/v0.20.1) and C# Prdb.Sdk share version 0.20.1. Prdb.Hashing is unchanged. See the release-resolution guide and changelog for safe automatic selection and the distinction from independent file/hash confirmation.
The patch also restores TypeScript API-key binding with both older locked and newer freshly resolved Kiota dependencies for supported base URLs with explicit ports. CI verifies both dependency resolutions; origin validation and cross-origin redirect protection remain enforced.
The API consumer acceptance passed against both Prdb.Sdk 0.20.0 and 0.20.1 downloaded from NuGet. Published Python, TypeScript and Go 0.20.1 packages also passed real HTTP resolution with the synthetic API fixture. No SDK checkout substitutes for the released-package acceptance.
SDK 0.18.0
All four SDKs now expose retained actor identities and actor merge feed metadata.
- Optional nullable
ActorDetailDto.requestedIdsmaps supplied batch IDs to each canonical result. Batch responses remain arrays and contain each canonical actor once. - Optional nullable
mergedIntoActorIdis available on Actor and favorite-actor change payloads. Source tombstones retain their old IDs. Target updates must be applied independently of source tombstones and page order; a mapping alone does not imply an active favorite. - Retained IDs resolve to active actors with HTTP 200 and no redirect; unknown IDs, ordinary deletions and deleted targets keep existing 404/omission behavior. Favorite add/remove operations resolve retained IDs too.
Packages: prdb-sdk==0.18.0 (Python), @prdb/sdk@0.18.0 (npm), Prdb.Sdk 0.18.0 (NuGet), and github.com/prdb-net/prdb-sdk/go@v0.18.0 (Go).
Validated with shared synthetic contract responses in all four SDKs, nullable and omitted metadata, drift checks, Python 42 tests, TypeScript 40 tests on Node 22/24, Go build/vet/tests, and C# 63 SDK tests on each of .NET 8/10. Existing operations, required fields and cursors remain unchanged. Prdb.Hashing is unchanged and separately versioned.
PR: #52
SDK 0.17.0
Added
- Creator platforms and confirmed account relationships. All four SDKs
now exposeGET /platforms,GET /actors/{id}/accountsand
GET /sites/{id}/owners. Publishing platforms have stable UUIDs, keys and
titles and are separate from studio-group Networks. Account/owner reads
return up to 200 confirmed catalogue relationships in deterministic order;
guest credits do not imply ownership, and private source identities and
evidence are excluded. - Platform metadata throughout the catalogue. Site and Video payloads,
including nested sites, favorite/ignored sites and current-state change
feeds, gain nullableplatformId,platformKey,platformTitleand
accountHandle. Classic sites carry null platform metadata. Platform and
owner changes advance the affected Site, Actor and Video feeds so consumers
can update existing IDs with their current cursors. - Platform filters for Sites and Videos.
GET /sitesandGET /videos
acceptPlatformIdorClassicOnly=true; combining them returns the
existing validation problem response. Existing routes, operation IDs,
response status declarations and change-feed cursor shapes are preserved.
Known limitations
- Go filtered Video requests require a raw URL. The existing Kiota
timestamp-query bug also visits unsetCreatedAfterandCreatedBefore
fields, so a typed Video query configuration panics even when only a
platform filter is set. UseVideos().WithUrl(url).Get(ctx, nil)with
net/url-encoded filters. The Go README
includes a compiled example and a regression test covers both filters
through the authenticated wrapper.
Closes #49 via PR #50. All six CI checks passed, including C# on .NET 8 and .NET 10, TypeScript on Node 22 and 24, and regeneration consistency.
SDK 0.16.1
A regeneration that changes no type, field, method or status code. The API's
change feeds behave differently, and the doc comments in all four languages now
say how.
Documented
-
Every change feed reads two minutes behind the server clock. A page only
contains rows whoseupdatedAtUtcis at least two minutes old, and
serverTimeUtcis the server clock minus that delay, never older than a row
on the page. The server stamps a row before it commits it, so a feed reading
up to the present could hand out a cursor beyond a row that was not visible
yet, and that row was never returned. Changes now reach a consumer up to two
minutes later; persistingserverTimeUtcas the nextsinceafter an empty
page stays correct. A stored cursor newer than the bound gets empty pages
until the bound passes it. This applies to all ten/…/changesfeeds; see
Catalogue synchronization. -
GET /video-user-images/changesno longer exposes hidden images. An image
that is deleted, or hidden, denied or removed in moderation, is reported with
eventType: "deleted", an emptyurland a nullvttUrl; a restored image
reappears asupdatedwith its URLs.urlremains a non-nullable string, so
the generated types are unchanged; treat""as "no image".
Closes #47. Issue #35 remains open pending an upstream API extension.
Validation: CI passed for Python, TypeScript (Node 22 and 24), Go, C# (.NET 8 and 10), and generated-code consistency.
SDK 0.16.0
Added
- Video and Site catalogue change feeds.
GET /videos/changes
(GetVideoChanges) andGET /sites/changes(GetSiteChanges) expose current
catalogue content and minimal deletion tombstones in all four SDKs. Video
items include the current detail payload andmergedIntoIdfor merge
deletions; Site items include current network and link content. Both feeds
support a full baseline withSince=0001-01-01T00:00:00Z, acceptSinceId
andPageSize(1–1000), and returnhasMore,serverTimeUtcand a nullable
nextCursor. Tombstones are retained indefinitely, with a guaranteed minimum
of 90 days. See Catalogue synchronization for paging
and deletion handling.
Known limitations
- Go timestamp query configurations require a raw URL. The pinned Kiota
runtime panics when serializing a typedSince. Call the generated change
builder'sWithUrlmethod with a query encoded usingnet/url, then
Get(ctx, nil). This retains typed responses, authentication and redirect
protection. The Go README gives a
baseline example; a regression test covers baselines and resumed UUID cursors
with fractional seconds. Go remains supported from version 1.23.
Closes #45. Issue #23 was already delivered in 0.9.0 and is now closed. Issue #35 remains open pending an upstream API extension.
Validation: CI passed for Python, TypeScript (Node 22 and 24), Go, C# (.NET 8 and 10), and generated-code consistency.