Frontmatter
| id | 9455 |
| title | Integrate RPC API into Pipeline Architecture (Connection.Rpc) |
| state | Closed |
| labels | enhancementaiarchitecturecore |
| assignees | tobiu |
| createdAt | Mar 12, 2026, 10:03 PM |
| updatedAt | Mar 25, 2026, 11:34 AM |
| githubUrl | https://github.com/neomjs/neo/issues/9455 |
| author | tobiu |
| commentsCount | 1 |
| parentIssue | 9449 |
| subIssues | [] |
| subIssuesCompleted | 0 |
| subIssuesTotal | 0 |
| blockedBy | [] |
| blocking | [] |
| closedAt | Mar 25, 2026, 11:34 AM |
Integrate RPC API into Pipeline Architecture (Connection.Rpc)
tobiu cross-referenced by #9449 on Mar 12, 2026, 10:03 PM
tobiu added parent issue #9449 on Mar 12, 2026, 10:04 PM
tobiu assigned to @tobiu on Mar 12, 2026, 10:04 PM

tobiu
Mar 25, 2026, 11:30 AM
Input from Gemini 3.1 Pro:
✦ I have successfully implemented and committed the fix for this issue.
Actions Taken:
- Created
src/data/connection/Rpc.mjsto act as an adapter between the new Pipeline architecture and the existingNeo.manager.rpc.Messagerouter.- Added a generic
execute()method toNeo.data.Pipelineto handle arbitrary RPC proxy methods.- Refactored
Neo.remotes.Api#registerto analyzeremotes-api.jsonendpoint configs. If an endpoint specifiesparserornormalizerconfigurations, it now dynamically instantiates a Pipeline in the App Worker (which in turn uses IPC to spawn the remote execution counterpart in the Data Worker). The generated proxy function is cleanly wrapped, sending the raw Data Worker response through the shaping pipeline before fulfilling the promise in the UI.The "Merged Universe" is now foundational; data shaping is completely agnostic to whether the transport is Fetch, WebSocket streams, or an RPC proxy.
tobiu closed this issue on Mar 25, 2026, 11:34 AM
Goal
Unify the standalone RPC API with the Data Pipeline architecture. Allow
Neo.data.Storeto use RPC as a transport, and conversely, allow standalone RPC calls to utilize Parsers and Normalizers.Context
Currently, the RPC API bypasses all parsing and normalization. If a Store uses an
apiconfig, it calls generated proxy functions that return raw JSON directly from the Data Worker to the App Worker Store. This prevents us from using powerful Normalizers (likeTree) with RPC data.We need to create a "Merged Universe" where data shaping is transport-agnostic and available everywhere.
Acceptance Criteria
1. Store to RPC (Connection.Rpc)
Neo.data.connection.Rpcextendingconnection.Base.urlconfig, it accepts anapiconfig (e.g.,'MyApp.backend.ColorService').read()method acts as an adapter: it invokes the underlying RPC proxy method within the Data Worker.Pipeline, which pipes it through theParserandNormalizerbefore sending the final data back to the App Worker Store.2. RPC to Pipeline (The Merged Universe)
Neo.remotes.Apito inspectremotes-api.jsonconfigurations.parserornormalizerconfig, thegenerateRemoteproxy function must be wrapped.ViewControllercalls this RPC proxy, the Data Worker must automatically pipe the backend's raw response through the specified Pipeline components before fulfilling the Promise (or triggering the callback) back in the App Worker.