nx-content-store-server
v1.0.6
Published
HTTP server for nx-content-store: stores, keys, content, revisions, backends, sync, compare, publish.
Readme
nx-content-store-server
HTTP server for nx-content-store: stores, keys, content, revisions, backends, sync, compare, and publish. Extends the managed content store with an nx-content backend adapter, sync/import/export, compare/drift, and publish (push to remote).
Install
npm install nx-content-store-server nx-content-store-clientUsage
Wire the server to your Express app and a ManagedContentStore instance (from your persistence layer, e.g. xronox-content-store):
import express from 'express';
import type { ManagedContentStore } from 'nx-content-store-client';
import { registerSyncAndPublishRoutes, InMemorySyncRunPersistence } from 'nx-content-store-server';
const app = express();
app.use(express.json());
const store: ManagedContentStore = myPersistenceAdapter; // your implementation
const syncRunPersistence = new InMemorySyncRunPersistence(); // or your SyncRunPersistence impl
registerSyncAndPublishRoutes(app, {
store,
syncRunPersistence,
audit: myAuditEmitter, // optional
});
app.listen(3000);Routes (Step 5)
All of these require secret or admin auth (e.g. x-ncs-secret-key header).
| Method | Path | Description |
|--------|------|-------------|
| POST | /stores/:storeId/sync | Run sync between source and target backend |
| GET | /stores/:storeId/sync-runs | List sync runs |
| GET | /stores/:storeId/sync-runs/:syncRunId | Get a sync run |
| POST | /stores/:storeId/compare | Compare two backends (drift) |
| POST | /stores/:storeId/backends/:backendId/publish | Publish nx-content backend (push to remote) |
Sync request body
{
"sourceBackend": "mongo-main",
"targetBackend": "content-git",
"prefix": "functions/",
"namespace": "default",
"variant": null,
"mode": "copy-if-different",
"deleteExtraneous": false,
"dryRun": false
}Compare request body
{
"sourceBackend": "mongo-main",
"targetBackend": "content-git",
"prefix": "functions/",
"namespace": "default",
"variant": null
}Responses use a standard envelope: { ok: true, data: ... } or { ok: false, error: { code, message }, meta?: { requestId } }.
nx-content backend config
For backends with type: 'nx-content', BackendBindingRecord.config supports:
mode:'dev' | 'prod'localRoot: local content root pathrepoUrl,branch,authToken: git remotevariant: optional variantexportRoot,prefix: optional path optionsallowPush: iftrue, publish is allowed (requiresrepoUrl)
API (programmatic)
- Adapters:
BackendAdapterRegistry,NxContentBackendAdapter,createNxContentResolver, mapping helpers - Services:
SyncApplicationService,CompareApplicationService,PublishApplicationService - Persistence:
SyncRunPersistence(implement or useInMemorySyncRunPersistence) - Validation:
validateSyncInput,validateCompareInput,validateNxContentConfig - Auth:
requireSecretOrAdmin,getAuthFromRequest
Tests
npm testPublishing
This package depends on nx-content-store-client from the registry. Release order: publish nx-content-store-client first, then nx-content-store-server. For local development in the monorepo, use npm link: from the repo root run npm link, then in this directory run npm link nx-content-store-client so the server uses the local package.
License
UNLICENSED
