nx-content-store-server
v1.0.0
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-storeUsage
Wire the server to your Express app and a ManagedContentStore instance (from nx-content-store with your persistence adapter):
import express from 'express';
import { createManagedContentStore } from 'nx-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
For local development this package depends on nx-content-store via file:../... To publish to npm, set the dependency to "nx-content-store": "^1.0.0" (or the minimum version you need) so that installs resolve it from the registry. Publish nx-content-store first, then nx-content-store-server.
License
UNLICENSED
