x-content-store-server
v1.0.1
Published
HTTP server for x-content-store: stores, keys, content, revisions, backends, sync, compare, publish.
Readme
nx-content-store-server
HTTP server for x-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 x-content-storeUsage
Wire the server to your Express app and a ManagedContentStore instance (from x-content-store with your persistence adapter):
import express from 'express';
import { createManagedContentStore } from 'x-content-store';
import { registerSyncAndPublishRoutes, InMemorySyncRunPersistence } from 'nx-content-store-server';
const app = express();
app.use(express.json());
const store = createManagedContentStore({ persistence: myPersistenceAdapter });
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-api-key: secret-... or Authorization: Bearer <token>).
| 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: string, code?: string }.
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 x-content-store from the registry (^1.0.1). Release order: publish x-content-store first, then x-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 x-content-store so the server uses the local package.
License
UNLICENSED
