Repository navigation
Added
-
AdminClient.listAudit(ListAuditParams):GET /v1/audit, the audit trail
(newest first, paged bycursor/limit, filtered bysince,until,
actor,action,tenant). -
revisiononRoute: counts the definition's changes, from 1 at creation;
re-creating a deleted route starts again at 1; null from a node older than
the field. -
scopeonAdminRejectedErrorandRoutesRejectedError: the scope a403 forbiddensays the credential lacks (control planes require a credential
since Ankusa 0.6). -
verificationon parsed headers, decoded messages and received deliveries:
how Ankusa verified the hook at ingest ({status, flagged},nullfrom a
node older than the field). -
ParsedClaimRef.parseandClaimCheckClient.redeemaccept signed,
expiring v2 refs
(urn:ankusa:claim:v2:<tenant>:<claim_id>:<exp_unix>:<signature>): the
parsedpathends in?exp=&sig=andredeemrequests it as is. The
gateway's400 bad_signatureand410 ref_expiredare a
ClaimRejectedError. The SDK never checks the signature or the expiry. -
webhook/Receiver.receive(headers, body, Receiver.Options), the
receiver-side decision on one HTTP-sink delivery. The sink signs every
delivery unless configuredallow_unsigned: true, so a receiver is closed
by default:Options.signed(secrets)makes the delivery verify (as
Signature.verify);Options.unsigned()is the explicit opt-out, and any
other options with no secrets throwInvalidSignatureError
(invalid_secret). The signature is judged before the hook id. Returns a
Receiver.Received(headers,verified). -
ClaimCheckClient:redeem(ref, sha256)fetches a claim's bytes from the
claim-check gateway and verifies them against the expected digest before
returning them, andhealth()is a liveness probe.ParsedClaimRef.parse
(classclaimcheck/ParsedClaimRef.java) exposes the ref parsing on its own. -
RoutesClient: the route-management client —health,listRoutes,
createRoute,getRoute,replaceRoute,updateRoute,deleteRoute,
getIpRules,putIpRules, andtestRoute. Every call is one request, no
retries, and a redirect is never followed: a3xxis aRoutesUnavailableError. -
AdminClient: the DLQ and quarantine client —health,metrics,config,
asyncApi(theGET /asyncapi.jsonAsyncAPI 3.0 document),
listDeadLetters,listQuarantined,purgeQuarantined
(DELETE /v1/quarantine, filtered byPurgeQuarantinedParams, answering a
QuarantinePurgeofdeletedandbytes), and the replay jobs
createReplay,getReplay,listReplays, andupdateReplay(kindsdlq,
archive,quarantine). AQuarantineEntrycarries a nullabletenantId
andsize, both null for an entry held before the listener recorded them. -
Message.decode, the queue-message decoder: it validates the v1 message
(including the shippedidempotency_key, theidempotencyKeyrecord
component), decodes and verifies the body, and raisesInvalidMessageError
(code(),field()) on a bad message.Message.idempotencyKey(includeReplay)
andHookHeaders.idempotencyKey(includeReplay)return the key a worker dedupes
on: the key Ankusa shipped, or for a message or delivery that predates it
tenant:source_id:dedupe_key(tenantdefaultwhen there is none) when a
dedupe key is set, elseid. -
HookHeaders.parsefor receivers: thex-ankusa-id,x-ankusa-source,
x-ankusa-tenant,content-type,x-ankusa-dedupe-key,
x-ankusa-replay-id, andx-ankusa-idempotency-keyheaders of a delivery,
andMissingHookIdErrorwhenx-ankusa-idis absent. -
Signature.verifyfor receivers of a signed HTTP sink: the Standard Webhooks
webhook-id/webhook-timestamp/webhook-signaturecheck, compared with
MessageDigest.isEqual, raisingInvalidSignatureError(code(),
field(), never retryable). -
A gateway
408or429onredeemis aClaimCheckUnavailableError
(retryable), not aClaimRejectedError. -
SourcesClient: the tenant-scoped source API —serverVersion,listSources,
getSource,createSource,updateSource, anddeleteSource. A client built
with anexpectedVersionfetches/healthonce, caches the reported version,
and raisesVersionMismatchErroron every later call that disagrees. -
The error hierarchy: one abstract
AnkusaExceptionper client family
(ClaimCheckError,RoutesError,AdminError,SourcesError), with
retryable()true only on the four*UnavailableErrorclasses. Caller misuse
is anIllegalArgumentExceptioninstead, raised before any request: a base URL
that is not an absolute http(s) URL, a header the JDK client refuses to set, or
a body that cannot be encoded as JSON. -
ClientOptions, carrying the request headers, the timeout (10 s by default,
bounding connect through the last body byte), and theTransport. The default
transport is the JDKHttpClient; inject your own to test, or to drive a
different stack. -
The language-neutral conformance runner (JUnit Jupiter,
ConformanceTest), passing
every vector inconformance/cases.