TypeScript SDK for OpenDecree -- schema-driven configuration management.
Alpha -- This SDK is under active development. APIs and behavior may change without notice between versions.
npm install @opendecree/sdkimport { ConfigClient } from '@opendecree/sdk';
const client = new ConfigClient('localhost:9090', { subject: 'myapp' });
try {
// Get config values (default: string)
const fee = await client.get('tenant-id', 'payments.fee');
// Typed gets via runtime converters
const retries = await client.get('tenant-id', 'payments.retries', Number);
const enabled = await client.get('tenant-id', 'payments.enabled', Boolean);
// Nullable gets
const optional = await client.get('tenant-id', 'payments.fee', Number, { nullable: true });
// Set values
await client.set('tenant-id', 'payments.fee', '0.5%');
// Set multiple values atomically
await client.setMany('tenant-id', {
'payments.fee': '0.5%',
'payments.retries': '3',
});
} finally {
client.close();
}import { ConfigClient } from '@opendecree/sdk';
const client = new ConfigClient('localhost:9090', { subject: 'myapp' });
const watcher = client.watch('tenant-id');
// Register fields before starting
const fee = watcher.field('payments.fee', Number, { default: 0.01 });
const enabled = watcher.field('payments.enabled', Boolean, { default: false });
// Load snapshot + start streaming
await watcher.start();
// Synchronous access to current values
console.log(fee.value); // number
console.log(enabled.value); // boolean
// EventEmitter pattern
fee.on('change', (oldVal, newVal) => {
console.log(`Fee changed: ${oldVal} -> ${newVal}`);
});
// Or async iteration (yields Change objects)
for await (const change of fee) {
console.log(change.fieldPath, change.newValue);
}
// Cleanup
await watcher.stop();
client.close();Runnable examples in the examples/ directory:
| Example | What it shows |
|---|---|
| quickstart | Type converters (Number, Boolean), try/finally |
| live-config | ConfigWatcher, .on('change'), for await...of |
| nextjs-integration | Singleton watcher for server-side config |
| error-handling | RetryConfig, { nullable: true }, instanceof narrowing |
- Quick Start -- install, first get/set, typed gets, error handling
- Configuration -- all client options, auth, TLS, retry, timeouts
- Watching -- ConfigWatcher, WatchedField, EventEmitter, async iteration
- Node.js 20+
- A running OpenDecree server (v0.3.0+)
Head to OpenDecree Discussions -- our community hub covers all OpenDecree repos.
Apache License 2.0 -- see LICENSE.