docs: rewrite JsonRpcBundle docs, add SDK docs, move them under docs/api
en/docs/api/json-rpc-bundle/developers/known_issues/fixed.md
new file +57
ā0
1
+
# Fixed issues
2
+
3
+
Bugs from previous versions and the version in which they were fixed. If you are on an affected version, upgrade or use the workaround. Open issues are on the [Open issues](/docs/api/json-rpc-bundle/developers/known_issues/open) page.
4
+
5
+
<include>(.issues/post-response-only-http.md)
6
+
7
+
---
8
+
9
+
<include>(.issues/adapter-routes-overwritten.md)
10
+
11
+
---
12
+
13
+
<include>(.issues/autowire-method-arguments.md)
14
+
15
+
---
16
+
17
+
<include>(.issues/info-concat-ignored.md)
18
+
19
+
---
20
+
21
+
<include>(.issues/deprecated-not-in-openrpc.md)
22
+
23
+
---
24
+
25
+
<include>(.issues/xhr-requests-empty.md)
26
+
27
+
---
28
+
29
+
<include>(.issues/response-cache-shared.md)
30
+
31
+
---
32
+
33
+
<include>(.issues/notifications-without-fpm.md)
34
+
35
+
---
36
+
37
+
<include>(.issues/batch-process-cpu-and-token.md)
38
+
39
+
---
40
+
41
+
<include>(.issues/from-integer-becomes-float.md)
42
+
43
+
---
44
+
45
+
<include>(.issues/terminate-listeners-skipped.md)
46
+
47
+
---
48
+
49
+
<include>(.issues/versioned-routes-issues.md)
50
+
51
+
---
52
+
53
+
<include>(.issues/callback-forwarded-all-headers.md)
54
+
55
+
---
56
+
57
+
<include>(.issues/regressions-8-1.md)
en/docs/api/json-rpc-bundle/developers/known_issues/.issues/post-response-only-http.md
new file +12
ā0
1
+
### `rpc.post_response` was not fired for all executed requests
2
+
3
+
:::success subtitle="Fixed in 10.4.2"
4
+
Verified against the code of tags 9.2.1, 10.2.3, 10.4.1 and 10.4.2.
5
+
:::
6
+
7
+
**Symptom.**
8
+
9
+
* **Before 10.4.2:** for each HTTP request or console command, the event was fired **once** ā for the last `rpc.pre_response`. In a process batch, only one request received it, not each executed one.
10
+
* **10.2.x ā 10.4.1:** on `kernel.terminate`, the event was fired only when the carrier was the `RpcFromHttp` of that HTTP request. For calls via adapters (REST, etc.) it was not fired, so `#[RPC\CacheRelation]` invalidation and execution of notifications / callback did not work. For console commands the event was fired.
11
+
12
+
**Fix.** Requests are collected in `PostResponseQueue`, and the event is fired once for each successfully executed request ā for any carrier (`IRpcHttpCarrier` or execution via `RpcExecutor`) and for each batch item.
en/docs/api/json-rpc-bundle/developers/known_issues/.issues/adapter-routes-overwritten.md
new file +10
ā0
1
+
### Adapter routes overwrote each other across API groups
2
+
3
+
:::success subtitle="Fixed in 10.4.1"
4
+
Affected versions: 10.2.1 ā 10.4.0.
5
+
Based on the 10.4.1 release notes; not verified against the code.
6
+
:::
7
+
8
+
**Symptom.** Two imports of the same adapter `router.yaml` (for example, `/mcp` and `/mcp/internal`) produced identical route names, and the second import overwrote the first.
9
+
10
+
**Fix.** The adapter registers its `router.yaml` via `IApiRouteImport`; each import gets route names prefixed with the group.
en/docs/api/json-rpc-bundle/developers/known_issues/.issues/autowire-method-arguments.md
new file +12
ā0
1
+
### `#[Autowire]` in RPC method arguments did not work
2
+
3
+
:::success subtitle="Fixed in 10.3.1"
4
+
Affected versions: 10.0.1 ā 10.3.0.
5
+
Verified against the code of tags 10.0.6, 10.2.3 and 10.3.1.
6
+
:::
7
+
8
+
**Symptom.** A service marked with `#[Autowire]` in an RPC method argument was not injected.
9
+
10
+
**Cause.** `RpcServiceMapPass::processParams()` skipped every typed parameter, so such arguments were not registered in the method's locator.
11
+
12
+
**Workaround for older versions.** Constructor injection.
en/docs/api/json-rpc-bundle/developers/known_issues/.issues/info-concat-ignored.md
new file +10
ā0
1
+
### `#[RPC\Info(concat: ā¦)]` was ignored
2
+
3
+
:::success subtitle="Fixed in 10.3.1"
4
+
Affected versions: 10.0.0 ā 10.3.0.
5
+
Verified against the code of tags 9.2.1, 10.0.6, 10.2.3 and 10.3.1.
6
+
:::
7
+
8
+
**Symptom.** Methods always had the `.` separator regardless of `concat`.
9
+
10
+
**Important when upgrading.** After the fix, `concat` is applied again: if it is set and clients call methods using `.`, method names will change. Update the clients or remove `concat`.
en/docs/api/json-rpc-bundle/developers/known_issues/.issues/deprecated-not-in-openrpc.md
new file +10
ā0
1
+
### Deprecated methods were not marked in OpenRPC
2
+
3
+
:::success subtitle="Fixed in 10.3.1"
4
+
Affected versions: 9.2.1 ā 10.3.0.
5
+
Verified against the code of tags 9.1.5, 9.2.1, 10.2.3 and 10.3.1.
6
+
:::
7
+
8
+
**Symptom.** Methods with `@deprecated` or `#[\Deprecated]` did not get `"deprecated": true` in the documentation, even though the flag was collected in `Service::isDeprecated()`.
9
+
10
+
**Cause.** `OpenRpcAdapter` did not pass the flag to `OpenRpcSpecBuilder::buildMethod()`.
en/docs/api/json-rpc-bundle/developers/known_issues/.issues/xhr-requests-empty.md
new file +10
ā0
1
+
### XHR requests received an empty response
2
+
3
+
:::success subtitle="Fixed in 10.3.1"
4
+
Affected versions: 8.0.0 ā 10.3.0.
5
+
Verified against the code of tags 8.0.5, 9.2.1, 10.2.3 and 10.3.1.
6
+
:::
7
+
8
+
**Symptom.** A POST with the `X-Requested-With: XMLHttpRequest` header (for example, jQuery `$.ajax`) received an empty `200` response, and the method was not called.
9
+
10
+
**Fix.** Only a CORS preflight `OPTIONS` now gets an empty response.
en/docs/api/json-rpc-bundle/developers/known_issues/.issues/response-cache-shared.md
new file +10
ā0
1
+
### The response cache was shared between different implementations and versions with the same name
2
+
3
+
:::success subtitle="Fixed in 10.3.0"
4
+
Affected versions: 10.0.0 ā 10.2.3.
5
+
Verified against the code of tags 10.0.6, 10.2.3 and 10.3.1.
6
+
:::
7
+
8
+
**Symptom.** Methods with the same name in different [API versions](/docs/api/json-rpc-bundle/functionality/versions) or different [groups](/docs/api/json-rpc-bundle/functionality/groups), implemented by different classes, could receive each other's cached result.
9
+
10
+
**Fix.** The response cache key includes the implementation (`Class::method`) and the API version. After upgrading, the existing cache will miss once and be repopulated.
en/docs/api/json-rpc-bundle/developers/known_issues/.issues/notifications-without-fpm.md
new file +14
ā0
1
+
### Notifications were not executed without PHP-FPM
2
+
3
+
:::success subtitle="Fixed in 10.3"
4
+
Affected versions: 10.1.0 ā 10.2.3. Verified against the code of tags 10.1.0, 10.2.3 and 10.3.1.
5
+
:::
6
+
7
+
**Symptom.**
8
+
9
+
* **10.1.x:** outside PHP-FPM (Apache mod_php, the PHP built-in server), the `fastcgi_finish_request()` call failed with an error that the bundle silently caught, so `rpc.post_response` was not fired and the notification was not executed at all.
10
+
* **10.2.x:** the call was guarded by a `function_exists()` check, but without `ignore_user_abort()` PHP aborted execution if the client had already closed the connection, and the notification was silently lost.
11
+
12
+
In addition, execution printed the request and response to stdout via `echo`.
13
+
14
+
**Fix.** A notification is executed under any SAPI, even if the client has closed the connection; execution is logged via `LoggerInterface::info()`.
en/docs/api/json-rpc-bundle/developers/known_issues/.issues/batch-process-cpu-and-token.md
new file +10
ā0
1
+
### Process batch hogged a CPU core and passed the token on the command line
2
+
3
+
:::success subtitle="Fixed in 10.3.0"
4
+
Affected versions: up to and including 10.2.3.
5
+
Passing the token as an argument was verified against the code of tags 10.2.3 and 10.3.1; the CPU load ā based on the 10.3 release notes.
6
+
:::
7
+
8
+
**Symptom.** During a process batch, the wait loop used 100% of a core; the token and the request body were passed to child processes as command-line arguments and were visible in the process list.
9
+
10
+
**Fix.** No busy wait loop; the token is passed via the `UFO_RPC_TOKEN` variable, the request via stdin.
en/docs/api/json-rpc-bundle/developers/known_issues/.issues/from-integer-becomes-float.md
new file +8
ā0
1
+
### `@FROM` turned an integer into a float
2
+
3
+
:::success subtitle="Fixed in 10.3.0"
4
+
Affected versions: up to and including 10.2.3 (batch process mode).
5
+
Based on the 10.3 release notes; not verified against the code.
6
+
:::
7
+
8
+
**Symptom.** An integer result of a batch item, when substituted into another item via `@FROM:<id>(<field>)`, became a float, and a method with an `int` parameter got a type error.
en/docs/api/json-rpc-bundle/developers/known_issues/.issues/terminate-listeners-skipped.md
new file +12
ā0
1
+
### The application's terminate listeners did not run after RPC requests
2
+
3
+
:::success subtitle="Fixed in 10.3.0"
4
+
Affected versions: up to and including 10.2.3.
5
+
Verified against the code of tags 9.2.1 ā 10.2.3 (propagation is stopped) and 10.3.1 (it is not).
6
+
:::
7
+
8
+
**Symptom.** The application's `kernel.terminate` / `console.terminate` listeners (sending mail, flushing logs, Sentry, etc.) did not fire after RPC requests.
9
+
10
+
**Cause.** The bundle stopped propagation of these events.
11
+
12
+
**Important when upgrading.** Check the listeners that were previously silently skipped ā they now run.
en/docs/api/json-rpc-bundle/developers/known_issues/.issues/versioned-routes-issues.md
new file +8
ā0
1
+
### Batch and documentation protection on versioned addresses
2
+
3
+
:::success subtitle="Fixed in 10.2.1"
4
+
Affected versions: 10.0.0 ā 10.0.6, 10.1.0.
5
+
Based on the 10.2 release notes; not verified against the code.
6
+
:::
7
+
8
+
**Symptom.** A batch request to a versioned address (`/rpc/v2`) executed the items in the default version; versioned documentation addresses (`/rpc/v2`, `/rpc/v2/postman`) were not covered by `protected_doc`.
en/docs/api/json-rpc-bundle/developers/known_issues/.issues/callback-forwarded-all-headers.md
new file +13
ā0
1
+
### All client headers, including the token, were forwarded to the callback
2
+
3
+
:::success subtitle="Fixed in 10.0.6"
4
+
Affected versions: 9.2.0 ā 10.0.5. Verified against the code of tags 9.2.1 (all headers) and 10.0.6 (filter); intermediate 10.0.x patch versions were not checked individually.
5
+
:::
6
+
7
+
**Symptom.** For a single HTTP request with `$rpc.callback`, the server copied all headers of the incoming request, including the RPC token (`Ufo-RPC-Token`) and other credentials, into the POST request to the callback URL. For callbacks from process batch items, headers were not forwarded (the child process has no HTTP request).
8
+
9
+
**Cause.** `RpcCallbackProcessor::process()` took `$httpRequest->headers->all()` without a filter.
10
+
11
+
**Fix.** Only tracing headers are forwarded: `X-Request-Id`, `X-Correlation-Id`, `traceparent`, `tracestate`, `baggage`. The 9.2 release notes still describe the old behavior.
12
+
13
+
**What to do if you were on an affected version.** If clients passed `$rpc.callback` pointing to hosts you do not trust, rotate the tokens that may have ended up there.
en/docs/api/json-rpc-bundle/developers/known_issues/.issues/regressions-8-1.md
new file +10
ā0
1
+
### Regressions in versions 8.1.1ā8.1.5
2
+
3
+
:::success subtitle="Fixed in 8.1.6"
4
+
Affected versions: 8.1.1 ā 8.1.5.
5
+
Based on the 8.1 release notes; not verified against the code.
6
+
:::
7
+
8
+
**Symptom.** Release 8.1.1 rolled back some of the changes from 8.0.4ā8.1.0: enum schemas in the documentation and special `$rpc` parameters in `RequestCarrier`.
9
+
10
+
**Fix.** Special parameters ā in 8.1.5, enum schemas ā in 8.1.6. Do not stay on 8.1.1ā8.1.5; use 8.1.14.