nx-content-store-client
v1.0.5
Published
Public HTTP client SDK for the nx-content-store API
Maintainers
Readme
nx-content-store-client
Public HTTP client SDK for the nx-content-store API.
Use this package to talk to any compatible nx-content-store-server instance — whether hosted or self-hosted.
Installation
npm install nx-content-store-clientQuick start
import { createContentStoreClient } from 'nx-content-store-client';
const client = createContentStoreClient({
baseUrl: 'https://your-store-server.example.com',
storeId: 'my-store',
secretKey: 'sk_...',
});
// Get content
const text = await client.content.get({ key: 'blocks/hero' });
// Set content
await client.content.set(
{ key: 'blocks/hero' },
{ content: '# Hello world', format: 'md' }
);Config
interface ContentStoreClientConfig {
baseUrl?: string; // Base URL of the store server
storeId?: string; // Default store ID (can be overridden per call)
publishableKey?: string; // Sent as x-ncs-publishable-key
secretKey?: string; // Sent as x-ncs-secret-key (takes priority)
fetchImpl?: typeof fetch; // Optional custom fetch (default: globalThis.fetch)
defaultHeaders?: Record<string, string>;
timeoutMs?: number;
}If both publishableKey and secretKey are provided, the secret key header is sent and the publishable key is omitted.
Client API
client.stores // create, get, list, update, disable, archive
client.keys // create, list, revoke
client.content // get, getEntry, exists, set, delete, listKeys, listEntries
client.revisions // list, get, activate
client.backends // list, get, upsert
client.sync // run, listRuns, getRun, compare
client.diagnostics // pingAuth headers
| Header | Sent when |
|---|---|
| x-ncs-publishable-key | publishableKey is set and secretKey is not |
| x-ncs-secret-key | secretKey is set (takes priority over publishable) |
Error classes
All errors extend ContentStoreClientError which carries code and status.
| Class | When thrown |
|---|---|
| ContentStoreClientAuthError | HTTP 401 or 403 |
| ContentStoreClientConflictError | HTTP 409 |
| ContentStoreClientValidationError | HTTP 400 or 422 |
| ContentStoreClientHttpError | All other non-2xx responses |
import {
ContentStoreClientAuthError,
ContentStoreClientConflictError,
} from 'nx-content-store-client';
try {
await client.content.set({ key: 'k' }, { content: '...', expectedHash: 'old' });
} catch (err) {
if (err instanceof ContentStoreClientConflictError) {
console.log('Hash mismatch:', err.code, err.status);
}
}Response envelope
The client expects and parses the standard server envelope:
// Success
{ ok: true, data: T, meta?: { requestId?: string } }
// Error
{ ok: false, error: { code: string, message: string }, meta?: { requestId?: string } }Package boundary
This is a pure HTTP client. It has no dependency on:
nx-content-store-server(the deployed service)xronox-content-store(private persistence layer)nx-content(git/file backend)- MongoDB or any storage
It only uses fetch and its own types.
License
UNLICENSED
