@nanolink/operational-model
v0.1.25
Published
TypeScript utility package.
Readme
operational-model
TypeScript package providing read-only Aerospike repository interfaces and implementations for the tracker domain (states, links, RSSI, GPS, trips, etc.).
Install
npm install @nanolink/operational-modelUsage (read-only)
import {
createAerospikeClient,
createRepositories,
AerospikeRepositories,
AerospikeModels,
} from '@nanolink/operational-model';
async function main() {
const client = await createAerospikeClient({
hosts: '127.0.0.1:3000',
namespace: 'test',
});
const repos = createRepositories({ client, namespace: 'test' });
// States by device id
const states: AerospikeModels.StatesWithId[] = await repos.states.getStates('device-123');
// State links by receiver
const links = await repos.stateLinks.queryByReceiver('receiver-1');
// RSSI history for receiver@transmitter
const rssi = await repos.rssi.queryByKey('receiver-1@tx-9');
// GPS with derived speeds
const gpsWithSpeed = await repos.gps.queryWithSpeed('device-123');
// Stream without buffering the entire result set
for await (const r of repos.rssi.streamAll()) {
console.log(r);
}
console.log({ states, links, rssi, gpsWithSpeed });
client.close();
}
main().catch((err) => {
console.error(err);
process.exit(1);
});Scripts
- Build:
npm run build - Test:
npm test - Lint:
npm run lint - Format:
npm run format
Notes
- The package is read-only: repository implementations do not perform writes or emit events.
- Uses msgpack for decoding embedded payloads; ensure Aerospike bins match the schema in
spec.md. - All repository implementations use TypeScript with direct imports from the
aerospikenpm package. - Client configuration uses Aerospike's policies structure for timeout and retry settings.
NATS subscription helper
The package also includes a NATS subscriber utility using msgpack decoding by default:
import { connect } from 'nats';
import { NatsSubscriber } from '@nanolink/operational-model';
async function listen() {
const conn = await connect({ servers: 'nats://localhost:4222' });
const sub = new NatsSubscriber<{ foo: string }>(conn, 'events');
for await (const { topic, data } of sub.subscribeGenerator()) {
console.log(topic, data);
}
}
listen();