Skip to main content

Spring-Properties (application.yml)

Diese Seite listet alle Einstellungen mit dem Präfix webtoolkit, die sich in einer Spring-Boot-Integration über die application.yml bzw. application.properties setzen lassen. Hintergründe zu einzelnen Themen stehen auf den jeweils verlinkten Seiten. Wie die Spring-Boot-Integration grundsätzlich funktioniert, beschreibt Spring-Integration.

Grundlagen​

Woher die Werte kommen​

Die Properties werden auf zwei Wegen gelesen:

  1. Server-Konfiguration (webtoolkit.* ohne weiteres Unterpräfix, außerdem networkConfiguration, exportConfiguration und clientConfiguration): Spring bindet diese Werte beim Start an die SpringPropertiesServerConfiguration, die anschließend als ServerConfiguration im ConfigurationManager hinterlegt wird. Die Property-Namen entsprechen den Setter-Namen der ServerConfiguration (setTileCachingEnabled(..) → webtoolkit.tileCachingEnabled). Programmatische Änderungen über ConfigurationManager.getServerConfiguration() überschreiben die Werte aus der application.yml, sofern sie nach dem Start erfolgen.
  2. Einzelne Komponenten (Add-ons, NG-Server, Export) lesen ihre Werte direkt per @Value oder über eigene @ConfigurationProperties-Klassen.

Schreibweise​

  • Bei Properties, die über @ConfigurationProperties gebunden werden, gilt Springs Relaxed Binding: tileCachingEnabled, tile-caching-enabled und TILECACHINGENABLED (als Umgebungsvariable WEBTOOLKIT_TILECACHINGENABLED) sind gleichwertig. In den Tabellen ist das mit RB markiert.
  • Properties, die per @Value gelesen werden, sollten exakt in der angegebenen Schreibweise gesetzt werden (gemischt camelCase bzw. kebab-case, je nach Property). Abweichende Schreibweisen werden nicht in jedem Fall erkannt.
  • Dauern (Duration) werden im Spring-Format angegeben, z. B. 20ms, 30s, 5m, 9h oder ISO-8601 (PT30S). Eine Zahl ohne Einheit wird als Millisekunden interpretiert.
  • Angaben „Minuten“, „Sekunden“ usw. in den Tabellen beziehen sich auf reine Zahlenwerte.

Zugangsdaten​

Passwörter, Tokens und Schlüssel (z. B. webtoolkit.flow.*, webtoolkit.cmis.password, webtoolkit.ddp.http.authentication) gehören nicht im Klartext in eine versionierte application.yml. Verwenden Sie Platzhalter auf Umgebungsvariablen (${MY_SECRET}) oder einen Secret-Store (z. B. Kubernetes Secrets, Vault).

Server-Konfiguration (webtoolkit-server)​

Annotationsprofile​

PropertyDefaultBeschreibung
webtoolkit.annotationProfiles (RB)UNDEFINEDKommaseparierte Liste der Classpath-Pfade zu Annotationsprofilen, z. B. /jwt-minimal-profile.xml. Siehe Annotationen.
webtoolkit.defaultAnnotationProfile (RB)UNDEFINEDName des Default-Annotationsprofils; muss dem Profilnamen in einer der Profildateien entsprechen.

Tile-Rendering und Caching​

Siehe auch Tile-Rendering und Konfiguration.

PropertyDefaultBeschreibung
webtoolkit.tileCachingEnabled (RB)falseServerseitiges Caching gerenderter Kacheln.
webtoolkit.tileCachingHeaderExpiryTime (RB)1800Gültigkeit der Kacheln im Browser-Cache in Sekunden. 0 deaktiviert das Browser-Caching inklusive ETag.
webtoolkit.tileCompressionType (RB)PNGJ_BEST_SPEEDBildformat/Kompression der Kacheln: IMAGEIO, IMAGEIO_NO_STREAM, PNGJ_BEST_COMPRESSION, PNGJ_BEST_SPEED, WEBP_LOSSY, WEBP_LOSSY_HIGH_QUALITY, WEBP_LOSSLESS. Bei WebP wird für Browser ohne WebP-Unterstützung automatisch PNG ausgeliefert.
webtoolkit.tileCancellationEnabled (RB)trueDer Client darf wartende oder laufende Tile-Requests abbrechen.
webtoolkit.cacheFilterEnabled (RB)trueServlet-Filter, der Caching-Header für statische Ressourcen setzt. Siehe Servlet-Support.
webtoolkit.noCacheFilterEnabled (RB)trueServlet-Filter, der No-Cache-Header für nicht cachebare Ressourcen setzt.
webtoolkit.tileCacheFilterEnabled (RB)trueServlet-Filter, der Caching-Header für Kacheln setzt.

Sicherheit und Sitzungstrennung​

PropertyDefaultBeschreibung
webtoolkit.tileSecurityFilterEnabled (RB)trueBindet Tile-Requests an die HTTP-Session des Clients, der die Kachel angefordert hat. Setzt eine HTTP-Session voraus (networkConfiguration.alwaysCreateHttpSession).
webtoolkit.tileSecurityFilterFailClosed (RB)falsetrue: Tile-Requests ohne registrierte Session-Bindung werden mit HTTP 401 abgelehnt. Beeinträchtigt das Failover im Mehrknoten-Betrieb. Details unter Konfiguration.
webtoolkit.useSessionSpecificDocumentKey (RB)falseBezieht die HTTP-Session in den Schlüssel des Dokument-Caches ein. Für Mehrbenutzer-/Mandantenbetrieb empfohlen, sonst können Dokumente zwischen Sitzungen sichtbar werden (DSGVO Art. 32). Siehe Konfiguration.
webtoolkit.remoteLoggingEnabled (RB)trueVom Client gesendete Log-Meldungen werden serverseitig protokolliert. Siehe Logging.

Thread-Pools​

Fehlkonfigurationen wirken sich auf das Gesamtsystem aus. n bezeichnet die Anzahl der verfügbaren Prozessoren, mindestens jedoch 2.

PropertyDefaultBeschreibung
webtoolkit.generalPoolCoreSize (RB)10Core-Größe des allgemeinen Thread-Pools (Dokumente laden usw.).
webtoolkit.generalPoolMaxSize (RB)50Maximale Größe des allgemeinen Thread-Pools.
webtoolkit.tileRendererPoolCoreSize (RB)n + 1Core-Größe des Tile-Render-Pools.
webtoolkit.tileRendererPoolMaxSize (RB)n + 1Maximale Größe des Tile-Render-Pools.
webtoolkit.tileRendererMaxParallelRenderingPerClient (RB)abgeleitetWie viele Render-Threads ein einzelner Client gleichzeitig belegen darf. 0 = keine Begrenzung. Der Default wird aus dem Default von tileRendererPoolMaxSize berechnet (> 8: Wert − 2, sonst Wert − 1) und bei Änderung von tileRendererPoolMaxSize nicht neu berechnet.
webtoolkit.tileRendererMaxQueueSizeActive (RB)500Maximale Anzahl Tile-Requests in der Queue des Executors. Darüber antwortet der Server mit HTTP 503.
webtoolkit.tileRendererMaxPendingRequestsSize (RB)250Maximale Anzahl Tile-Requests, die außerhalb des Executors warten.
webtoolkit.jadiceCorePoolSize (RB)nGröße des Thread-Pools der jadice document platform (ThreadPoolTaskService).
webtoolkit.jadiceCoreMaxPoolSize (RB)nMaximale Größe dieses Pools.
webtoolkit.flowWorkerPoolCoreSize (RB)2 · nCore-Größe des Pools für Anfragen an jadice flow.
webtoolkit.flowWorkerPoolMaxSize (RB)2 · nMaximale Größe dieses Pools.
webtoolkit.flowWorkerMaxQueueSizeActive (RB)200Maximale Anzahl wartender Flow-Anfragen.

Dokumentverarbeitung​

PropertyDefaultBeschreibung
webtoolkit.pdfStructureReadStrategy (RB)LENIENT_ON_ERRORLesestrategie für PDF-Dateien: STRICT, LENIENT_ON_ERROR, ALWAYS_GENERATE_XREF.
webtoolkit.documentReadSubTaskTimeout (RB)4000Timeout für Teilaufgaben beim Lesen eines Dokuments in Millisekunden.
webtoolkit.textContentBunchSize (RB)5Anzahl der Textzeilen, die beim Text-Streaming in einer Nachricht gebündelt werden. Mindestens 1.
webtoolkit.recoveryWaitTimeout (RB)20mWie lange ein Request auf eine bereits laufende Wiederherstellung (Recovery) desselben Dokuments wartet. Größer wählen als die längste erwartete Recovery.
webtoolkit.documentPipelineStallThreshold (RB)30mAb dieser Dauer gilt die Dokument-Pipeline als blockiert (Health-Status). Größer wählen als recoveryWaitTimeout. Siehe Monitoring.
webtoolkit.jadice.io.fileCacheInputStream.tempFolderPathjava.io.tmpdirVerzeichnis für temporäre Dateien des dateibasierten Stream-Caches. Siehe Caching.

Schutz vor ZIP-Bomben​

Gilt für den ZipEntryProvider, also das Öffnen von ZIP-Archiven.

PropertyDefaultBeschreibung
webtoolkit.zipThresholdEntries (RB)10000Maximale Anzahl Einträge, die gelesen werden.
webtoolkit.zipThresholdSize (RB)268435456Maximale Größe eines einzelnen entpackten Eintrags in Bytes (256 MiB).
webtoolkit.zipThresholdRatio (RB)10.0Maximales Verhältnis von entpackter zu gepackter Größe.

Netzwerk (webtoolkit.networkConfiguration)​

Hintergrund siehe Connection-API und Load-Balancing.

Property (Präfix webtoolkit.networkConfiguration.)DefaultBeschreibung
responseAggregationWindow (RB)70msZeitfenster, in dem Antworten an einen Client gesammelt und gebündelt verschickt werden. Klein halten, sonst entstehen spürbare Verzögerungen.
longPollTimeout (RB)5mMaximale Dauer eines Long-Poll-Requests.
webSocketTimeout (RB)9hIdle-Timeout einer WebSocket-Verbindung.
keepAliveInterval (RB)28sIntervall der Keep-Alive-Nachrichten. Unter 30 s, weil manche Infrastruktur länger offene Verbindungen trennt.
sessionTimeout (RB)30sNach dieser Zeit ohne Lebenszeichen wird die Client-Session serverseitig beendet.
alwaysCreateHttpSession (RB)trueErzeugt für jeden Client eine HTTP-Session (JSESSIONID). Voraussetzung für den Tile-Security-Filter.

Export (webtoolkit.exportConfiguration)​

Siehe Export. Die Stempel-Properties werden im Modul webtoolkit-export gelesen.

Property (Präfix webtoolkit.exportConfiguration.)DefaultBeschreibung
tempFolderPath (RB)java.io.tmpdirVerzeichnis für temporäre Exportdateien.
maxDownloadCount (RB)1Anzahl der Downloads, nach denen die Exportdatei entfernt wird.
tempFileCleanupInterval30Intervall des Aufräum-Jobs in Minuten.
tempFileMaxAge (RB)5Alter in Minuten, ab dem temporäre Exportdateien entfernt werden.
stampTextnicht gesetztStempeltext für exportierte Seiten. Ein Stempeltext im Exportauftrag hat Vorrang.
stampResolution200Auflösung (dpi) gestempelter Seiten.
stampFontSize24Schriftgröße des Stempels.
stampFontNamesans-serifSchriftart des Stempels.
stampOriginalPageScale100Skalierung des Originalinhalts in Prozent beim Stempeln.

E-Mail-Export (EML), Präfix webtoolkit.export.eml. – siehe EML-Konfiguration:

PropertyDefaultBeschreibung
subjectDokument ArchiveExportBetreff der erzeugten Mail.
bodyleerText der Mail.
contentTypetext/plain; charset=UTF-8MIME-Typ des Texts. Für HTML text/html; charset=UTF-8, dann muss der Text gültiges HTML sein.
fileNameArchiveExportName des Anhangs ohne Endung; .pdf wird angehängt.

Client-Konfiguration (webtoolkit.clientConfiguration)​

Diese Werte liefert der Server im NG-Stack über GET /client-configuration an den Browser aus. Siehe Konfiguration.

Property (Präfix webtoolkit.clientConfiguration.)DefaultBeschreibung
maxUploadFileSize (RB)10485760Clientseitige Obergrenze für Uploads in Bytes. Serverseitig zusätzlich spring.servlet.multipart.* setzen, siehe Upload.
fixedDevicePixelRatio (RB)0Festes Device-Pixel-Ratio für das Rendering; 0 = automatisch vom Browser.
defaultProfile (RB)nicht gesetztProfil, das die Schwärzungswerkzeuge des NG-Clients für neu erzeugte Schwärzungen verwenden.
pageReorderingEnabled (RB)falseErlaubt das Umsortieren von Seiten im Client.
keyboardHotkeys (RB)leerListe von Tastenkürzeln mit actionName, key und modifiers (Liste).
internalCustomProperties (RB)leerFreie Map für integrationsspezifische Schlüssel, die im Frontend ausgewertet werden.
webtoolkit:
clientConfiguration:
maxUploadFileSize: 50000000
keyboardHotkeys:
- actionName: <ActionName>
key: "s"
modifiers: [ctrl]
internalCustomProperties:
myCustomFlag: "true"

Spring Boot Starter (webtoolkit-spring-boot-starter)​

PropertyDefaultBeschreibung
webtoolkit.health.document-pipeline.enabledtrueRegistriert den Health-Indicator jwtDocumentPipeline, der in den aggregierten Health-Status eingeht. Siehe Monitoring.

NG-Server (webtoolkit-ng-server)​

Laden von Dokumenten per HTTP(S)​

PropertyDefaultBeschreibung
webtoolkit.uriProviderHttpEnabledfalseAktiviert den DocumentDataProvider für http/https-URIs. Achtung: Der Server lädt dann beliebige vom Client übergebene URLs (SSRF-Risiko); nur zusammen mit Netzwerk-Restriktionen oder einer URI-Prüfung einsetzen.
webtoolkit.ddp.http.authentication (RB)leerListe von Authentifizierungsregeln. Jede Regel enthält host oder regex sowie user+password, token oder session (Name des Session-Cookies, z. B. JSESSIONID).
webtoolkit.ddp.http.headers (RB)leerListe zusätzlicher Header mit host oder regex, header und value.
webtoolkit.ddp.http.disableCertificateValidation (RB)falseSchaltet die TLS-Zertifikatsprüfung ab. Nur für Testumgebungen.
webtoolkit.upload.tempFolderPathjava.io.tmpdirVerzeichnis für temporäre Dateien beim HTTP-Download (gemeinsam mit dem Upload-Add-on).
webtoolkit:
uriProviderHttpEnabled: true
ddp:
http:
authentication:
- host: docs.example.com
token: "Bearer ${DOCS_TOKEN}"
headers:
- regex: "https?://docs\\.example\\.com/.*"
header: X-Client
value: jadice

Speichern von Annotationen per HTTP​

Präfix webtoolkit.annotation.save.http.

PropertyDefaultBeschreibung
enabledfalseAktiviert den HttpSaveJadiceAnnotationsHandler.
base-url (RB)nicht gesetztBasis-URL des Ziel-Endpoints.
url-template (RB){baseUrl}/{streamId}?uploadAufbau der Ziel-URL. Platzhalter: {baseUrl}, {streamId}, {timestamp}, {uuid}.
filename-template (RB){streamId}Dateiname im Content-Disposition-Header. Platzhalter: {streamId}, {timestamp}, {uuid}.
connect-timeout (RB)30Verbindungs-Timeout in Sekunden.
request-timeout (RB)60Request-Timeout in Sekunden.
authentication (RB)leerWie bei webtoolkit.ddp.http.authentication, Methoden user+password, token oder session. Die erste passende Regel gilt. Unvollständige Regeln brechen den Start ab.
headers (RB)leerWie bei webtoolkit.ddp.http.headers. Alle passenden Regeln werden angewendet.

Weitere NG-Funktionen​

PropertyDefaultBeschreibung
webtoolkit.content-extract.flow.workflow-namedocument-enhancementjadice-flow-Workflow für die Inhaltsextraktion (Barrierefreiheit). Benötigt webtoolkit.flow.*.
webtoolkit.nlp.jobTemplatenicht gesetztjadice-flow-Job-Template für die Entitätserkennung. Ohne Wert schlägt die Funktion fehl.

Add-ons​

Upload (webtoolkit-addon-upload)​

Siehe Datei-Upload.

PropertyDefaultBeschreibung
webtoolkit.upload.enabledtrueAktiviert Upload-Controller, -Repository und Aufräum-Job.
webtoolkit.uriProviderUploadEnabledtrueAktiviert den DocumentDataProvider für hochgeladene Dateien.
webtoolkit.upload.tempFolderPathjava.io.tmpdirAblageverzeichnis für hochgeladene Dateien.
webtoolkit.upload.tempFileMaxAge30Alter in Minuten, ab dem hochgeladene Dateien gelöscht werden.
webtoolkit.upload.tempFileCleanupInterval30Intervall des Aufräum-Jobs in Minuten.

Drag & Drop (webtoolkit-addon-dnd)​

Siehe Drag & Drop.

PropertyDefaultBeschreibung
webtoolkit.dnd.enabledsiehe TextRepository, Message-Listener und Aufräum-Job sind ohne Angabe aktiv; das DnDServlet nimmt Anfragen aber nur bei true an. Daher explizit true setzen, wenn Drag & Drop genutzt wird.
webtoolkit.dnd.tempFolderPathjava.io.tmpdirAblageverzeichnis für per Drag & Drop übertragene Dateien.
webtoolkit.dnd.tempFileMaxAge30Alter in Minuten, ab dem Dateien gelöscht werden.
webtoolkit.dnd.tempFileCleanupInterval1Intervall des Aufräum-Jobs in Minuten.

jadice flow (webtoolkit-addon-jadice-flow)​

Verbindung zu jadice flow, genutzt von Flow-Format, OCR und den NG-Funktionen. Siehe Flow-Format. Präfix webtoolkit.flow.

PropertyDefaultBeschreibung
controller-urlnicht gesetztURL des jadice-flow-Controllers.
auth-tokennicht gesetztToken für den Controller.
request-timeout60Timeout für Anfragen an jadice flow in Sekunden.
eureka-urlnicht gesetztEureka-Server, falls der Controller per Service-Discovery gefunden wird.
eureka-usernamenicht gesetztBenutzer für Eureka.
eureka-passwordnicht gesetztPasswort für Eureka.
s3-urlnicht gesetztS3-Endpoint für den Datenaustausch.
s3-bucketnicht gesetztS3-Bucket.
s3-subdirnicht gesetztUnterverzeichnis im Bucket.
s3-access-keynicht gesetztS3-Access-Key.
s3-secret-keynicht gesetztS3-Secret-Key.
s3-regionnicht gesetztS3-Region.
s3-protocolhttpsProtokoll für S3.
s3-path-style-access-enabledtruePath-Style-Zugriff (https://host/bucket/...) statt virtueller Hosts.
s3-trust-self-signedfalseSelbstsignierte Zertifikate des S3-Endpoints akzeptieren. Nur für Tests.
s3-trust-allfalseJedes Zertifikat akzeptieren. Nur für Tests.
az-storage-account-namenicht gesetztAzure-Storage-Account (Alternative zu S3).
az-container-namenicht gesetztAzure-Blob-Container.
az-ignore-blob-already-existsfalseFehler „Blob existiert bereits“ ignorieren.
az-create-unique-blob-namefalseEindeutige Blob-Namen erzeugen.

Flow-Format (webtoolkit-format-flow)​

Präfix webtoolkit.format.flow., siehe Flow-Format.

PropertyDefaultBeschreibung
resize-max-width (RB)1600Maximale Breite in Pixeln für Bildergebnisse.
resize-max-height (RB)1600Maximale Höhe in Pixeln für Bildergebnisse.
formats (RB)leerListe der Konvertierungen, je Eintrag workflow-name, mime-types-input (kommasepariert) und format-output.

OCR (webtoolkit-addon-hocr)​

PropertyDefaultBeschreibung
webtoolkit.addon.ocr.worflow-nameocrjadice-flow-Workflow für OCR. Die Schreibweise worflow entspricht dem Code.
webtoolkit.addon.ocr.max-page-count-for-parallel-request10Bis zu dieser Seitenzahl werden Seiten parallel angefragt.

CMIS (webtoolkit-addon-cmis)​

Siehe CMIS-Integration.

PropertyDefaultBeschreibung
webtoolkit.cmis.serverurlnicht gesetztURL des CMIS-Servers.
webtoolkit.cmis.usernamenicht gesetztBenutzer.
webtoolkit.cmis.passwordnicht gesetztPasswort.
webtoolkit.cmis.sessionproperties—Session-Properties als JSON-String (experimentell). Pflicht-Property: Ohne Eintrag startet die Anwendung nicht; ggf. leer setzen.

IBM Content Navigator / FileNet P8 (webtoolkit-icn-integration, webtoolkit-p8-integration)​

PropertyDefaultBeschreibung
webtoolkit.icn.p8.urinicht gesetztURI des FileNet-P8-Content-Engine-Endpoints.
webtoolkit.icn.p8.domainnicht gesetztP8-Domäne; ohne Angabe die Default-Domäne der Verbindung. Der Object Store kommt mit dem Dokument.
webtoolkit.icn.p8.usernicht gesetztTechnischer Benutzer.
webtoolkit.icn.p8.passwordnicht gesetztPasswort des technischen Benutzers.
webtoolkit.icn.p8.annotationProfileFileNet P8Registriertes Annotationsprofil, mit dem FNP8-Annotationen gelesen werden; das Addon registriert FileNet P8 selbst.
webtoolkit.icn.p8.p8PropertyNameRenderSettingsnicht gesetztName der P8-Property, in der Render-Einstellungen gespeichert werden.
webtoolkit.icn.token.secretnicht gesetztShared Secret für signierte icn://-Token des ICN-Plugins (mind. 32 Zeichen). Aktiviert den Token-Modus, in dem kein Dokument hochgeladen wird.
webtoolkit.icn.token.previousSecretnicht gesetztZweites gültiges Secret während einer Rotation.
webtoolkit.icn.token.clockSkewSeconds60Toleranz beim Ablauf (exp) des Tokens in Sekunden.
webtoolkit.icn.token.recoverGraceSeconds86400Wie lange ein bereits geöffnetes Dokument nach Ablauf des Tokens noch wiederhergestellt werden darf.
webtoolkit.icn.staging.tempFolderPathjava.io.tmpdirAblage der aus P8 kopierten Staging-Dateien des Token-Modus.
webtoolkit.icn.staging.tempFileMaxAge30Alter in Minuten, ab dem Staging-Dateien gelöscht werden (werden bei Bedarf neu aus P8 geholt).
webtoolkit.icn.staging.tempFileCleanupInterval30Intervall des Aufräum-Jobs in Minuten.

icn://-Quellen sind immer signierte Token (P8, webtoolkit.icn.token.secret gesetzt): das ICN-Plugin überträgt kein Dokument, der Server liest Inhalt und Annotationen mit dem technischen User aus P8. Für reine Anzeige (Plugin- Option „P8-Annotationen" aus, oder Nicht-P8-Repositories) lädt das Plugin Dokumente über den Endpunkt POST /upload des Addons webtoolkit-addon-upload hoch und öffnet upload://; Ablage, Größenlimit und Aufräumen werden dort konfiguriert (webtoolkit.upload.*, spring.servlet.multipart.*), Annotationen gibt es dabei nicht. P8-Zugangsdaten werden ausschließlich hier konfiguriert und nie vom Plugin übertragen. Der IBM-FileNet-Client (Jace.jar) muss vom Betreiber auf den Classpath gelegt werden; ohne ihn startet der Server ohne P8-Funktionen. Der ICN-Benutzer aus dem Token (sub) wird über die ClientUserRegistry als jwt.userId in jede Log-Zeile der Sitzung übernommen; er dient nur dem Logging, nicht der Autorisierung.

Properties ohne webtoolkit-Präfix​

Das Add-on webtoolkit-addon-signature-support verwendet das Präfix jadice.dss (active, trustStoreFile, trustStoreType, trustStorePassword).

Beispiel​

webtoolkit:
annotationProfiles: /annotationConfigurations/my-profile.xml
defaultAnnotationProfile: My-Profile

tileCompressionType: WEBP_LOSSY
tileCachingEnabled: true
useSessionSpecificDocumentKey: true
pdfStructureReadStrategy: LENIENT_ON_ERROR

networkConfiguration:
responseAggregationWindow: 20ms
sessionTimeout: 30s
keepAliveInterval: 28s

exportConfiguration:
tempFolderPath: /var/lib/myapp/export
tempFileMaxAge: 5

clientConfiguration:
maxUploadFileSize: 50000000

flow:
controller-url: ${JF_CONTROLLER_URL}
auth-token: ${JF_AUTH_TOKEN}