You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
DOC-3498: Expand acronyms on first prose use across on-premises pages
Expand 18 acronyms (OCI, JWT, LLM, SSE, TLS, CORS, MCP, NTP, HPA,
OTLP, IRSA, ADC, SSR, CSP, SIEM, PII, HA, mTLS) on first prose
occurrence per page for readers unfamiliar with the terms.
Copy file name to clipboardExpand all lines: modules/ROOT/pages/tinymceai-on-premises-advanced.adoc
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -150,7 +150,7 @@ The assistant calls the `search_knowledge_base` tool, retrieves the relevant pol
150
150
151
151
== Multi-tenant SaaS platform
152
152
153
-
*Use case:* A SaaS platform provides AI writing features to customers. Each customer gets isolated conversations, separate LLM budgets, and per-tenant configuration.
153
+
*Use case:* A SaaS platform provides AI writing features to customers. Each customer gets isolated conversations, separate large language model (LLM) budgets, and per-tenant configuration.
154
154
155
155
=== Architecture
156
156
@@ -171,7 +171,7 @@ Each environment provides:
171
171
* Customer B -> Environment `env-customer-b`
172
172
* Customer C -> Environment `env-customer-c`
173
173
174
-
. *Token server generates JWTs with the correct environment:*
174
+
. *Token server generates JSON Web Tokens (JWTs) with the correct environment:*
This page covers the data layer: the SQL database, Redis, and file storage.
7
-
For container runtimes, reverse proxies, TLS, Kubernetes, and ECS deployment, see the xref:tinymceai-on-premises-production.adoc[Production deployment guide].
7
+
For container runtimes, reverse proxies, Transport Layer Security (TLS), Kubernetes, and ECS deployment, see the xref:tinymceai-on-premises-production.adoc[Production deployment guide].
8
8
9
9
== Supported versions
10
10
@@ -439,7 +439,7 @@ docker run --add-host=host.docker.internal:host-gateway ...
439
439
440
440
== Redis
441
441
442
-
Every AI service instance must reach Redis. Redis holds session coordination, SSE delivery, and rate-limiting state. A temporary Redis outage degrades streaming but does not destroy persistent data.
442
+
Every AI service instance must reach Redis. Redis holds session coordination, Server-Sent Events (SSE) delivery, and rate-limiting state. A temporary Redis outage degrades streaming but does not destroy persistent data.
Copy file name to clipboardExpand all lines: modules/ROOT/pages/tinymceai-on-premises-frameworks.adoc
+6-6Lines changed: 6 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,10 +7,10 @@
7
7
This page covers the *editor-side* configuration that connects TinyMCE to the on-premises AI service. It assumes:
8
8
9
9
* The AI service is already running. See xref:tinymceai-on-premises-getting-started.adoc[Getting started] for setup instructions.
10
-
* A token endpoint exists that signs JWTs for the AI service. See xref:tinymceai-on-premises-jwt.adoc[JWT authentication] for back-end implementations.
10
+
* A token endpoint exists that signs JSON Web Tokens (JWTs) for the AI service. See xref:tinymceai-on-premises-jwt.adoc[JWT authentication] for back-end implementations.
11
11
* The TinyMCE API key has the AI feature enabled. Retrieve or upgrade a key at https://www.tiny.cloud/my-account/integrate/.
12
12
13
-
For general framework setup (installing wrappers, component structure, SSR patterns), see the existing integration guides:
13
+
For general framework setup (installing wrappers, component structure, server-side rendering (SSR) patterns), see the existing integration guides:
14
14
15
15
* xref:react-cloud.adoc[React]
16
16
* xref:vue-cloud.adoc[Vue.js]
@@ -151,7 +151,7 @@ This pattern avoids cookies entirely and works well for cross-origin setups.
151
151
152
152
== Cross-origin requests to the AI service
153
153
154
-
When `tinymceai_service_url` points to a different origin from the page (the common production case), the AI service must return CORS headers permitting the editor origin. The service reads the `ALLOWED_ORIGINS` environment variable for this.
154
+
When `tinymceai_service_url` points to a different origin from the page (the common production case), the AI service must return Cross-Origin Resource Sharing (CORS) headers permitting the editor origin. The service reads the `ALLOWED_ORIGINS` environment variable for this.
155
155
156
156
To verify CORS from a terminal:
157
157
@@ -167,7 +167,7 @@ The response should include `Access-Control-Allow-Origin: \https://app.yourcompa
167
167
168
168
169
169
170
-
== Content Security Policy
170
+
== Content Security Policy (CSP)
171
171
172
172
If the application sets a `Content-Security-Policy` header, allow the AI service origin in `connect-src`:
173
173
@@ -197,7 +197,7 @@ If using the Tiny CDN instead of self-hosted assets, also add `\https://cdn.tiny
197
197
|Confirm the fetch sends the session cookie (`credentials: 'include'`) or `Authorization` header that the back end expects.
198
198
199
199
|AI responses hang then time out
200
-
|Reverse proxy is buffering SSE
200
+
|Reverse proxy is buffering Server-Sent Events (SSE)
201
201
|Disable proxy buffering. See xref:tinymceai-on-premises-production.adoc[Production deployment].
202
202
203
203
|Browser console shows a CORS error on `/v1/conversations`
@@ -217,6 +217,6 @@ For other issues, see xref:tinymceai-on-premises-troubleshooting.adoc[Troublesho
Copy file name to clipboardExpand all lines: modules/ROOT/pages/tinymceai-on-premises-getting-started.adoc
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -238,7 +238,7 @@ Always create environments through the Management Panel UI. Environments created
238
238
239
239
=== Create the token server
240
240
241
-
The token server signs JWTs for the editor. The Node.js example below is for the demo only; the xref:tinymceai-on-premises-jwt.adoc[JWT authentication] guide contains production-ready endpoints in 8 languages (Node, Django, Flask, Laravel, Rails, .NET, Go, Spring Boot).
241
+
The token server signs JSON Web Tokens (JWTs) for the editor. The Node.js example below is for the demo only; the xref:tinymceai-on-premises-jwt.adoc[JWT authentication] guide contains production-ready endpoints in 8 languages (Node, Django, Flask, Laravel, Rails, .NET, Go, Spring Boot).
242
242
243
243
Create `package.json`:
244
244
@@ -351,7 +351,7 @@ npm start
351
351
352
352
=== Open the demo
353
353
354
-
Open *http://localhost:3000* in a browser. The editor loads with the AI toolbar. Select text and try the AI features. Responses stream in real time from the chosen LLM provider, processed entirely within the local infrastructure.
354
+
Open *http://localhost:3000* in a browser. The editor loads with the AI toolbar. Select text and try the AI features. Responses stream in real time from the chosen large language model (LLM) provider, processed entirely within the local infrastructure.
355
355
356
356
The TinyMCE AI on-premises service is now running.
357
357
@@ -423,7 +423,7 @@ event: done
423
423
data: {}
424
424
----
425
425
426
-
If the stream emits `event: error`, inspect the `data` payload. Provider errors (invalid API key, IAM denial, model unavailable) ride inside the SSE response. The HTTP status stays 200. See the xref:tinymceai-on-premises-troubleshooting.adoc[LLM provider errors] section in the Troubleshooting guide for details.
426
+
If the stream emits `event: error`, inspect the `data` payload. Provider errors (invalid API key, IAM denial, model unavailable) ride inside the Server-Sent Events (SSE) response. The HTTP status stays 200. See the xref:tinymceai-on-premises-troubleshooting.adoc[LLM provider errors] section in the Troubleshooting guide for details.
427
427
428
428
A successful round-trip confirms: container health, database connectivity, Redis connectivity, JWT signing, JWT verification, permissions checking, environment registration, LLM provider authentication, and SSE streaming. If problems persist after these checks, focus on the editor configuration next.
The on-premises AI service uses *HS256* (HMAC-SHA256, symmetric shared secret) for JWT authentication. This is different from the Tiny Cloud AI service, which uses RS256.
6
+
The on-premises AI service uses *HS256* (HMAC-SHA256, symmetric shared secret) for JSON Web Token (JWT) authentication. This is different from the Tiny Cloud AI service, which uses RS256.
The service allows up to 60 seconds of clock skew on the `exp` claim. Keep the token server and the AI service synchronized with NTP.
189
+
The service allows up to 60 seconds of clock skew on the `exp` claim. Keep the token server and the AI service synchronized with Network Time Protocol (NTP).
190
190
191
191
192
192
@@ -868,7 +868,7 @@ When debugging, start here. Most "auth failures" reflect wrong claim values rath
868
868
|`allowed: false` on specific endpoints only |Missing the specific permission |Decode token, check the `auth.ai.permissions` array against the table above.
869
869
|Token silently rejected, no decoded error |RS256 signature |Re-sign with HS256.
870
870
|`aud` claim type mismatch |`aud` issued as array instead of string |Some JWT libraries default to array `aud`. Force string.
871
-
|Editor shows "Failed to authenticate" |Token endpoint returned non-JSON, returned `token` as nested object, or CORS blocked the request |Open browser devtools → Network → inspect the response from `/api/ai-token`.
871
+
|Editor shows "Failed to authenticate" |Token endpoint returned non-JSON, returned `token` as nested object, or Cross-Origin Resource Sharing (CORS) blocked the request |Open browser devtools → Network → inspect the response from `/api/ai-token`.
872
872
|===
873
873
874
874
=== Sanity-check a token manually
@@ -906,6 +906,6 @@ Short-lived tokens limit exposure if a token leaks through a browser extension,
906
906
== See also
907
907
908
908
* xref:tinymceai-on-premises-getting-started.adoc[Getting started] -- end-to-end deployment, including a demo token server
909
-
* xref:tinymceai-on-premises-providers.adoc[LLM providers] -- configuring custom models through `MODELS` and the `ai:models:<provider>:<model-id>` permission syntax
909
+
* xref:tinymceai-on-premises-providers.adoc[large language model (LLM) providers] -- configuring custom models through `MODELS` and the `ai:models:<provider>:<model-id>` permission syntax
910
910
* xref:tinymceai-on-premises-troubleshooting.adoc[Troubleshooting] -- full troubleshooting catalog beyond JWT
911
911
* xref:tinymceai-on-premises-frameworks.adoc[Framework integration] -- editor-side integration patterns for React, Vue, and Angular, including `tinymceai_token_provider` wrappers
Copy file name to clipboardExpand all lines: modules/ROOT/pages/tinymceai-on-premises-production.adoc
+9-9Lines changed: 9 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,7 +17,7 @@ The AI service is stateless, persists all state to MySQL/PostgreSQL and Redis, a
17
17
18
18
== TLS / HTTPS
19
19
20
-
The AI service does not terminate TLS. Place a reverse proxy in front.
20
+
The AI service does not terminate Transport Layer Security (TLS). Place a reverse proxy in front.
21
21
22
22
=== Nginx example
23
23
@@ -48,7 +48,7 @@ server {
48
48
49
49
[IMPORTANT]
50
50
--
51
-
SSE streaming requires `proxy_buffering off`. Without it, AI responses appear to hang until the entire response is generated.
51
+
Server-Sent Events (SSE) streaming requires `proxy_buffering off`. Without it, AI responses appear to hang until the entire response is generated.
52
52
--
53
53
54
54
=== AWS ALB
@@ -383,7 +383,7 @@ spec:
383
383
[cols=",",options="header",]
384
384
|===
385
385
|Service |AWS recommendation
386
-
|Database |RDS for MySQL 8.0 (Multi-AZ for HA)
386
+
|Database |RDS for MySQL 8.0 (Multi-AZ for high availability (HA))
387
387
|Redis |ElastiCache for Redis 7 (cluster mode)
388
388
|Storage |Same-region S3 bucket
389
389
|Load balancer |ALB with `/health` target health check, 300 s idle timeout
@@ -400,16 +400,16 @@ spec:
400
400
|Practice |Implementation
401
401
|Network isolation |Place the AI service in a private subnet; expose only through a load balancer. Restrict database and Redis to the AI service security group.
402
402
|Block panel from the public internet |Restrict `/panel/` to an admin VPN or IP allowlist. The panel manages secrets and access keys.
403
-
|TLS everywhere |Terminate TLS 1.3 at the reverse proxy. Use internal mTLS between the AI service and the data layer where supported.
403
+
|TLS everywhere |Terminate TLS 1.3 at the reverse proxy. Use internal mutual TLS (mTLS) between the AI service and the data layer where supported.
404
404
|Secrets management |Use Vault, AWS Secrets Manager, Azure Key Vault, or GCP Secret Manager. Never store secrets directly in orchestration manifests or commit them to source control.
405
405
|Database encryption at rest |Turn on encryption at rest in the cloud provider console. RDS, Cloud SQL, and Azure Database enable this by default.
406
406
|Redis authentication |Always set `REDIS_PASSWORD` (or use a managed Redis instance with authentication enabled).
407
407
|Container security |Run as non-root, use a read-only filesystem where possible, and drop unnecessary Linux capabilities.
408
408
|Image scanning |Scan `registry.containers.tiny.cloud/ai-service` with Trivy, Snyk, or the registry's built-in scanner.
409
-
|Least-privilege JWTs |Grant only the permissions each user role requires. Avoid full-access tokens in production.
409
+
|Least-privilege JSON Web Tokens (JWTs) |Grant only the permissions each user role requires. Avoid full-access tokens in production.
410
410
|API secret rotation |Periodically create a new access key, add the new key to the configuration, then revoke the old key. The token endpoint reads the secret at request time.
411
-
|Audit logging |Enable `ENABLE_METRIC_LOGS=true` and ship logs to a SIEM.
412
-
|LLM API key rotation |Add the new key to the `PROVIDERS` array, restart the service, then revoke the old key after confirming the new one works.
411
+
|Audit logging |Enable `ENABLE_METRIC_LOGS=true` and ship logs to a Security Information and Event Management (SIEM).
412
+
|Large language model (LLM) API key rotation |Add the new key to the `PROVIDERS` array, restart the service, then revoke the old key after confirming the new one works.
413
413
|===
414
414
415
415
== Rate limiting
@@ -479,7 +479,7 @@ When enabled, the service writes a structured JSON entry for each request. Key f
Copy file name to clipboardExpand all lines: modules/ROOT/pages/tinymceai-on-premises-providers.adoc
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,7 @@
6
6
7
7
8
8
9
-
The `PROVIDERS` environment variable tells the AI service how to reach the upstream LLM. The `MODELS` environment variable tells the service which models are exposed to clients and which features each model supports. This page is the definitive reference for both: every supported `type`, every required field, and every known issue encountered in production.
9
+
The `PROVIDERS` environment variable tells the AI service how to reach the upstream large language model (LLM). The `MODELS` environment variable tells the service which models are exposed to clients and which features each model supports. This page is the definitive reference for both: every supported `type`, every required field, and every known issue encountered in production.
10
10
11
11
Start with the xref:tinymceai-on-premises-getting-started.adoc[Getting Started guide] if the AI service container is not yet running. The following sections assume a running `ai-service` container.
12
12
@@ -19,7 +19,7 @@ The AI service uses two related environment variables:
19
19
|Variable |Type |What it does
20
20
|`PROVIDERS` |JSON object |Map of provider IDs to provider configurations. Each entry says how to authenticate with one upstream LLM API.
21
21
|`MODELS` |JSON array |List of models exposed to clients. Each model points at a `PROVIDERS` entry and declares which features it can serve.
22
-
|JWT `auth.ai.permissions` |string array |Per-user authorization list. Includes `ai:models:<provider-key>:<model-id>` entries to gate access to individual models.
22
+
|JSON Web Token (JWT) `auth.ai.permissions` |string array |Per-user authorization list. Includes `ai:models:<provider-key>:<model-id>` entries to gate access to individual models.
23
23
|===
24
24
25
25
The `PROVIDERS` keys are arbitrary identifiers (for example `"openai"`, `"my-bedrock"`, `"team-azure"`). Each value object has a `type` field that picks the implementation:
IMPORTANT: The AI service does *not* use the AWS SDK default credential chain. `AWS_PROFILE`, `~/.aws/credentials`, IRSA, EC2 instance profiles, ECS task roles, and web identity tokens are all ignored. Inline the credentials in the `PROVIDERS` JSON.
381
+
IMPORTANT: The AI service does *not* use the AWS SDK default credential chain. `AWS_PROFILE`, `~/.aws/credentials`, IAM Roles for Service Accounts (IRSA), EC2 instance profiles, ECS task roles, and web identity tokens are all ignored. Inline the credentials in the `PROVIDERS` JSON.
IMPORTANT: The Vertex adapter ignores ADC, `GOOGLE_APPLICATION_CREDENTIALS`, GKE Workload Identity, and Compute Engine metadata server credentials. Inline either a service-account key or an account-bound API key in the `PROVIDERS` JSON.
508
+
IMPORTANT: The Vertex adapter ignores Application Default Credentials (ADC), `GOOGLE_APPLICATION_CREDENTIALS`, GKE Workload Identity, and Compute Engine metadata server credentials. Inline either a service-account key or an account-bound API key in the `PROVIDERS` JSON.
509
509
510
510
*JSON shape (service account):*
511
511
@@ -666,7 +666,7 @@ For any HTTP API that implements the OpenAI Chat Completions interface, includin
666
666
|===
667
667
|Field |Required |Notes
668
668
|`type` |Yes |Literal `"openai-compatible"`
669
-
|`baseUrl` |Yes |*Must include the `/v1` suffix.* Without it, every request fails with a misleading "Not Found" SSE error.
669
+
|`baseUrl` |Yes |*Must include the `/v1` suffix.* Without it, every request fails with a misleading "Not Found" Server-Sent Events (SSE) error.
670
670
|`apiKeys` |No |Sent as `Authorization: Bearer <key>`. Most local runtimes ignore it.
671
671
|`headers` |No |Additional headers such as auth tokens or tenant IDs.
0 commit comments