Enterprise Edition
Lizenzierung — Ausführliche Referenz
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“Diese Seite ist die Detailreferenz für die Lizenzierungs-Oberfläche von NextPDF Enterprise — das Modul, das jede andere Enterprise-Capability auflöst. Sie behandelt das Berechtigungs-Zustandsmodell (EntitlementEvaluator, EntitlementStatus, EntitlementResult), das erzwungene Capability-Gating (FeatureGate, CapabilityCode, CapabilityRegistry), die Zwei-Timer-Kanal-Enforcement-Maschine (ChannelEnforcementPolicy, OnlineCheckScheduler) und den signierten Online-Client (LicenseClient). Die gewöhnliche Berechtigungsauswertung benötigt kein Netzwerk. Der Online-Client existiert für explizite Vorgänge zu Aktivierung, Heartbeat, Deaktivierung, Verify-Online und Renewal-Probe. Interne Mechanismus-Details verbleiben in der internen Dokumentation des Quell-Repositorys und liegen außerhalb des Geltungsbereichs dieses Handbuchs.
Verfügbarkeit & Lizenzierung
Abschnitt betitelt „Verfügbarkeit & Lizenzierung“Diese Capability wird in NextPDF Enterprise (nextpdf/enterprise) ausgeliefert und aktiviert sich mit einem Lizenz-Envelope der Enterprise-Stufe. Eine Bereitstellung ohne diese Berechtigung lädt die Klassen der Capability nicht. Editionen vergleichen und Lizenz erwerben.
Lizenzierung ist eine Basis-Oberfläche von Enterprise. Sie ist stets vorhanden, sobald das Enterprise-Paket neben dem Core-Paket installiert ist, denn sie ist die Oberfläche, die alles andere auflöst. NextPDF Pro hat keine separate Berechtigungs-Oberfläche; das Zustandsmodell, die Enforcement-Maschine und der Online-Client werden ausschließlich in nextpdf/enterprise ausgeliefert. NextPDF Core (Apache-2.0) hat überhaupt kein Berechtigungsmodell — ein Host, der unlizenziertes Apache-2.0-Verhalten benötigt, nutzt die Core-Engine direkt, nicht die Enterprise-Pipeline.
Öffentliche API-Oberfläche
Abschnitt betitelt „Öffentliche API-Oberfläche“Alle Typen befinden sich unter NextPDF\Enterprise\Licensing. Die Enforcement-Maschine liegt im Sub-Namespace Channel, die Runtime-Komposition in Runtime und die signierten Status-Typen in Online.
| Symbol | Parameter | Standardverhalten | Rückgabe | Wirft oder scheitert mit | Hinweise |
|---|---|---|---|---|---|
EntitlementEvaluator::evaluate() | ?LicenseKey $license, ?DateTimeImmutable $now = null | Bildet eine verifizierte Lizenz (oder null) auf die vollständige Berechtigungsentscheidung ab | EntitlementResult | Keine | Eine null-Lizenz ergibt das fail-closed No-License-Ergebnis |
EntitlementEvaluator::evaluateEnforced() | ?LicenseKey $license, EnforcementOutcome $outcome | Wandelt ein vorab berechnetes Enforcement-Ergebnis in ein Berechtigungsergebnis um | EntitlementResult | Keine | Die effektive Edition stammt aus dem Ergebnis; jede Enforcement-Herabstufung landet bei Core |
EntitlementEvaluator::resolveBrandingMode(), ::resolveBrandingStrategy() | ?LicenseKey $license, ?DateTimeImmutable $now = null | Löst die Branding-Entscheidung für generierte Ausgaben auf | BrandingMode / BrandingStrategy | Keine | Alleinige Branding-Instanz; nur der Evaluation-Kanal versieht mit Wasserzeichen |
EntitlementResult | Readonly-Value-Object | Trägt Status, Edition, Kanal, Branding-Modus, Runtime-/Update-/Support-Flags und eine optionale Warnung | — | Keine | Helfer: isFullyActive(), isExpired(), isDowngradedToCore(), shouldApplyEvaluationBranding() |
EntitlementStatus | String-basiertes Enum | Active, GracePeriod, DowngradedToCore, EvaluationExpired, NoLicense | — | Keine | PerpetualFallback bleibt erhalten, ist aber deprecated; nur beibehalten, damit Konsumenten vor 6.0 weiterhin kompilieren |
FeatureGate::hasCapability() | CapabilityCode $capability | Prüft die Capability gegen die erzwungene effektive Edition und den Pack-Zustand | bool | Keine | Fail-closed auf core bei jedem Resolver-Fehler |
FeatureGate::requireCapability() | CapabilityCode $capability | Läuft still durch oder wirft mit strukturiertem Upsell-Kontext | void | SpectrumAuthenticationException SPEC-LIC-001 (nicht lizenziert) oder SPEC-LIC-002 (Pack abgelaufen) | Der Kontext trägt required_capability, required_pack, current_packs, upgrade_info_url |
FeatureGate::isFeatureEnabled(), ::requireFeature() | string $feature | Legacy-Prüfung per Feature-Identifikator | bool / void | SpectrumAuthenticationException SPEC-AUTH-007 (require-Pfad) | Legacy-Kompatibilität; Capability-Prüfungen bevorzugen |
FeatureGate-Accessoren | Keine | Lizenz-Introspektion | Variiert | Keine | currentEdition(), isLicenseValid(), isInGracePeriod(), getActivePacks(), trialPolicy() |
CapabilityCode | String-basiertes Enum | Kanonische Capability-Identifikatoren (core.*, pro.*, enterprise.*, pack.*) | — | Keine | isPack(), packName(), minimumEdition(), forEdition() |
CapabilityRegistry | LicenseKey, Route-Muster | Route-zu-Capability-Auflösung und Pack-Suche vor dem Dispatch | Variiert | Keine | registerDefaultRoutes() deckt die dokumentierten Service-Routen ab |
LicenseKey | Readonly-Value-Object | Geparste, verifizierte Lizenz-Claims | — | Keine | isExpired(), isInGracePeriod(), isFullyExpired(), hasFeature(), hasCapability(), activePackNames(); maxSlots ist ausschließlich vertraglich |
LicenseValidator::buildVerifiedLicenseKey() | array $data | Erstellt einen typisierten LicenseKey aus einer bereits verifizierten Payload | LicenseKey | SpectrumAuthenticationException SPEC-AUTH-001 bei Schema-Verletzung | Unterstützt Schema 2.0, 1.0 und Legacy-Payloads |
PackDefinition / PackRegistry | Readonly-Value-Objects | Add-on-Pack-Zustand mit unabhängigem Ablauf und eigener Grace-Periode | Variiert | Keine | isActive(), isFullyExpired(), activePacks(), activeCapabilities() |
TrialPolicy | bool $enabled, int $maxPagesPerSecond = 2, Wasserzeichen-Felder | Trial-Durchsatzbegrenzungs-Policy | — | Keine | fromLicenseKey(), disabled(), isThrottled(); die Branding-Instanz bleibt beim Evaluator |
ChannelEnforcementPolicy::enforce() | LicenseKey $license, LocalState $state, int $systemNow, bool $revoked = false | Führt die Zwei-Timer-Maschine samt Widerruf und Trial-Neukennzeichnung aus | EnforcementOutcome | Keine | Widerruf überstimmt jeden Timer und jeden Trial-Zustand |
OnlineCheckScheduler::evaluate(), ::recordSuccessfulOnlineCheck() | Lizenz, lokaler Zustand, Zeitstempel | Zwei-Timer-Auswertung; Lease-Erneuerung aus verifizierter Serverzeit | EnforcementOutcome / LocalState | Keine | ONLINE_GRACE_SECONDS gewährt 48 Stunden Liveness-Grace über das Lease hinaus |
EnforcementDecision / EnforcementReason / EnforcementOutcome | Enums + Readonly-Value-Object | Active, Grace, DowngradedToCore plus der präzise Grund | — | Keine | Jeder Grund bildet deterministisch auf genau eine Entscheidung ab |
Runtime\EntitlementResolver::currentEntitlement() | Keine | Interface: die erzwungene Berechtigung, die die Runtime bereitstellt | EntitlementResult | Implementierungsabhängig | EnforcedEntitlementResolver komponiert Cache, State, Policy und Evaluator, fail-closed auf Core |
LicenseStateCache::get(), ::getOrThrow() | bool $forceRefresh = false | Cache verifizierter Lizenzen als Basis des Gates | ?LicenseKey | getOrThrow(): SpectrumAuthenticationException SPEC-AUTH-008; LicenseConfigurationException bei fehlerhafter Verdrahtung | invalidate(), isCacheValid() |
LicenseClient::activate(), ::heartbeat(), ::deactivate(), ::verifyOnline() | string $licenseJws, string $deploymentId, ?string $machineFingerprintHash = null, ?string $expectedLicenseId = null, ?string $clientNonce = null | Ein signierter Status-Austausch; die Antwort wird gegen den gepinnten Root verifiziert und an die gesendete Nonce gebunden | StatusResponse | LicenseClientException (Transport, Nicht-200, ungültige gelieferte Nonce); SpectrumAuthenticationException (gefälschte, manipulierte, veraltete, falsche-Nonce-, falsche-Lizenz-, falscher-Typ-Antwort) | Es wird stets nur der gesalzene Fingerprint-Hash gesendet, niemals ein roher Fingerprint |
LicenseClient::checkRenewal() | string $licenseId, string $customerId | Prüfung der Erneuerungsverfügbarkeit; 404 ist die normale Antwort „keine verfügbar“ | Renewal-Array (available, download_url, expires_at) | LicenseClientException (nicht erreichbar, Nicht-200/404 oder ein policy-abgelehnter download_url) | Die URL im unsignierten Body wird SSRF-geprüft, bevor sie entweichen kann |
LicenseClient::__construct() | Siehe Signatur-Block | Validiert Transport, URL-Schema und Pin-Set bei der Konstruktion | — | LicenseConfigurationException (nicht policy-durchsetzender Transport, unzulässiges Schema, reines HTTP ohne Pins, fehlerhaftes Pin-Set) | getPinSet() legt das aktive Pin-Set für Rotations-Tooling offen |
Online\StatusResponse | Readonly-Value-Object | Der verifizierte signierte Status | — | Keine | isLive() ist false bei revoked / expired / released; trägt leaseExpiresAt, Slot-Zählungen und einen Berechtigungs-Snapshot |
LicenseChannelMode / OnlineMode / OnlinePolicy | Enums + Readonly-Value-Object | Kanal- und Online-Policy-Claims | — | Keine | signed_source vs. ioncube; Online-Modus required / optional / disabled mit intervalDays und leaseDays |
LicenseEdition | String-basiertes Enum | Core, Pro, Enterprise | — | Keine | satisfies() implementiert die Tier-Hierarchie |
public function __construct(private ?EvaluationBrandingConfig $evaluationBrandingConfig = null)public function evaluate(?LicenseKey $license, ?DateTimeImmutable $now = null): EntitlementResultpublic function evaluateEnforced(?LicenseKey $license, EnforcementOutcome $outcome): EntitlementResultpublic function resolveBrandingMode(?LicenseKey $license, ?DateTimeImmutable $now = null): BrandingModepublic function resolveBrandingStrategy(?LicenseKey $license, ?DateTimeImmutable $now = null): BrandingStrategypublic function __construct(private readonly LicenseStateCache $licenseCache, private readonly EntitlementResolver $entitlementResolver, private readonly string $upgradeInfoUrl = self::DEFAULT_UPGRADE_URL)public function isFeatureEnabled(string $feature): boolpublic function requireFeature(string $feature): voidpublic function currentEdition(): ?stringpublic function isLicenseValid(): boolpublic function isInGracePeriod(): boolpublic function hasCapability(CapabilityCode $capability): boolpublic function requireCapability(CapabilityCode $capability): voidpublic function getActivePacks(): arraypublic function trialPolicy(): TrialPolicypublic function __construct(private readonly ClientInterface $httpClient, private readonly RequestFactoryInterface $requestFactory, private readonly StreamFactoryInterface $streamFactory, private readonly StatusX5cValidator $statusValidator, private readonly string $baseUrl = self::DEFAULT_BASE_URL, #[SensitiveParameter] private readonly ?string $apiKey = null, array $pinnedPublicKeys = [], array $backupPins = [], private readonly OutboundHttpPolicy $policy = new OutboundHttpPolicy(allowedSchemes: ['https'], connectTimeoutSeconds: 10, readTimeoutSeconds: 30, maxResponseBytes: 10_485_760, followRedirects: false, allowPrivateTargets: false, retryAttempts: 0, retryBaseBackoffMs: 250))public function activate(string $licenseJws, string $deploymentId, ?string $machineFingerprintHash = null, ?string $expectedLicenseId = null, ?string $clientNonce = null): StatusResponsepublic function heartbeat(string $licenseJws, string $deploymentId, ?string $machineFingerprintHash = null, ?string $expectedLicenseId = null, ?string $clientNonce = null): StatusResponsepublic function deactivate(string $licenseJws, string $deploymentId, ?string $machineFingerprintHash = null, ?string $expectedLicenseId = null, ?string $clientNonce = null): StatusResponsepublic function verifyOnline(string $licenseJws, string $deploymentId, ?string $machineFingerprintHash = null, ?string $expectedLicenseId = null, ?string $clientNonce = null): StatusResponsepublic function getPinSet(): ?PinSetpublic function checkRenewal(string $licenseId, string $customerId): arrayVerhaltensvertrag
Abschnitt betitelt „Verhaltensvertrag“Die Berechtigungsauswertung erzeugt einen von fünf aktuellen Zuständen, jeder mit einer festen Laufzeitkonsequenz:
| Status | Runtime | Effektive Capabilities | Updates / Support | Branding |
|---|---|---|---|---|
Active | erlaubt | berechtigte Edition + aktive Packs | ja (bezahlt); nein (Evaluation) | keines (bezahlt); Wasserzeichen (Evaluation) |
GracePeriod | erlaubt | berechtigte Edition + aktive Packs | ja | keines (bezahlt) |
DowngradedToCore | erlaubt | nur Core | nein | keines (bezahlt); Wasserzeichen (Trial) |
EvaluationExpired | eingeschränkt | keine | nein | Wasserzeichen |
NoLicense | deaktiviert (fail-closed) | keine | nein | Wasserzeichen |
- Der Ablauf einer bezahlten Lizenz deaktiviert niemals die installierte Runtime.
runtimeAllowedbleibt in jedem bezahlten Zustand true. Nach dem Grace-Fenster stuft sich die effektive Edition auf Core herab: Core-Capabilities laufen unbegrenzt weiter, alle Pro-/Enterprise-/Pack-Capabilities werden abgeschaltet, und Updates sowie Support werden entzogen. Der deprecatete FallEntitlementStatus::PerpetualFallbackbenennt die Ablauf-Policy vor 6.0 und existiert nur zur Kompilierungskompatibilität. - Nicht jeder Zustand endet in der Ausführung als Core. Grace behält die volle berechtigte Edition mit einer datierten Erneuerungswarnung. Der Ablauf einer Evaluation schränkt die Runtime ein und behält das Wasserzeichen. Der No-License-Zustand deaktiviert Enterprise-Pfade fail-closed und versieht jede Legacy-Ausgabe sichtbar mit einem Wasserzeichen, sodass sie niemals als bezahlte Ausführung durchgehen kann.
- Feste Auflösungsreihenfolge. Eine vollständig abgelaufene Lizenz löst keine Capability auf. Pack-Capabilities richten sich nach dem eigenen aktiven Zustand des Packs und dessen unabhängigem Ablauf. Editions-Capabilities werden gegen die erzwungene effektive Edition entlang der strengen Hierarchie Enterprise ⊇ Pro ⊇ Core aufgelöst. Rohes
LicenseKey::$editionwird für das Gating niemals herangezogen. - Zwei Timer; der restriktivere gewinnt. Der Berechtigungs-Timer (beide Kanäle) steuert Active, Grace und die Core-Herabstufung nach Grace. Der Online-Liveness-Timer gilt nur für den
ioncube-Kanal mit Online-Modusrequired: Das Lease zuzüglich einer 48-stündigen Liveness-Grace muss aktiv sein. Offline nach Ablauf des Lease pausiert Premium auf der Core-Stufe; eine spätere verifizierte Online-Prüfung stellt das Lease wieder her und Premium wird fortgesetzt. Dersigned_source-Kanal — und jeder nicht-required Online-Modus — hat keinen Liveness-Timer und bleibt offline- und Air-Gap-fähig. - Anti-Rollback ist deterministisch. Das Enforcement wertet gegen eine monotone Untergrenze aus: Die effektive Zeit ist das Maximum aus Systemuhr und zuletzt verifizierter Zeit, sodass eine Rückwärtsänderung der Uhr keine zusätzliche Zeit gewährt. Ein Rollback, der die Skew-Toleranz und die verbleibende Grace überschreitet, erzwingt die Core-Herabstufung.
- Leases schreiten nur mit vertrauenswürdiger Zeit voran. Eine erfolgreiche Online-Prüfung erfasst die verifizierte, signierte Serverzeit, niemals die lokale Uhr, sodass ein lokaler Vorwärtssprung der Uhr das Lease nicht aufblähen kann.
- Branding hat eine einzige Instanz. Nur der Evaluation-Kanal löst das Wasserzeichen aus. Eine bezahlte Lizenz löst in jedem Zustand zu keinem Branding auf, einschließlich der herabgestuften Zustände.
- Trial ist eine Policy-Schicht auf denselben Timern. Der Durchsatz ist begrenzt (Standard 2 Seiten/Sekunde), das Evaluation-Wasserzeichen gilt, und der Ablauf ist strikt ohne Grace. Nur der gemeldete Grund ändert sich; Entscheidung und effektive Edition folgen der bezahlten Maschine.
- Der Online-Vertrag ist Ende-zu-Ende signiert. Jede Anfrage trägt eine CSPRNG-Client-Nonce. Jede Antwort ist ein kompaktes EdDSA-JWS des Medientyps
application/nextpdf-status+jwt, verifiziert über eine x5c-Kette bis zu einem einkompilierten gepinnten Root und gebunden an die gesendete Nonce, die installierte License-ID und den aufgerufenen Endpunkt. Der Legacy-Transport mit unsigniertem Envelope ist ausgemustert; genau ein Vertrauenspfad bleibt. Konfigurierte SPKI-Pins reisen als HeaderX-NextPDF-Pinned-Public-Key, und ein Pin-Set muss einen Backup-Pin enthalten. - Keine Sitzplatz-Durchsetzung zur Laufzeit.
maxSlotsist ausschließlich vertraglich — keine Telemetrie und kein verpflichtender Phone-Home für den regulären Betrieb.
Grenzfälle & Fehlermodi
Abschnitt betitelt „Grenzfälle & Fehlermodi“- Eine Capability-Prüfung auf einer vollständig abgelaufenen Lizenz springt direkt auf „nicht verfügbar“, bevor eine Pack- oder Editions-Logik läuft.
- Ein Add-on-Pack kann ablaufen, während die Basislizenz aktiv ist. Die Ablehnung lautet dann Pack abgelaufen (
SPEC-LIC-002), nicht nicht-lizenziert (SPEC-LIC-001), und listet die aktuell aktiven Packs auf. - Eine lokale Enforcement-Zustandsdatei, die vorhanden, aber nicht lesbar oder nicht parsebar ist, ist ein Manipulationssignal. Die Maschine fällt fail-closed auf die Core-Herabstufung mit
EnforcementReason::CorruptState. Eine rechtmäßig fehlende Datei ist nicht korrupt und wird normal fortgesetzt. - Ein Uhr-Rollback unter die monotone Untergrenze, der die Skew-Toleranz (Standard 120 Sekunden) und die verbleibende Grace überschreitet, erzwingt die Core-Herabstufung deterministisch.
- Ein abgelaufenes Liveness-Lease stuft eine ansonsten aktive
ioncube-Lizenz herab; der Berechtigungsablauf stuft unabhängig vom Lease-Zustand herab. evaluate(null)ist fail-closed: Die Runtime ist nicht erlaubt, das Wasserzeichen gilt, und die Warnung nennt die Preis-URL. Hosts, die unlizenziertes Core-Verhalten benötigen, müssen die Core-Engine direkt konstruieren.- Eine abgelaufene Evaluation-Lizenz hat keine Grace und keinen Fallback; die Runtime ist eingeschränkt und das Wasserzeichen bleibt.
checkRenewal()behandelt HTTP 404 als die normale Antwort „keine verfügbar“. Jeder andere Nicht-200 löstLicenseClientExceptionaus, und eindownload_url, der die Outbound-Policy verletzt, scheitert fail-closed, bevor er die Methode verlassen kann.- Eine gefälschte, manipulierte, veraltete, falsche-Nonce- oder falsche-Lizenz-Statusantwort ergibt niemals eine
StatusResponse; die Verifikation wirftSpectrumAuthenticationException. Ein signierter, aberrevoked-,expired- oderreleased-Status verifiziert sich und tritt als Herabstufungssignal in Erscheinung (isLive()ist false). - Eine Statusantwort, die für einen anderen Austausch erzeugt wurde, wird abgelehnt: Der verifizierte
response_typemuss zum aufgerufenen Endpunkt passen. FeatureGatefällt bei jedem Resolver-Fehler fail-closed: Die effektive Edition wird aufcoreherabgestuft und keine Premium-Capability wird gewährt.EnforcedEntitlementResolverist Ende-zu-Ende fail-closed: Jede Ausnahme in seiner Kette ergibt das No-License-(Core-)Ergebnis und ein PSR-3-Fehlerprotokoll, niemals eine Premium-Gewährung.
FIPS-Modus-Verhalten
Abschnitt betitelt „FIPS-Modus-Verhalten“Die Lizenzierungsschicht fügt keine eigene kryptografische Policy hinzu. Lizenz- und Statussignaturen sind Ed25519-Verifikationen, die vom Krypto-Provider des Hosts durchgeführt werden. In einem FIPS-beschränkten Build scheitert ein Algorithmus, den der Provider nicht zulässt, an der kryptografischen Grenze mit einem expliziten Fehler; nichts wird stillschweigend herabgestuft. Dies sind Capability-Aussagen über NextPDF-Code: NextPDF ist kein validiertes kryptografisches Modul, besitzt keine Zertifizierung und gewährt keine.
Konformität
Abschnitt betitelt „Konformität“| Aussage | Standard | Klausel |
|---|---|---|
| Lizenzdateien und Statusantworten sind JWS in Compact Serialization, fail-closed verifiziert. | RFC 7515 | §3.1 |
| Lizenz- und Statussignaturen sind Ed25519. | RFC 8032 | §5.1 |
| Die x5c-Kette in einer signierten Antwort validiert bis zu einem einkompilierten gepinnten Vertrauensanker zurück. | RFC 5280 | §6.1 |
| Ein konfiguriertes SPKI-Pin-Set muss einen Backup-Pin für einen noch nicht ausgerollten Schlüssel enthalten. | RFC 7469 | §4.3 |
Verifizierte Claims (iss, aud, exp, nbf, iat) sind registrierte Claim-Namen. | RFC 7519 | §4.1 |
Alle Klauseln sind paraphrasiert; kein normativer Text wird wiedergegeben. NextPDF erhebt keinen Zertifizierungsanspruch. Unterstützung ist nicht gleich Konformität, und Konformität ist nicht gleich Zertifizierung. Das Modul richtet sein Verhalten als Capability an den zitierten Klauseln aus; die Annahme eines Lizenz- oder Status-Envelopes wird vom eigenen gepinnten-Root-Verifizierer von NextPDF entschieden, nicht von einer externen Instanz.
Entwicklungshinweise
Abschnitt betitelt „Entwicklungshinweise“- Konstruieren Sie
LicenseClientmit einem policy-durchsetzenden Transport (kanonischSecurityAwareHttpClient). Ein roher PSR-18-Client wird bei der Konstruktion abgelehnt, damit Lizenzverkehr niemals ohne die Anti-SSRF-, No-Redirect-, Byte-Cap- und Timeout-Kontrollen gesendet werden kann. - Eine vom Aufrufer bereitgestellte Client-Nonce muss zu mindestens 16 Byte Entropie dekodieren. Die Quelle begründet diese Grenze mit RFC 8555 §6.5; diese Klausel liegt außerhalb des zitierten Korpus, daher wird die Grenze hier ausschließlich aus der Produktquelle angegeben.
- Gaten Sie Features über
FeatureGate; verzweigen Sie niemals auf rohesLicenseKey::$edition. Das Gate zieht nur die erzwungene effektive Edition heran und fällt fail-closed aufcore. - Schalten Sie in neuem Code nicht auf den deprecateten
EntitlementStatus::PerpetualFallback. Prüfen Sie stattdessenisDowngradedToCore()oder matchen SieDowngradedToCore. - Behandeln Sie eine Capability-Ablehnung als Remediation-Payload. Reichen Sie ihren strukturierten Kontext und die Upgrade-URL an den Aufrufer weiter, statt sie zu einem generischen Fehler zusammenzufalten.
- Dieses Modul betrifft kryptografische Funktionalität; behandeln Sie es in Ihrem eigenen Review als sicherheitskritisch. Kapazitäts- und Sitzplatzbedingungen werden durch den Lizenzvertrag geregelt, nicht durch Laufzeit-Enforcement. Diese Referenz ist keine Rechtsauskunft; konsultieren Sie Ihre eigenen Compliance- und Rechtsberater.
Veröffentlichungsgrenze
Abschnitt betitelt „Veröffentlichungsgrenze“Diese Seite dokumentiert ausschließlich extern beobachtbares Verhalten und die unterstützte öffentliche API-Oberfläche. Interne Namespace-Pfade, Hilfsklassen, Mechanismus-Tabellen, Runbook-Dateinamen und Ticket-Präfixe liegen außerhalb des Geltungsbereichs.
Siehe auch
Abschnitt betitelt „Siehe auch“- Lizenzierung — NextPDF Enterprise — die Capability-Seite mit Anleitung zu Einrichtung und Integration.
- Abrechnung — Detailreferenz — Plan-Stufen, Overage-Policies und Rollover.
- SaaS — Ausführliche Referenz — die mandantenfähige Service-Oberfläche, die die Routen-Map schützt.
- Branding — Ausführliche Referenz — die Branding-Strategien, die der Evaluator auflöst.