Application
Table of Contents
Interfaces
- JtiStore
- CONTRACT.md §21.7.2 check 8 — single-use `jti` tracking for DPoP proofs.
- MdsRefreshOutcomeVariant
- `POST /api/v1/mds/refresh` response — the outcome of one ingestion attempt (mirrors
`axiam_db::mds_ingest::MdsIngestOutcome`).
- ProviderConfigVariant
- Provider-specific connection details.
- ScimTargetAuthVariant
- How AXIAM authenticates to the downstream service provider, without the credential itself.
- ScimTargetScopeVariant
- Which users a target provisions.
- SubjectAltNameVariant
- A name to put in a `Server` certificate's `subjectAltName`. Stated explicitly in the
request, never read from a CSR: a CSR asking for a `subjectAltName` extension is still
refused. URI and e-mail names are not offered — nothing in AXIAM consumes them yet.
- CibaClock
- The clock {@see OidcClient::cibaAwait()} waits on — injectable so the §33.7 schedule is
testable without sleeping.
- OidcStateStoreInterface
- Optional server-side store for in-flight `oidcBegin` state (CONTRACT.md §12.3 rule 1).
- OpaqueNativeInterface
- The `libaxiam_opaque_ffi` C ABI, expressed in PHP terms.
- ReactorDelivery
- One message off the reactor's own queue (CONTRACT.md §22.1).
- ReactorTransport
- One live broker session for a reactor: a consumer on the reactor's own queue,
and a way to publish a reply back to the queue the delivery named
(CONTRACT.md §22.1, §8b).
- ReplayStore
- Remembers the `jti`s an {@see SsfReceiver} already accepted (CONTRACT.md §32.7 step 9).
Classes
- AccessEnforcer
- The single CONTRACT.md §11 ("Declarative Authorization Helpers") enforcement
implementation, shared by BOTH framework bridges
({@see \Axiam\Sdk\Symfony\AxiamAccessAttributeListener} and
{@see \Axiam\Sdk\Laravel\AxiamAccessMiddleware}) so the `#[RequireAuth]` /
`#[RequireAccess]` / `#[RequireRole]` semantics can never drift between the two
integrations. Neither bridge re-implements resource resolution, subject propagation,
or the error-mapping table below — both call into this class exclusively.
- MfaEnrollment
- A TOTP factor offered but not yet active (CONTRACT.md §25.1).
- PasswordResetConfirmation
- Arguments to `AxiamClient::confirmPasswordReset()` (CONTRACT.md §25.1).
- PasswordResetContext
- The OPAQUE policy for the account a reset token belongs to (CONTRACT.md §25.1).
- PasswordResetRequest
- Arguments to `AxiamClient::requestPasswordReset()` (CONTRACT.md §25.1).
- AmqpDropMessage
- Poison-message sentinel. Application handlers throw this to signal that a
message is unprocessable and must NOT be requeued (e.g. a permanently
malformed or unsupported event) — distinct from a transient failure, which
should be requeued for retry.
- Consumer
- php-amqplib blocking consume loop with HMAC verify-before-handler
(CONTRACT.md §8, D-04).
- Hmac
- HMAC-SHA256 verify-before-handler primitive for inbound AMQP messages
(CONTRACT.md §8).
- ReplayGuard
- NEW-4 (CONTRACT.md §8 "v2 — Replay Protection", hard cutover) validation
gates, checked ONLY AFTER a delivery's HMAC signature has already
verified (see Hmac::verify / Consumer::verifyAndDispatch).
- ManagedGroup
- Declares that a group must exist, as part of a CONTRACT.md §27.6 manifest.
- ManagedPermission
- Declares that a permission must exist, as part of a CONTRACT.md §27.6 manifest.
- ManagedResource
- Declares that a resource must exist, as part of a CONTRACT.md §27.6 manifest.
- ManagedRole
- Declares that a role must exist, as part of a CONTRACT.md §27.6 manifest.
- OnReactorEvent
- Declares that a method handles one reactor hook event (CONTRACT.md §22.14,
canonical `reactor_handlers`).
- RequireAccess
- Declarative per-endpoint authorization requirement (CONTRACT.md §11, canonical
`require_access(action, resource[, scope])`). Placing this attribute on a controller
method or class does not itself perform any check — it is metadata read by the
framework-specific enforcement listener
({@see \Axiam\Sdk\Symfony\AxiamAccessAttributeListener},
{@see \Axiam\Sdk\Laravel\AxiamAccessMiddleware}), which resolves the target resource
and delegates the actual authorization decision to
{@see \Axiam\Sdk\AccessEnforcer::enforceAccess()}.
- RequireAuth
- Declarative "endpoint requires an authenticated AXIAM identity" marker (CONTRACT.md
§11, canonical `require_auth`). Pure sugar over the CONTRACT.md §10 authentication
guard for frameworks (Laravel, Symfony) where that guard is applied per-route rather
than globally: placing this attribute on a controller method or class does not itself
perform any verification — it is read by the framework-specific enforcement listener
({@see \Axiam\Sdk\Symfony\AxiamAccessAttributeListener},
{@see \Axiam\Sdk\Laravel\AxiamAccessMiddleware}) which delegates the actual check to
{@see \Axiam\Sdk\AccessEnforcer::enforceAuth()}.
- RequireRole
- Declarative local role check (CONTRACT.md §11, canonical `require_role(role...)`,
MAY-level helper). Placing this attribute on a controller method or class does not
itself perform any check — it is metadata read by the framework-specific enforcement
listener ({@see \Axiam\Sdk\Symfony\AxiamAccessAttributeListener},
{@see \Axiam\Sdk\Laravel\AxiamAccessMiddleware}), which delegates to
{@see \Axiam\Sdk\AccessEnforcer::enforceRole()}.
- DeviceToken
- The result of `AxiamClient::authenticateDevice()` — the mTLS device login
(CONTRACT.md §6.1 rules 6-10, contract 1.51).
- DpopRequest
- What {@see DpopVerifier::verifyProof()} needs to know about the current request.
- DpopVerifier
- DPoP proof verification — CONTRACT.md §21.7.2 (RFC 9449), contract 1.16.
- InMemoryJtiStore
- A {@see JtiStore} for a single PHP process.
- JwksVerifier
- Local EdDSA/Ed25519 JWKS verification (CONTRACT.md D-08).
- LoginResult
- Result of `AxiamClient::login()` (CONTRACT.md §1, D-09).
- PresentedProofs
- What the caller proved about **this** connection and **this** request, for
{@see JwksVerifier::verifyTokenBinding()}.
- RefreshGuard
- Shared-promise clear-on-both-paths helper (CONTRACT.md §9, D-06).
- RevocationFeed
- The optional session-revocation feed poller (CONTRACT.md §10.4, contract 1.44 — AXIAM
threats T-39 and T-143).
- RptPermission
- A UMA 2.0 permission carried by an RPT (CONTRACT.md §20) — one entry of
{@see TokenIntrospection::$permissions}.
- TokenIntrospection
- The result of `AxiamClient::introspectToken()` — the RFC 7662 set, every field of the
wire `IntrospectTokenResponse` (CONTRACT.md §1.1.1 rule 3, contract 1.51).
- TokenValidation
- The result of `AxiamClient::validateToken()` — every field of the wire
`ValidateTokenResponse` (CONTRACT.md §1.1.1 rule 3, contract 1.51).
- UserInfo
- Result of `AxiamClient::getUserInfo()` (CONTRACT.md §1.1, contract 1.3).
- AuthzDispatcher
- Transparent REST/gRPC authz transport selection (CONTRACT.md §1, D-03, SC#3).
- AxiamClient
- The AXIAM PHP SDK's public REST entry point (CONTRACT.md §1–§9, SC#1).
- AuthError
- Authentication failure: wrong credentials, expired session, MFA failure, or a 401
on refresh (CONTRACT.md §2). Always constructed via {@see ErrorMapper} so REST and
gRPC transports cannot drift on the error taxonomy.
- AuthzError
- Authorization failure: the caller is authenticated but lacks permission for the
requested operation (CONTRACT.md §2). Always constructed via {@see ErrorMapper} so
REST and gRPC transports cannot drift on the error taxonomy.
- AxiamException
- Base exception for all AXIAM SDK errors (CONTRACT.md §2, D-10).
- ConfigClampedEvent
- Emitted at construction, once per caller-supplied setting the SDK clamped
(CONTRACT.md §19.1, §19.2 rule 6).
- DecisionMemo
- Client-side decision memo — CONTRACT.md §17.
- ErrorMapper
- Central status→error mapper (CONTRACT.md §2, D-10). {@see self::fromStatus()} is the
single translation point from an HTTP status code to a typed {@see AxiamException}
subtype — no other class in the SDK is permitted to hand-roll this branching:
401 → {@see AuthError}; 403/409 → {@see AuthzError}; everything else
(400/408/429/5xx/transport) → {@see NetworkError}.
- NetworkError
- Transport-level failure: connection refused, timeout, TLS error, DNS failure, or a
server-side 5xx (CONTRACT.md §2).
- OAuthProtocolError
- An RFC 6749 protocol error returned by an `/oauth2/*` endpoint as an
`OAuth2ErrorResponse` body — `invalid_grant`, `invalid_client`, `invalid_request`,
`unsupported_grant_type`, … (CONTRACT.md §2, §12.3 rule 3).
- RefreshEvent
- Emitted around a §9 single-flight refresh (CONTRACT.md §19).
- RequestEndEvent
- Emitted after a call completes, success or failure (CONTRACT.md §19).
- RequestStartEvent
- Emitted before an outbound call leaves the SDK (CONTRACT.md §19).
- RetryEvent
- Emitted before each §16 retry wait (CONTRACT.md §19).
- RetryPolicy
- Bounded read-only retry policy — CONTRACT.md §16.
- Sensitive
- Wraps a token-carrying value so it can never be accidentally exposed via
`__toString()`, `var_export()`/`print_r()`, or JSON serialization
(CONTRACT.md §7, D-11).
- SsfUnjudgedEvent
- Emitted when `ssf.poll` returns normally leaving at least one SET unjudged (CONTRACT.md
§19.1, contract 1.60; §34.2 P1).
- TelemetryDispatcher
- Internal §19 dispatcher. A null hook is the overwhelmingly common case and
costs one null check per request.
- TelemetryEvent
- A telemetry event (CONTRACT.md §19).
- AuthzGrpcClient
- gRPC authorization transport (CONTRACT.md §1/§6/§9, D-03/D-06/D-12).
- TokenGrpcClient
- gRPC token-validation transport (CONTRACT.md §1.1.1/§10.3, contract 1.51) — wraps
`axiam.v1.TokenService/ValidateToken` and `/IntrospectToken`, the RPCs §10.3 obliges a
gRPC-validating SDK to read `cnf` from and no method in this SDK's public surface
wrapped before 1.51.
- UserInfoGrpcClient
- gRPC userinfo transport (CONTRACT.md §1.1/§5/§6/§9, contract 1.3) — the low-latency
gRPC counterpart of the server's REST `GET /oauth2/userinfo` endpoint. This is the
hand-written service-client sibling of {@see AuthzGrpcClient}: it mirrors that class's
channel/metadata/status-mapping machinery exactly, differing only in the single RPC it
exposes (`GetUserInfo` instead of `CheckAccess`/`BatchCheckAccess`).
- AxiamAccessMiddleware
- Laravel CONTRACT.md §11 declarative-authorization enforcement middleware, registered
under the `axiam.access` alias (D-02). Supports BOTH developer-experience styles the
plan calls for, from the SAME class, delegating every actual decision to the shared
{@see AccessEnforcer} (never re-implementing resource resolution, subject
propagation, or the error-mapping table itself):
- AxiamGate
- Laravel authorization gate (D-02, CONTRACT.md §1/§10): a one-line delegation to
{@see AxiamClient::can()} — the server's additive-only RBAC engine (allow-wins,
default-deny, no explicit deny-override) is ALWAYS the authoritative decision-maker.
- AxiamMiddleware
- Laravel authentication middleware (D-02, CONTRACT.md §10): extracts the bearer/cookie
token, verifies it via {@see AxiamClient::verifyLocally()} — the no-fallback seam
mandated by §10.1 rule 8 — and populates the `axiam_user` request attribute with
`user_id`/`tenant_id`/`roles` on success. Returns a standardized 401 JSON error body on
any failure (missing token, invalid signature, expired token). Never duplicates
JWKS-verify logic itself (D-02 prohibition) — every security-critical decision is made
by {@see AxiamClient}.
- AxiamServiceProvider
- Auto-discovered Laravel bridge entry point (D-01): listed under `composer.json`
`extra.laravel.providers`, so a Laravel consumer gets this provider registered
with ZERO manual wiring beyond `composer require axiam/axiam-sdk` (true
zero-config auto-discovery, unlike the Symfony bridge which has no equivalent
mechanism without a published Flex recipe).
- OidcCallbackController
- Step 2 of "Login with AXIAM" (CONTRACT.md §12.1 `oidc_exchange`): an invokable
controller that validates the IdP callback, consumes the single-use stored
state, exchanges the authorization code, and redirects (or replies `200 JSON`)
on success. All security-critical logic lives in {@see OidcLoginFlow} — see
{@see OidcLoginFlow::complete()} for the full 400/401/503 failure mapping.
- OidcLoginController
- Step 1 of "Login with AXIAM" (CONTRACT.md §12.1 `oidc_begin`): an invokable
controller that builds the authorization request, parks its
`state`/`nonce`/`code_verifier` in the configured
{@see \Axiam\Sdk\Oidc\OidcStateStoreInterface}, and redirects the browser to the
IdP. All security-critical logic lives in {@see OidcLoginFlow} — this class only
translates its {@see OidcLoginOutcome} into an HTTP response, exactly as
{@see AxiamMiddleware} never duplicates {@see \Axiam\Sdk\AxiamClient}'s own
verification logic.
- AuditApi
- Append-only audit log, read-only by construction.
- CaCertificatesApi
- Organization CAs and the per-tenant signing CAs chained beneath them.
- CertificatesApi
- End-entity X.509 certificates -- the ones issued to users, services and IoT devices.
- ConflictError
- `409 Conflict` on the §27 management surface — CONTRACT.md §27.4 rule 7.
- DirectoryApi
- A tenant's LDAP / Active Directory identity source (CONTRACT §30): the one configuration,
the explicit act that links an existing local account to its directory entry, and a
read-only view of the sync job. Signing in needs nothing new -- a directory account calls
the same §1 `login`.
- EmailConfigApi
- Transactional-mail transport, configurable at organization level and overridable per tenant.
- FederationApi
- Upstream IdP configuration and the per-user links it produces.
- FieldError
- One field-level complaint from a `400`/`422` validation body (CONTRACT.md §27.4
rule 7).
- GroupsApi
- Named collections of users. Roles assigned to a group are inherited by every member.
- ManagementApi
- The CONTRACT.md §27 management surface: 202 operations across 29 namespaces.
- ManagementChecks
- Local checks the generated §27 surface runs before any I/O (generator table `PRECHECKS`).
- ManagementErrorMapper
- The §27 status→error mapper (CONTRACT.md §27.4 rule 7).
- ManagementSupport
- Base class for the 28 generated namespace handles (CONTRACT.md §27.2).
- ManagementTransport
- The single wire path every one of the 190 §27 management operations goes through
(CONTRACT.md §27.8).
- ApplyReport
- What {@see ManifestApi::apply()} actually did — including, when it stopped early, what
it had already done.
- BindingRebindFailed
- A role binding's `Update` failed at its RE-ASSIGNMENT (§27.6.1 addition 2, contract 1.51).
- ManagementManifest
- A declarative description of the state a tenant must be in (CONTRACT.md §27.6).
- ManagementPlan
- What {@see ManifestApi::plan()} produced: the ordered changes an apply would make.
- ManifestApi
- Plans and applies a §27.6 manifest (CONTRACT.md §27.6, §27.7).
- ManifestAttributeReader
- Builds a {@see ManagementManifest} from the `#[Managed*]` attributes on a class
(CONTRACT.md §27.6).
- ManifestBuilder
- Fluent construction of a {@see ManagementManifest} (CONTRACT.md §27.6).
- ManifestEntity
- One entity a §27.6 manifest declares must exist.
- ManifestException
- A manifest was rejected before any request was sent (CONTRACT.md §27.6).
- ManifestValidation
- Refuses an incoherent manifest BEFORE the first wire call (CONTRACT.md §27.6).
- NetworkReconciler
- The `network` namespace of a §27.6 manifest (CONTRACT.md §27.6.2, contract 1.62): what
`plan` reads, and how `apply` writes the three kinds — the tenant's policy, its segments and
their reply profiles — through the generated {@see NetworkApi}.
- PlannedChange
- One entry in a {@see ManagementPlan}: what would happen to one entity, and why.
- RoleBinding
- One role bound to a subject — a group or a service account — in one of the two shapes
§27.6.1 addition 2 allows (contract 1.51).
- AcsEndpoint
- One `AssertionConsumerService` endpoint of a service provider. The list of these is an
**allow-list**, checked the way OAuth2 redirect URIs are: an `AuthnRequest` naming an ACS
URL is honoured only when the URL equals one registered here, byte for byte. No globs, no
prefix match.
- AddMemberRequest
- The `AddMemberRequest` schema from the server's OpenAPI document.
- AddServiceAccountMemberRequest
- The `AddServiceAccountMemberRequest` schema from the server's OpenAPI document.
- ApiProviderConfig
- API-based provider configuration (SendGrid, Postmark, Resend, Brevo). `api_key` follows the
same write-only + omit-preserving contract as [`SmtpConfig::password`] (D-01/D-02).
- AssignRoleToGroupRequest
- The `AssignRoleToGroupRequest` schema from the server's OpenAPI document.
- AssignRoleToServiceAccountRequest
- The `AssignRoleToServiceAccountRequest` schema from the server's OpenAPI document.
- AssignRoleToUserRequest
- The `AssignRoleToUserRequest` schema from the server's OpenAPI document.
- AttributeMapping
- One entry of an SP's attribute mapping table.
- AuditLogEntry
- The `AuditLogEntry` schema from the server's OpenAPI document.
- BindCertificate
- Request to bind a certificate to a service account.
- CaCertificate
- A CA (Certificate Authority) certificate at the organization level. CA certificates are the
root of trust for all tenant certificates within the organization. Private keys for signing
CAs are encrypted with AES-256-GCM and stored separately; non-signing CAs only store the
public certificate.
- Certificate
- A tenant-level certificate for users, services, or IoT devices. Certificates are signed by
the organization's CA. The private key is returned once on generation and never stored by
AXIAM.
- CertificatePolicy
- Certificate issuance constraints.
- CimdPolicy
- Whether, and on what terms, a `client_id` that is a URL is resolved by fetching the document
it names (T21.5, `draft-ietf-oauth-client-id-metadata-document`). # Why this is one nested
policy rather than nine fields Every field here is a term of a single decision — *do we
fetch a stranger's URL and make a client out of what comes back* — and none of them means
anything without [`Self::enabled`]. A tenant that states a CIMD posture states all of it; a
tenant that states none inherits its organization's whole posture rather than half of one,
which is the only merge that cannot produce a combination neither party wrote. # The two
fields that can widen, and the seven that cannot [`Self::enabled`] and [`Self::allow_http`]
are **ordered**: a tenant may turn either off but never on, exactly as
`dynamic_registration` may only move down its ladder. Everything else names *this tenant's*
domains or *this tenant's* bounds, and there is no sense in which one tenant's list of
trusted publishers is stricter than another's — the same argument [`OidcPolicy`] already
makes for `dcr_allowed_redirect_hosts`. # Every bound here is a security control
[`Self::max_metadata_bytes`], [`Self::min_cache_secs`] and [`Self::max_cache_secs`] are not
tuning knobs. They are, respectively, the ceiling on a read from an attacker-chosen URL, the
floor under how often that read may be repeated, and the ceiling on how long its result may
be trusted. Each is clamped again in code against the three constants above, so a settings
row written by hand cannot lift them.
- ComplianceReportEntry
- One credential's compliance outcome (D9).
- ConsentView
- One consent record, as the subject sees it.
- CreateCaCertificateRequest
- The `CreateCaCertificateRequest` schema from the server's OpenAPI document.
- CreateCertificateRequest
- The `CreateCertificateRequest` schema from the server's OpenAPI document.
- CreateFederationConfigRequest
- The `CreateFederationConfigRequest` schema from the server's OpenAPI document.
- CreateGroupRequest
- The `CreateGroupRequest` schema from the server's OpenAPI document.
- CreateIntermediateCaRequest
- Body of `POST .../tenants/{tenant_id}/signing-cas`.
- CreateNetworkReplyProfileRequest
- The body of `POST /api/v1/network/profiles`.
- CreateNetworkSegmentRequest
- The body of `POST /api/v1/network/segments`.
- CreateNotificationRuleRequest
- The `CreateNotificationRuleRequest` schema from the server's OpenAPI document.
- CreateOAuth2ClientRequest
- The `CreateOAuth2ClientRequest` schema from the server's OpenAPI document.
- CreatePermissionRequest
- The `CreatePermissionRequest` schema from the server's OpenAPI document.
- CreatePgpKeyRequest
- The `CreatePgpKeyRequest` schema from the server's OpenAPI document.
- CreateReactorRequest
- The `CreateReactorRequest` schema from the server's OpenAPI document.
- CreateRegistrationTokenRequest
- Request body for [`create_registration_token`].
- CreateRegistrationTokenResponse
- The one response that carries the handle.
- CreateResourceRequest
- The `CreateResourceRequest` schema from the server's OpenAPI document.
- CreateRoleRequest
- The `CreateRoleRequest` schema from the server's OpenAPI document.
- CreateScimTokenRequest
- The `CreateScimTokenRequest` schema from the server's OpenAPI document.
- CreateScimTokenResponse
- The one-time reveal. Same shape as service-account creation: the secret is returned once and
only its hash is kept.
- CreateScopeRequest
- The `CreateScopeRequest` schema from the server's OpenAPI document.
- CreateServiceAccountRequest
- The `CreateServiceAccountRequest` schema from the server's OpenAPI document.
- CreateTenantRequest
- Request body for tenant creation (organization_id comes from the URL path).
- CreateUserRequest
- The `CreateUserRequest` schema from the server's OpenAPI document.
- CreateWebhookRequest
- The `CreateWebhookRequest` schema from the server's OpenAPI document.
- DirectoryConfig
- A tenant's directory configuration, as stored and as read back. Carries no secret: see the
module documentation.
- DirectoryLinkResult
- What linking did.
- DirectorySyncStatus
- A read-only view of the sync job's state for one tenant. Counts of what a run did are in its
audit rows, and no account id is here.
- EmailConfig
- Fully resolved email configuration (all fields present).
- EmailConfigOverride
- Partial tenant overrides for email configuration. `None` = inherit from org baseline.
- EmailTestResult
- What a test send did.
- EmailVerificationPolicy
- Email verification requirements.
- EncryptedExport
- Result of encrypting data with a PGP public key.
- EncryptRequest
- Request body for encrypting data.
- FederationConfigResponse
- Federation config response -- omits client_secret.
- FederationLinkResponse
- The `FederationLinkResponse` schema from the server's OpenAPI document.
- GeneratedCaCertificate
- Response returned when a CA certificate is generated. Includes the private key PEM, which is
returned **once** and never stored or retrievable again — when the custodian produced one at
all. Under `vault_pki` custody the key was born inside Vault and there is nothing to return,
which is the point of that custodian rather than a shortcoming of this response.
- GeneratedCertificate
- Response returned when a tenant certificate is generated. Includes the private key PEM,
returned **once** and never stored.
- GeneratedPgpKey
- Response returned when a PGP key is generated.
- GrantedScope
- A scope named by a grant, resolved to something a human can read.
- GrantPermissionRequest
- The `GrantPermissionRequest` schema from the server's OpenAPI document.
- GrantScopeConsent
- Body for recording an OIDC scope-release consent.
- Group
- A group of users that can access resources based on their roles and permissions. Groups
simplify role management by allowing roles to be assigned to a group rather than individual
users.
- GroupMapping
- One row of the group-mapping table (G-3, T23.3.4, D-30): a directory group, named by its
distinguished name, and the AXIAM group a member of it is put into. **The table is the only
way a directory group reaches an AXIAM group.** There is no match by name, no prefix or
wildcard, and no AXIAM group is ever created from a directory one: a directory administrator
who names a group `admins` gains nothing unless a tenant administrator mapped it here. The
DN is stored as the administrator typed it and compared after RFC 4514 normalisation
(`axiam_directory::dn`), so `CN=Staff, OU=Groups` and `cn=staff,ou=groups` are the same row.
- HealthResponse
- Response body for `GET /health`. `profile` and `unavailable` are additive (G-8, D-59): a
client that reads only `status` is unaffected.
- ImportCaCertificateRequest
- Body of `POST /api/v1/organizations/{org_id}/ca-certificates/import`. Deliberately carries
no subject, validity window or key algorithm: all three are read out of the certificate
itself. A caller that could name them separately could name a subject the certificate does
not have, and AXIAM would enforce the claim while every relying party read the certificate.
- IssueSamlIdpCredential
- `POST …/saml/idp-credentials` body.
- LinkDirectoryAccount
- `POST /api/v1/tenants/{tenant_id}/directory/links` body.
- LockoutPolicy
- Account lockout rules.
- MdsRefreshOutcome
- `POST /api/v1/mds/refresh` response — the outcome of one ingestion attempt (mirrors
`axiam_db::mds_ingest::MdsIngestOutcome`).
- MdsRefreshOutcomeInitial
- The `initial` arm of {@see MdsRefreshOutcome} (`outcome: "initial"`).
- MdsRefreshOutcomeNoOpRefresh
- The `no_op_refresh` arm of {@see MdsRefreshOutcome} (`outcome: "no_op_refresh"`).
- MdsRefreshOutcomeReplaced
- The `replaced` arm of {@see MdsRefreshOutcome} (`outcome: "replaced"`).
- MdsRefreshOutcomeRollbackRejected
- The `rollback_rejected` arm of {@see MdsRefreshOutcome} (`outcome: "rollback_rejected"`).
- MdsStatusResponse
- `GET /api/v1/mds/status` response. `no`/`next_update`/`last_refreshed_at` are `None` and
`stale` is `false` when MDS has never been ingested — a meaningful, valid answer ("nothing
ingested yet"), not an error.
- MfaMethodResponse
- The `MfaMethodResponse` schema from the server's OpenAPI document.
- MfaPolicy
- Multi-factor authentication policy.
- MigrateCustodyResponse
- What a custody migration did.
- ModelDecode
- Reads a REQUIRED field out of a decoded response body.
- MtlsTrustAnchorResponse
- The acknowledgement, which is mostly about the restart.
- NetworkPolicyResponse
- The tenant's network policy, as the management API returns it.
- NetworkReplyProfile
- A segment's reply profile as read: **the effective one**, with the `Session-Timeout` already
clamped to the tenant's current cap (design note §3.4) and `Idle-Timeout` kept within it.
- NetworkReplyProfileInput
- What a writer supplies for a profile. Closed: an unknown key is a refusal naming it, never
ignored (design note §3.4).
- NetworkSegmentResponse
- A network segment, as the management API returns it.
- NotificationPolicy
- Admin notification preferences.
- NotificationRuleResponse
- Notification rule response.
- OAuth2ClientCreatedResponse
- Response for client creation -- includes the one-time plaintext secret.
- OAuth2ClientResponse
- OAuth2 client response -- omits client_secret_hash.
- OidcAuthorizeRequest
- The `OidcAuthorizeRequest` schema from the server's OpenAPI document.
- OidcAuthorizeResponse
- The `OidcAuthorizeResponse` schema from the server's OpenAPI document.
- OidcCallbackRequest
- The `OidcCallbackRequest` schema from the server's OpenAPI document.
- OidcCallbackResponse
- The `OidcCallbackResponse` schema from the server's OpenAPI document.
- OidcPolicy
- OpenID Connect surface controls (X7 G8, plan §4.6/§4.8; T21.4). Settings that are not
password rules, here because this is the org-baseline-plus-tenant-override surface every
other per-tenant control lives on. They are not all of the same kind as each other, and
which is which is the whole of what [`validate_tenant_override`] and
[`clamp_overrides_to_org`] read, so it is set out rather than inferred. **Ordered** — a
tenant may be stricter than its organization and never more permissive: *
[`Self::sensitive_scopes_enabled`], validated **disable-only** — the mirror image of
`mfa_enforced`, because releasing personal data is the less-restrictive direction, so a
tenant can turn its organization's decision off but never on. * [`Self::saml_idp_enabled`],
validated **disable-only** exactly like [`Self::sensitive_scopes_enabled`] (D-20): a tenant
may turn its organization's `true` off and never its `false` on. * [`Self::ssf_enabled`],
validated **disable-only** the same way (D-45). * [`Self::dynamic_registration`], on the
ladder `disabled` → `initial_access_token` → `anonymous`: a tenant may move down it and
never up. * [`Self::dcr_max_clients`] and [`Self::dcr_unused_client_ttl_days`], on the
ordinary `tenant <= org` rule — with the wrinkle that `0` on the second means *never sweep*,
which is the longest window of all and is handled by [`dcr_ttl_strictness`]. **Not
ordered**, therefore never validated against the baseline and never clamped: *
[`Self::default_locale`]. A language is a presentation preference; there is no sense in
which Italian is stricter than French. * [`Self::dcr_allowed_scopes`],
[`Self::dcr_allowed_redirect_hosts`] and [`Self::external_client_allowed_resources`]. Each
names per-tenant resources — *this* tenant's MCP servers, *this* tenant's callback hosts —
and there is no sense in which one such list is stricter than another. A subset rule would
force an organization to enumerate every tenant's resource servers in its own baseline
before any tenant could name one. The model's rule is "a tenant may only be more
restrictive", which binds every field that *has* a restrictiveness; a field that has none
cannot violate it. One cross-field interlock spans both groups and is checked on the
resolved policy rather than on either input: see [`validate_dcr_policy`].
- OpaqueEnrollment
- The client-supplied half of an OPAQUE enrolment, as it appears inside registration /
change-password / reset-completion / bootstrap request bodies. There is no standalone
`register/finish` endpoint, deliberately. A record can only be created at a moment when the
plaintext password legitimately exists on the client, and every one of those moments is
already an endpoint that takes a password. A free-standing finish would be an endpoint whose
only job is to attach a credential to an account, which is a thing worth not having. Kept
separate from [`CreateOpaqueCredential`] because the tenant, the user and the credential
identifier are all decided by the server — a client that could name them could enrol a
record against somebody else's account.
- OpaquePolicy
- Secure Remote Password policy. `suite` and `ksf` are the parameters a *new* registration
record is enrolled with. They deliberately do not apply retroactively: an existing record is
only valid under the suite and KSF it was created with, so tightening these takes effect as
users next set a password rather than invalidating everybody at once.
- Organization
- An organization groups multiple tenants under a single administrative entity. Organizations
represent companies, departments, or business units. CA certificates are registered at the
organization level, enabling a hierarchical trust model across all tenants.
- ParseSamlSpMetadata
- `POST …/saml/parse-sp-metadata` body: **exactly one** of the two members.
- PasswordPolicy
- Password complexity and history requirements.
- Permission
- The `Permission` schema from the server's OpenAPI document.
- PgpKey
- An OpenPGP key stored by AXIAM.
- PolicyResponse
- `GET` response: the stored policy plus the unknown-AAGUID action it currently *resolves to*.
- PrivacyPolicy
- Data-retention rules that apply after a subject asks to be erased.
- ProviderConfig
- Provider-specific connection details.
- ProviderConfigBrevo
- The `brevo` arm of {@see ProviderConfig} (`kind: "brevo"`).
- ProviderConfigPostmark
- The `postmark` arm of {@see ProviderConfig} (`kind: "postmark"`).
- ProviderConfigResend
- The `resend` arm of {@see ProviderConfig} (`kind: "resend"`).
- ProviderConfigSendGrid
- The `send_grid` arm of {@see ProviderConfig} (`kind: "send_grid"`).
- ProviderConfigSmtp
- The `smtp` arm of {@see ProviderConfig} (`kind: "smtp"`).
- ReactorEventDescriptor
- One hookable event, as the registry describes it.
- ReactorResponse
- The `ReactorResponse` schema from the server's OpenAPI document.
- ReadyResponse
- The `ReadyResponse` schema from the server's OpenAPI document.
- RegistrationTokenResponse
- Metadata only. The handle exists in plaintext exactly once, in
[`CreateRegistrationTokenResponse`].
- ReplaceNetworkPolicyRequest
- The body of `PUT /api/v1/network/policy`: a **replacement** of the policy.
- ReplaceNetworkReplyProfileRequest
- The body of `PUT /api/v1/network/profiles/{segment_id}`.
- ReplaceNetworkSegmentRequest
- The body of `PUT /api/v1/network/segments/{id}`: a **replacement** of the envelope. The kind
and the place in the tree do not change.
- ResolvedPermissionGrant
- A permission grant with its scopes resolved. A superset of [`PermissionGrant`]: `scope_ids`
is still present and still authoritative, so a client written before `scopes` existed is
unaffected.
- Resource
- The `Resource` schema from the server's OpenAPI document.
- RetryPolicy
- Retry policy for failed webhook deliveries.
- Role
- The `Role` schema from the server's OpenAPI document.
- RoleAssignment
- A role together with its assignment context (the resource it is scoped to).
- RoleGroupAssignment
- A group together with the resource scope of its assignment of this role.
- RoleServiceAccountAssignment
- A service account together with the resource scope of its assignment.
- RoleUserAssignment
- A user together with the resource scope of their assignment of this role.
- RotateSecretResponse
- Response for secret rotation.
- SamlIdpCredential
- The tenant's IdP signing credential, **public facts only**. There is no key on it and no
field a key could be put in: the private key is generated by the server, sealed at rest,
never returned by any route and destroyed on retirement (D-21).
- SamlIdpCredentialPromotion
- What promoting the `next` credential did.
- SamlIdpInfo
- The tenant's SAML IdP, as the administrator needs to see it before and while switching it
on: what an SP will be given, and whether it answers yet.
- SamlServiceProvider
- A registered service provider, as stored.
- SamlServiceProviderInput
- Everything an administrator supplies when registering or replacing a service provider
(`create` and `update` both take it; `update` is a full replacement). Every field but
`entity_id`, `display_name` and `acs_urls` has a default, so a client written against a
later revision of this struct keeps working.
- SamlSpMetadataDraft
- A parse of SP metadata: **a draft, not a registration**. Nothing is stored until the caller
submits `service_provider` to `create_service_provider` or `update_service_provider`, and
nothing in it is trusted because it came from a document (D-41).
- ScimReconcileAccepted
- The body of a started reconciliation's `202`.
- ScimTargetAuth
- How AXIAM authenticates to the downstream service provider, without the credential itself.
- ScimTargetAuthBearer
- The `bearer` arm of {@see ScimTargetAuth} (`type: "bearer"`).
- ScimTargetAuthOauth2ClientCredentials
- The `oauth2_client_credentials` arm of {@see ScimTargetAuth} (`type:
"oauth2_client_credentials"`).
- ScimTargetAuthUnknown
- A {@see ScimTargetAuth} whose `type` this SDK's copy of the spec does not list.
- ScimTargetDeliveryState
- A target's delivery state, as `GET` projects it. Fixed vocabulary only: the failure reason
is one of the deliverer's phrases, never a URL, a response body or a value.
- ScimTargetInput
- `create` and `update` (a **replacement**) body.
- ScimTargetResponse
- A registered SCIM target, as the management API returns it. **The credential is never
returned**, and there is no member that says anything about it.
- ScimTargetScope
- Which users a target provisions.
- ScimTargetScopeAllUsers
- The `all_users` arm of {@see ScimTargetScope} (`type: "all_users"`).
- ScimTargetScopeGroups
- The `groups` arm of {@see ScimTargetScope} (`type: "groups"`).
- ScimTargetScopeUnknown
- A {@see ScimTargetScope} whose `type` this SDK's copy of the spec does not list.
- ScimTokenResponse
- Metadata only. The handle is never in a list response — it exists in plaintext exactly once,
in [`CreateScimTokenResponse`].
- Scope
- The `Scope` schema from the server's OpenAPI document.
- SecuritySettings
- Fully resolved security settings (all fields present).
- ServiceAccountCreatedResponse
- Response for service account creation — includes the one-time plaintext secret.
- ServiceAccountResponse
- Public-safe service account representation.
- SessionResponse
- One of a user's sessions, as an administrator sees it.
- SetDirectoryConfig
- `PUT /api/v1/tenants/{tenant_id}/directory` — a **replacement**. Every `DirectoryConfig`
member except `id`, `tenant_id` and the two timestamps, plus the write-only `bind_secret`.
- SetMtlsTrustAnchor
- Body for `PUT .../ca-certificates/{id}/mtls-trust-anchor`.
- SetOrgEmailConfig
- Input for setting organization-level email config.
- SetOrgSettings
- Input for setting organization-level security settings.
- SignAuditBatchRequest
- Request body for signing an audit batch.
- SignCertificateCsrRequest
- Body of `POST /api/v1/certificates/sign-csr`. No `subject` and no `key_algorithm`: both are
read out of the CSR, which is the only place they can be stated without the row and the
certificate being able to disagree. No key is returned, so there is no key field anywhere on
this exchange. The CSR's common name meets the rules of `subject` on `POST
/api/v1/certificates` (printable, at most 64 characters) and is refused, not rewritten, when
it does not. So does the value of every other attribute of the CSR's subject, and a subject
with more than one common name is refused.
- SignedAuditBatch
- A signed batch of audit log entries.
- SignIntermediateCsrRequest
- Body of `POST .../tenants/{tenant_id}/signing-cas/sign-csr`. Deliberately carries no key
algorithm: it is the CSR's, read out of the request, because a caller who could state it
separately could state one the key does not have.
- SmtpConfig
- SMTP-specific configuration. `password` is write-only (D-01): `#[serde(skip_serializing)]`
means it is never emitted in a GET/serialized response. On the write path (D-02),
`#[serde(default)]` lets a caller omit the field entirely (deserializing to `""`); an empty
string is the sentinel for "no new secret supplied — preserve whatever is already stored"
(see `SurrealEmailConfigRepository:: set_org_config`). A non-empty value is a real secret to
encrypt+replace.
- SsfStream
- A registered SSF stream, as the management API returns it. **The push `Authorization` header
is never returned**; `authorization_header_set` says whether one is stored.
- SsfStreamInput
- `create_stream` and `update_stream` (a **replacement**) body.
- SubjectAltName
- A name to put in a `Server` certificate's `subjectAltName`. Stated explicitly in the
request, never read from a CSR: a CSR asking for a `subjectAltName` extension is still
refused. URI and e-mail names are not offered — nothing in AXIAM consumes them yet.
- SubjectAltNameDns
- The `dns` arm of {@see SubjectAltName} (`{"dns": …}`).
- SubjectAltNameIp
- The `ip` arm of {@see SubjectAltName} (`{"ip": …}`).
- Tenant
- A tenant is an isolated context within an organization. Each tenant has its own set of
users, roles, permissions, resources, certificates, and configuration. Tenants can represent
environments (dev/staging/prod) or separate business contexts.
- TenantSettingsOverride
- Partial tenant overrides. `None` = inherit from org baseline.
- TokenExchangeTrustRequest
- X4 trust for exchanging this provider's tokens (RFC 8693, external issuer). Mirrors
[`TokenExchangeTrust`] on the wire rather than reusing it directly so the API surface can
carry its own defaults: an admin PUTting a partial block gets the documented default for
anything they omitted, instead of a deserialization error listing fields they have never
heard of.
- TokenExchangeTrustResponse
- X4 trust as returned. Same shape as the request; nothing here is secret — an operator
reading a provider needs to see exactly what it trusts.
- TokenPolicy
- Token lifetime configuration.
- UpdateDirectoryConfig
- `PATCH /api/v1/tenants/{tenant_id}/directory` — a **sparse** update. Every member optional:
absent leaves the stored value, and for the two nullable members an explicit `null` clears
it.
- UpdateFederationConfigRequest
- The `UpdateFederationConfigRequest` schema from the server's OpenAPI document.
- UpdateGroup
- The `UpdateGroup` schema from the server's OpenAPI document.
- UpdateNotificationRuleRequest
- The `UpdateNotificationRuleRequest` schema from the server's OpenAPI document.
- UpdateOAuth2ClientRequest
- The `UpdateOAuth2ClientRequest` schema from the server's OpenAPI document.
- UpdateOrganizationRequest
- The `UpdateOrganizationRequest` schema from the server's OpenAPI document.
- UpdatePermissionRequest
- The `UpdatePermissionRequest` schema from the server's OpenAPI document.
- UpdateReactorRequest
- The `UpdateReactorRequest` schema from the server's OpenAPI document.
- UpdateResourceRequest
- The `UpdateResourceRequest` schema from the server's OpenAPI document.
- UpdateRole
- The `UpdateRole` schema from the server's OpenAPI document.
- UpdateScopeRequest
- The `UpdateScopeRequest` schema from the server's OpenAPI document.
- UpdateServiceAccount
- The `UpdateServiceAccount` schema from the server's OpenAPI document.
- UpdateTenant
- Fields that can be updated on an existing tenant.
- UpdateUserRequest
- The `UpdateUserRequest` schema from the server's OpenAPI document.
- UpdateWebhookRequest
- The `UpdateWebhookRequest` schema from the server's OpenAPI document.
- UserAttributeMap
- Which directory attribute feeds each AXIAM user field.
- UserResponse
- Public-safe user representation (no password_hash, no mfa_secret).
- WebauthnAttestationPolicy
- Per-tenant WebAuthn attestation policy (D5). One row per tenant; an absent row means
[`WebauthnAttestationPolicy::default`], which is today's behavior unchanged.
- WebauthnPolicy
- WebAuthn ceremony policy. One field today. It is a struct rather than a bare field on
[`SecuritySettings`] so that the next WebAuthn control has an obvious home, and so the admin
UI can group them. The *attestation* policy is deliberately not here: it lives in
[`crate::models::webauthn_policy::WebauthnAttestationPolicy`], is tenant-only, and cannot
join this model because AAGUID allow/block lists have no "more restrictive than" ordering to
validate an override against. User verification does, so it can.
- WebhookResponse
- Webhook response — omits the shared secret.
- NamespaceScope
- The `{org_id}`/`{tenant_id}` a namespace handle substitutes into its routes
(CONTRACT.md §27.4 rule 3).
- NetworkApi
- A tenant's network segments and the RADIUS reply profile each owns (RADIUS Live profile): a
segment is a node of the reserved /network subtree of the resource tree (kind, VLAN,
Filter-Id envelope, placement rank), and its profile is the typed `axiam-radius-reply/1`
record a decision renders. Every write is conditional on the `version` the caller read and
passes the server's write gate. The tenant's Session-Timeout cap is one more row of it
(get_policy, replace_policy): lowering it is always allowed, raising it is allowed and
audited. The decision route FreeRADIUS calls is not in this registry.
- NotFoundError
- `404 Not Found` on the §27 management surface — CONTRACT.md §27.4 rule 7.
- NotificationRulesApi
- Which events raise a notification, and to whom.
- Oauth2ClientsApi
- Registered OAuth2/OIDC clients -- the registration half of what §12, §21 and §26 then speak
to.
- OrganizationsApi
- Organizations an SDK client may read and configure. Creation and deletion are outside the
SDK boundary (§27.0).
- Page
- One page of a paginated §27 list response (CONTRACT.md §27.4 rule 4).
- PageRequest
- One page's worth of `?offset=`/`?limit=`/`?search=` for a paginated §27 list call
(CONTRACT.md §27.4 rule 4).
- PermissionsApi
- Permissions -- an action on a resource, optionally narrowed by a scope.
- PgpKeysApi
- OpenPGP keys used for audit signing and encrypted data export.
- PlatformApi
- Deployment-level probes and FIDO metadata state. Unauthenticated where the server leaves
them so.
- PrivacyApi
- GDPR self-service: the authenticated account's own export and erasure. Scoped to the caller,
never to another user.
- ReactorsApi
- Registration of §22 AMQP extension actors -- the admin surface §22.9 describes, which no SDK
could previously reach.
- ReadModifyWrite
- The read-modify-write form CONTRACT.md §27.4 rule 5 recommends for `replace` updates: a
read result turned back into the replacement body, every member carried over, so that
changing one field and sending the body back preserves the rest instead of resetting
every omitted member to its default.
- ResourcesApi
- The resource hierarchy role assignments cascade down.
- RolesApi
- Roles, their permission sets, and their assignment to users and groups.
- SamlApi
- A tenant's SAML 2.0 identity provider (CONTRACT §29): the registry of service providers, the
import of an SP's metadata into a *draft* registration (never a write), and the lifecycle of
the IdP signing credential. The protocol itself -- single sign-on, single logout, the IdP
metadata document -- is browser and SP-to-IdP surface under /saml/v2/{tenant_id}, an SP's
own SAML library speaks to it, and it is not in this registry.
- ScimTargetsApi
- A tenant's outbound SCIM targets (CONTRACT §31): the downstream SCIM 2.0 service providers
AXIAM pushes the tenant's users and groups to, each with its delivery state. The credential
AXIAM pushes with is write-only. Deleting a target does not deprovision anything downstream.
- ScimTokensApi
- Bearer tokens for the SCIM 2.0 provisioning endpoint.
- ScopesApi
- Sub-resource granularity, always addressed under their resource.
- ServiceAccountsApi
- Machine identities, their secrets, and the certificate a device-bound one authenticates
with.
- SettingsApi
- Effective settings, and the organization/tenant layers they resolve from.
- SsfApi
- A tenant's Shared Signals Framework streams (CONTRACT §32): which receiver -- an OAuth2
client of the tenant -- receives which CAEP and RISC security events, as SETs pushed to its
endpoint or polled. The receiver's own protocol (transmitter metadata, the SSF stream
management API, polling) is not in this registry.
- TenantsApi
- Tenants within an organization -- the isolation boundary every other namespace is scoped to.
- UsersApi
- Users within the client's tenant, and the administrative side of their second factor and
lockout state.
- ValidationError
- `400`/`422` on the §27 management surface — CONTRACT.md §27.4 rule 7.
- WebauthnPolicyApi
- Per-tenant attestation policy governing the §24 ceremonies, and the compliance report over
it.
- WebhooksApi
- Outbound event notifications. Delivery signatures are verified with the §13 helper, which
this namespace configures.
- BearerChallengeError
- The three RFC 6750 §3.1 error codes a `WWW-Authenticate: Bearer` challenge may name
(CONTRACT.md §28.4) — the complete vocabulary; nothing else, not even a well-formed
OAuth error code such as `invalid_grant`, is accepted by {@see Mcp::bearerChallenge()}.
- Mcp
- MCP resource-server helpers (CONTRACT.md §28, RFC 9728 + RFC 6750) — the ONE §28
implementation both {@see \Axiam\Sdk\Laravel\AxiamMiddleware} and
{@see \Axiam\Sdk\Symfony\AxiamAuthSubscriber} are built on, mirroring how this SDK
never duplicates a security-critical decision across its two framework bridges (D-02).
- McpGuardOptions
- Validates a §10 guard's CONTRACT.md §28.5 configuration and precomputes the challenge
values it will emit, at guard-CONSTRUCTION time so that an invalid one is a startup
failure rather than a surprise on the 401 path — the same discipline
{@see \Axiam\Sdk\AxiamClient}'s own constructor applies to every other CONDITIONAL
option.
- ProtectedResourceMetadata
- What {@see Mcp::protectedResourceMetadata()} returns: the RFC 9728 §2 document, the
path it is served at, and the URL that path resolves to (CONTRACT.md §28.1).
- AuthorizationRequest
- The result of `oidcBegin` — everything the caller needs to start an
authorization-code + PKCE login (CONTRACT.md §12.1).
- CibaInitiateRequest
- Arguments to {@see OidcClient::cibaInitiate()} — `CibaInitiateRequest` (CONTRACT.md §33.2).
- CibaInitiateResponse
- `CibaInitiateResponse` (CONTRACT.md §33.2) — what {@see OidcClient::cibaInitiate()} returns.
- CibaRequestSigner
- The key and algorithm for CIBA's signed authentication request (CONTRACT.md §33.2, CIBA
Core §7.1.1). Both are the caller's: there is no default for either, and the SDK signs under
exactly the algorithm given — the one the client registered as
`backchannel_authentication_request_signing_alg`.
- ClientRegistration
- An RFC 7591 §3.2.1 / RFC 7592 §3 client information response — what
{@see \Axiam\Sdk\AxiamClient::readClientRegistration()} and
{@see \Axiam\Sdk\AxiamClient::updateClientRegistration()} return (CONTRACT.md §28.12.1).
- DeviceAuthorization
- The `DeviceAuthorizationResponse` — what the device shows its user, plus the
`device_code` it polls with (CONTRACT.md §14.1).
- ExchangedToken
- The result of an RFC 8693 exchange (wire schema `TokenExchangeResponse`,
CONTRACT.md §15.1).
- FederationProvider
- One sign-in button (wire schema `PublicFederationProvider`, CONTRACT.md §12.1,
contract 1.38).
- FederationProviderList
- The result of `ssoProviders` (wire schema `PublicFederationProvidersResponse`,
CONTRACT.md §12.1).
- IdTokenValidator
- ID-token claim validation — CONTRACT.md §12.4, OIDC Core §3.1.3.7.
- IntrospectionResult
- The RFC 7662 introspection result (wire schema `IntrospectionResponse`, CONTRACT.md
§12.1). Only `$active` is guaranteed; the server omits the metadata fields for an
inactive token.
- MemoryOidcStateStore
- In-memory reference implementation of {@see OidcStateStoreInterface} (CONTRACT.md
§12.3 rule 1).
- MtlsEndpointAliases
- RFC 8705 §5 `mtls_endpoint_aliases` — the seven endpoints re-based on the host that
performs the mutual-TLS handshake (wire schema `MtlsEndpointAliases`, contract 1.40;
the seventh, CIBA's `backchannel_authentication_endpoint`, contract 1.58 — CONTRACT.md §21.3.1
as amended by §33).
- OidcClient
- The OIDC / SSO relying-party engine (CONTRACT.md §12) behind {@see
\Axiam\Sdk\AxiamClient}'s nine public `oidc*`/`introspect`/`revoke`/`sso*` methods.
- OidcConfiguration
- The OIDC Discovery 1.0 metadata document served by
`GET /.well-known/openid-configuration` (wire schema `OidcDiscoveryDocument`,
CONTRACT.md §12.1).
- OidcLoginFlow
- Shared "Login with AXIAM" core (CONTRACT.md §12) — the ONE begin/complete +
state-store + error-mapping path BOTH {@see \Axiam\Sdk\Laravel\OidcLoginController}/
{@see \Axiam\Sdk\Laravel\OidcCallbackController} and
{@see \Axiam\Sdk\Symfony\OidcLoginController}/{@see \Axiam\Sdk\Symfony\OidcCallbackController}
call, mirroring the TypeScript reference's `middleware/oidcLoginCore.ts` (the ONE §12
path, exactly as `AccessEnforcer` is the one §11 path shared by both framework
bridges in this SDK).
- OidcLoginOutcome
- What a login/callback handler should do next — one shape per outcome kind. Framework
controllers ({@see \Axiam\Sdk\Laravel\OidcLoginController}/`OidcCallbackController`,
{@see \Axiam\Sdk\Symfony\OidcLoginController}/`OidcCallbackController`) translate this
into their own framework's redirect/JSON response and add nothing of their own, so
Laravel and Symfony cannot drift (mirrors the TypeScript reference's
`OidcLoginOutcome` discriminated union).
- OidcStateEntry
- The tuple an {@see OidcStateStoreInterface} holds for one in-flight login.
- OidcTokenSet
- A token set returned by the OAuth2 token endpoint (wire schema `TokenResponse`),
returned by `oidcExchange`, `oidcRefresh` and `loginClientCredentials` (CONTRACT.md
§12.1).
- Pkce
- PKCE + CSPRNG primitives for the OIDC relying-party flow (CONTRACT.md §12.1
"`oidc_begin` inputs and construction", RFC 7636).
- PushedAuthorizationRequest
- The result of `AxiamClient::oidcPar()` (CONTRACT.md §26.1).
- RequestedPermission
- One `(resource, scopes)` pair a resource server requires (CONTRACT.md §20.1).
- RequestingPartyToken
- The result of the UMA ticket grant (CONTRACT.md §20.1).
- ResourceSet
- A UMA resource set — an AXIAM resource seen through the Protection API
(CONTRACT.md §20.1).
- RptPermission
- One entry of an RPT's `permissions` claim (CONTRACT.md §20.1).
- SsoCompleteResult
- The result of `ssoComplete` (wire schema `SsoLoginSuccessResponse`, CONTRACT.md
§12.1). Carries **no token material** — the session arrives as `Set-Cookie`, so the §4
cookie jar (shared by every `AxiamClient` Guzzle transport) is what actually captures
it (§12.1 note 6).
- SsoStartResult
- The result of `ssoStart` (wire schema `OidcStartResponse`, CONTRACT.md §12.1).
- SystemCibaClock
- The real {@see CibaClock}: `microtime(true)` and `sleep()`.
- UmaChallenge
- A parsed `WWW-Authenticate: UMA` challenge (UMA 2.0 §3.2, CONTRACT.md §20.3).
- VerifiedLogoutToken
- What a verified back-channel logout token names (CONTRACT.md §12.7.3).
- FfiOpaqueNative
- The real FFI binding to `libaxiam_opaque_ffi`.
- KsfParams
- The key-stretching function and cost a `/start` response names (CONTRACT.md §23.4).
- LoginExchange
- One in-flight login (CONTRACT.md §23).
- Opaque
- Entry points into `libaxiam_opaque_ffi` (CONTRACT.md §23).
- OpaqueEnrollment
- The `opaque` object CONTRACT.md §23 defines: a registration record and the server-issued
session handle that identifies the exchange it came from.
- OpaqueExchange
- One in-flight OPAQUE exchange, owning a native state handle.
- OpaqueLibrary
- Loads `libaxiam_opaque_ffi` once per process, memoizing failure as well as success.
- OpaqueMode
- The tenant's `opaque_mode`, as `login/start` reports it (CONTRACT.md §23.4 rule 7, §23.5).
- RegistrationExchange
- One in-flight enrolment (CONTRACT.md §23).
- AmqpLibReactorDelivery
- Adapts a `php-amqplib` {@see AMQPMessage} to {@see ReactorDelivery}
(CONTRACT.md §22.1).
- AmqpLibReactorTransport
- The `php-amqplib` implementation of {@see ReactorTransport} (CONTRACT.md §22.1,
§8b).
- ReactorAnswer
- What a reactor handler decided (CONTRACT.md §22.4, §22.10).
- ReactorConfig
- Identifies one reactor to {@see ReactorServer} (CONTRACT.md §22.1, §22.10,
§22.12).
- ReactorEvent
- One hook firing, delivered to a reactor and **already verified**
(CONTRACT.md §22.3).
- ReactorEvents
- The CONTRACT.md §22.5 event registry, §22.8's budget constants and §22.1's
topology helpers.
- ReactorEventSpec
- One hookable event from the CONTRACT.md §22.5 registry: its wire name, what a
reply may change, and what happens when the reactor does not answer.
- ReactorHandlers
- Declarative reactor handler binding — CONTRACT.md §22.14.
- ReactorProtocol
- The reactor wire protocol — CONTRACT.md §22.2, §22.3, §22.4.
- ReactorRejection
- A reactor delivery or handler answer this SDK refuses (CONTRACT.md §22.3,
§22.4).
- ReactorServer
- The CONTRACT.md §22 reactor runtime — §22.10's `reactor_serve`, spelled
{@see self::reactorServe()} in PHP by that subsection's per-language table.
- ReactorTelemetryEvent
- One reactor-runtime telemetry event (CONTRACT.md §19, §22.8).
- AccessDecision
- The full outcome of an access check, including the CONTRACT.md §11 rule 9
`reason_code`.
- AuthMiddleware
- `HandlerStack` middleware: injects `Authorization` (current access token) and
`X-Tenant-ID` on EVERY outgoing request, `X-Axiam-Tenant` (CONTRACT.md §5.2 rule 1,
contract 1.51) on every request while an acting tenant is set, and `X-CSRF-Token`
(captured from a prior response, {@see Session::csrfToken()}) on state-changing
requests (CONTRACT.md §3 non-browser CSRF, §5 tenant context contract).
- AuthzRestClient
- REST authorization transport (FND-04, CONTRACT.md §1): `checkAccess()`/`can()`/
`batchCheck()` over `POST /api/v1/authz/check[/batch]` — the ALWAYS-available authz
path (D-03). Reuses the caller-supplied Guzzle client (the same instance
{@see \Axiam\Sdk\Session} wires with {@see AuthMiddleware}/{@see RefreshMiddleware} on
its `HandlerStack`), so `Authorization`/`X-Tenant-ID`/`X-CSRF-Token` header injection
and the single-flight refresh-on-401 behavior (D-06) apply to authz calls exactly as
they do to every other REST call — this class never re-implements any of that.
- ReasonCode
- The three `reason_code` values CONTRACT.md §11 rule 9 defines.
- RefreshMiddleware
- `HandlerStack` middleware: on a `401` response, triggers the session's single-flight
refresh (CONTRACT.md §9, D-06, SC#2) and retries the ORIGINAL request exactly once
via the inner `$handler` — never a loop. All concurrent 401-triggering requests on
one {@see Session} share the SAME refresh `PromiseInterface`
({@see Session::refreshIfNeeded()}), so N concurrent expired-token requests still
result in exactly one `/api/v1/auth/refresh` call.
- Session
- Per-`AxiamClient` session state (CONTRACT.md §3/§4/§5/§9): owns the shared Guzzle
`CookieJar` (§4), captures/exposes the non-browser CSRF token (§3), and is the
single-flight home for the shared refresh `Promise` (§9, D-06).
- InMemoryReplayStore
- The default {@see ReplayStore}: one process's memory, entries expiring after the window.
- RefusedSet
- One SET a poll returned that {@see SsfReceiver::verifySet()} refused.
- SecurityEvent
- A verified Security Event Token — {@see SsfReceiver::verifySet()}'s result (CONTRACT.md
§32.7).
- SetErr
- One RFC 8936 `setErrs` entry: the RFC 8935 §2.4 `err` code and an optional description.
- SetVerificationError
- A Security Event Token refused by {@see SsfReceiver::verifySet()} (CONTRACT.md §32.7) — an
{@see AuthError}, as §32.7 requires, carrying the step that failed as a typed
{@see SetFailureReason}. {@see AuthError::getReason()} returns the same code as a string.
- SsfEventTypes
- The six event types AXIAM transmits and the two SSF stream events (CONTRACT.md §32.6), as
named constants. Event types are open: a SET of another type still verifies, and
{@see SecurityEvent::$eventType} carries it verbatim.
- SsfPollOptions
- Arguments to {@see SsfReceiver::poll()} (RFC 8936). Every member is passed through exactly
as given; an unset (`null`) one is not sent, so a poll with no options sends `{}`.
- SsfPollResult
- What {@see SsfReceiver::poll()} returns: the verified SETs and the refused ones, apart — and
the ones it could not judge.
- SsfReceiver
- The SSF receiver helper — CONTRACT.md §32.7 (contract 1.56).
- SupportedVersions
- The range of PHP versions this SDK is built and tested against.
- AxiamAccessAttributeListener
- Symfony CONTRACT.md §11 declarative-authorization enforcement listener: an
`EventSubscriberInterface` on `KernelEvents::CONTROLLER` — the SAME extension
point Symfony's own `#[IsGranted]` attribute is enforced from
(`Symfony\Component\Security\Http\EventListener\IsGrantedAttributeListener`).
- AxiamAuthSubscriber
- Symfony authentication subscriber (D-02, CONTRACT.md §10): listens to
`kernel.request`, extracts the bearer/cookie token, verifies it via
{@see AxiamClient::verifyLocally()} — the no-fallback seam mandated by §10.1 rule 8
— and populates the `axiam_user` request attribute with `user_id`/`tenant_id`/`roles`
on success. Short-circuits the request with a standardized 401 JSON error body on any
failure (missing token, invalid signature, expired token). Never duplicates
JWKS-verify logic itself (D-02 prohibition) — every security-critical decision is
made by {@see AxiamClient}.
- AxiamBundle
- The Symfony bundle bootstrap. This class intentionally carries no container
extension of its own — `AxiamAuthSubscriber` (`kernel.event_subscriber`),
`AxiamVoter` (`security.voter`), and `AxiamAccessAttributeListener`
(`kernel.event_subscriber`, CONTRACT.md §11 declarative authorization helpers)
are all wired via the consuming application's OWN `config/services.yaml` (manual
registration, Pitfall 5), exactly like the `config/bundles.php` entry that
registers this bundle itself. Registering this class is what tells Symfony's
kernel the AXIAM SDK bundle is present; it performs no additional auto-wiring
beyond that on its own.
- AxiamVoter
- Symfony authorization voter (D-02, CONTRACT.md §1/§10): a one-line delegation to
{@see AxiamClient::can()} — the server's additive-only RBAC engine (allow-wins,
default-deny, no explicit deny-override) is ALWAYS the authoritative
decision-maker. This class never caches a decision beyond the token's own TTL and
never implements a client-side deny-override (project RBAC constraint,
CLAUDE.md).
- OidcCallbackController
- Step 2 of "Login with AXIAM" (CONTRACT.md §12.1 `oidc_exchange`): validates the
IdP callback, consumes the single-use stored state, exchanges the authorization
code, and redirects (or replies `200 JSON`) on success. See
{@see OidcLoginFlow::complete()} for the full 400/401/503 failure mapping.
- OidcLoginController
- Step 1 of "Login with AXIAM" (CONTRACT.md §12.1 `oidc_begin`): builds the
authorization request, parks its `state`/`nonce`/`code_verifier` in the
configured {@see \Axiam\Sdk\Oidc\OidcStateStoreInterface}, and redirects the
browser to the IdP. All security-critical logic lives in {@see OidcLoginFlow} —
this class only translates its {@see OidcLoginOutcome} into an HTTP response.
- ProtectedResourceMetadataController
- Symfony's realization of CONTRACT.md §28.3's `serve_protected_resource_metadata`:
an invokable controller that serves the RFC 9728 protected-resource metadata
document, `200 application/json`, at the path {@see ProtectedResourceMetadata}
derived from the `resource` it was built from.
- UmaChallenger
- A configured `WWW-Authenticate: UMA` challenge emitter (CONTRACT.md §20.3, emit half).
- WebauthnChallenge
- A started ceremony: the server's options plus the token binding a response to them
(CONTRACT.md §24.1).
- WebauthnCredential
- A credential the user just enrolled — the `201` body of `register/finish`
(CONTRACT.md §24.1).
- WebauthnLoginResult
- A completed authentication ceremony (CONTRACT.md §24.3).
- WebauthnWorkspace
- The workspace a usernameless ceremony runs in (CONTRACT.md §24.1).
- AxiamWebhooks
- Verifies the `X-Axiam-Signature` HMAC-SHA256 header AXIAM attaches to every webhook
delivery (CONTRACT.md §13, T-145). Mirrors the server's signer
(`crates/axiam-api-rest/src/webhook.rs`'s `compute_signature_v2`): the MAC covers the
ASCII string `<t>.<raw_body>`, keyed with the webhook secret's raw UTF-8 bytes.
- WebhookEvent
- A webhook delivery whose `X-Axiam-Signature` has already been verified by
{@see AxiamWebhooks::verify()} (CONTRACT.md §13). {@see self::$eventType} and
{@see self::$deliveryId} are a best-effort parse of the verified body's `event`/`id`
JSON fields — a non-JSON or differently-shaped body still verifies successfully (the
MAC only covers the raw bytes, not their JSON shape), it simply leaves those two
properties `null`. Callers that need the delivery id for at-least-once dedup (§13.3
rule 7) should prefer the `X-Axiam-Delivery` header over relying solely on this parse.
- WebhookVerificationException
- Thrown by {@see AxiamWebhooks::verify()} when a webhook delivery fails signature
verification (CONTRACT.md §13.3 rule 6: "fail closed and quiet").
Traits
- TokenBindingSupport
- Shared machinery behind {@see TokenValidation::status()}/`verifyPossession()` and
{@see TokenIntrospection::status()}/`verifyPossession()` (CONTRACT.md §10.1 rule 9,
§10.3, contract 1.51).
Enums
- TokenStatus
- What a `validateToken`/`introspectToken` result means for the presenter — the three
cases CONTRACT.md §10.1 rule 9 and §10.3 distinguish (contract 1.51).
- JsonNull
- An explicit JSON `null`, as distinct from an ABSENT member (CONTRACT.md §27.4 rule 5,
"null is not absent").
- ChangeAction
- What a plan intends to do to one declared entity (CONTRACT.md §27.6).
- ManifestKind
- The entity kinds a §27.6 manifest can declare.
- ActorType
- The `ActorType` enumeration from the server's OpenAPI document.
- AttestationMode
- What attestation conveyance a registration ceremony requests, and whether the policy is
enforced at all. `None` is the default and reproduces today's behavior byte-for-byte:
`evaluate` allows every registration unconditionally, with no MDS lookup (D8 step 1).
- AttributeSource
- Where an attribute's value comes from. Every variant has a real source today; a variant with
none (a telephone number the OIDC `phone` scope gates behind its own consent, say) is
deliberately absent rather than mapped to an empty value.
- AuditOutcome
- The `AuditOutcome` enumeration from the server's OpenAPI document.
- AuthnRequestParamsMode
- Whether this client's authorization requests may carry OpenID Connect's
authentication-request parameters, or whether they are ignored (X7.1). The bundle this
governs is `prompt`, `max_age`, `acr_values`, `claims`, `id_token_hint`, `login_hint`,
`display`, `ui_locales` and `claims_locales`. It is **one** field rather than nine booleans
for the same reason [`ClientProfile`] is one field rather than a dozen: a client that
honours `max_age` but ignores `prompt=none` is not "mostly conformant", it is a client a
relying party cannot reason about. [`Ignore`](Self::Ignore) is the serde default and is
exactly what AXIAM has always done — unknown authorization-request parameters are dropped by
the query deserialiser and never reach a decision. Every row written before schema v54
therefore decodes to the behaviour it already had.
- CertificateStatus
- Status of a certificate in its lifecycle.
- CertificateType
- The purpose for which a certificate was issued.
- CertificationLevel
- FIDO certification level, as recorded in an MDS `statusReports` entry's `FIDO_CERTIFIED*`
status. Variant order is significant: `derive(PartialOrd, Ord)` gives `L1 < L1Plus < L2 <
L2Plus < L3 < L3Plus`, which `WebauthnAttestationPolicy::evaluate` (D8 step 9) relies on
directly for the `min_certification` boundary check (`entry_level >= policy_min`).
- CibaDeliveryMode
- How a CIBA client learns that a request has been decided (CIBA Core §5). `push` is
deliberately absent: AXIAM does not offer it, and the FAPI-CIBA profile forbids it — push
delivers the tokens themselves to a client endpoint, which makes the notification endpoint a
token sink.
- CibaRequestSigningAlg
- The JWS algorithm a CIBA client signs its authentication requests with (CIBA Core §4
`backchannel_authentication_request_signing_alg`, §7.1.1). Exactly the three algorithms
AXIAM verifies on any client-signed JWT (`axiam_oauth2::jose::PERMITTED_ALGORITHMS`): FAPI
2.0 §5.3.1.1's list. A registration naming anything else — `RS256`, `HS256`, `none` — is
refused rather than stored, so no row can hold an algorithm the verifier would not honour
(D-61).
- ClientAuthMethod
- How a client proves its identity at the token endpoint (RFC 8705 §2, OIDC Core §9 naming).
- ClientProfile
- Which security posture a client is registered under (X5.1). This is the FAPI "one switch".
- DeprovisionPolicy
- What happens downstream to a user who falls out of scope or is no longer active. Erasure
always deletes, whatever this says.
- DirectoryKind
- Which kind of directory server a configuration points at. It drives **defaults only**: the
external-id attribute, the group-membership strategy and the change attribute the sync job
reads. Every one of them is still an explicit, editable field of the configuration (or, for
the strategy and change attribute, derived from this value at the point of use); nothing
about the kind changes what is *allowed*.
- FailurePolicy
- What the server does when an interceptor does not produce a usable reply — timeout,
transport failure, bad signature, stale nonce, or a patch the allow-list rejects.
- KeyAlgorithm
- The type of key algorithm used for a certificate.
- ManagedBy
- Who created a client registration (D5, T21.4). The discriminator that separates a
registration an administrator made from one that arrived over an open endpoint. Three things
read it and each would otherwise have to infer provenance from something that is not
provenance: * `axiam_oauth2::fapi` refuses a FAPI profile on anything but
[`Admin`](Self::Admin) (I5) — a client nobody vetted cannot be financial-grade; * the
authorization endpoint forces a consent hop for every other value (D4) — an unrelated party
gets a question put to the end user, whatever scopes it asked for; * the T21.4 sweeper
deletes only [`Dcr`](Self::Dcr) rows, so an administrator's client is never swept however
long it sits unused. [`Admin`](Self::Admin) is the serde default and therefore what every
row written before T21.4 decodes to, which is the truth: they were all created through `POST
/oauth2-clients` by somebody holding `oauth2_clients:create`.
- MfaMethodType
- Type of MFA method.
- NameIdFormat
- How the assertion's `NameID` is formed (per service provider).
- NetworkSegmentKind
- What a segment is for.
- NotificationEventType
- Events that can trigger an admin notification.
- PermissionEffect
- Whether a grant permits an action or refuses it (B1, deny-override). # Precedence Default
deny -> an [`PermissionEffect::Allow`] grant permits -> a [`PermissionEffect::Deny`] grant
refuses, **and beats every allow**, wherever either sits in the resource hierarchy. Deny
wins; there is no most-specific-wins tie-break. That choice is deliberate and is argued in
full in `claude_dev/deny-override-design.md` §2.1. The short version: deny-override buys one
checkable property — **adding a deny rule can never widen access, and can never be undone by
adding allows** — and most-specific-wins buys expressiveness at the cost of making "is X
denied?" unanswerable without enumerating every other rule that might out-specify it.
- PgpKeyAlgorithm
- Key algorithm for OpenPGP keys.
- PgpKeyPurpose
- The purpose of an OpenPGP key.
- PgpKeyStatus
- Status of an OpenPGP key.
- RadiusServiceType
- `Service-Type` (RFC 2865 §5.6). Option B accepts only `framed_user`; the administrative
values are refused with a 400.
- RadiusTerminationAction
- `Termination-Action` (RFC 2865 §5.29).
- ReactorMode
- How a reactor participates in an event.
- SamlBinding
- A SAML 2.0 protocol binding (SAML Bindings §3). The response binding for Web Browser SSO is
always [`Self::HttpPost`], but the enum keeps both because SP metadata carries both, and an
`slo_url` may use either.
- SamlIdpCredentialStatus
- Where a signing credential is in its life. An open set: an SDK decodes a value it does not
know without failing.
- SamlIdpSlot
- Which slot a credential is issued into.
- ScimTokenStatus
- Why a token is or is not currently usable — for display only. The authentication path never
surfaces this distinction on the wire.
- SettingsScope
- Whether a settings row belongs to an organization or a tenant.
- SsfDeliveryMethod
- How SETs reach the receiver.
- SsfEventType
- The six event types AXIAM transmits (G-5). Stored and sent as their event-type URIs;
[`Self::ALL`] is the canonical order every list AXIAM returns is sorted in.
- SsfStatusActor
- Who set a stream's current status. A status an administrator set to anything but `enabled`
cannot be changed by the receiver (D-51).
- SsfStreamStatus
- A stream's SSF status (SSF 1.0 §8.1.2), with AXIAM's meaning pinned by D-51.
- SsfSubjectFormat
- Which RFC 9493 subject identifier names the user in the SETs of a stream (D-46).
- TenantKind
- What a tenant *is*, as distinct from what state it is in. Reserved rather than inferred: an
organization has exactly one tenant of kind [`Self::Organization`], enforced by a unique
index rather than by convention. Deriving it from a magic slug or from "the oldest tenant"
would make the organization scope something an operator could rename or delete by accident,
and it is the scope the super-admin lives in.
- TenantStatus
- Lifecycle status of a tenant. A `Suspended` tenant remains stored and its data isolated, but
is treated as administratively disabled. New tenants are `Active` by default.
- UnknownAaguidAction
- What to do with an AAGUID that has no MDS entry (i.e. FIDO Alliance has no metadata for it —
not necessarily malicious, MDS coverage is incomplete for some legitimate authenticators).
- UserNameSource
- Which AXIAM attribute becomes the downstream `userName`. The mapping is a fixed attribute
set, not a mapping language (D-57).
- UserStatus
- The `UserStatus` enumeration from the server's OpenAPI document.
- CibaDeliveryMode
- How a CIBA client receives the outcome, as it registered (CONTRACT.md §33.3 rule 1). There
is no push mode: AXIAM does not offer it.
- CibaSigningAlg
- The algorithms a signed CIBA authentication request may use (CONTRACT.md §33.2) — the
client's registered `backchannel_authentication_request_signing_alg`.
- SetFailureReason
- Why {@see SsfReceiver::verifySet()} refused a Security Event Token — the bracketed reason
codes of CONTRACT.md §32.7, one per verification step that can fail.
- WebauthnFailure
- A ceremony failure a caller can say something useful about (CONTRACT.md §24.6b rule 5).