@loguro/datasets
v0.1.1
Published
Typed dataset schema, ingest, and query client for Loguro.
Maintainers
Readme
@loguro/datasets
Typed dataset schema, ingest, and query client for Loguro.
Install
npm i @loguro/datasetsDefine a schema
import {
DatasetIngestClient,
DatasetQueryClient,
defineDatasetSchema
} from "@loguro/datasets";
const Orders = defineDatasetSchema({
country: "string",
plan: "string",
amount: "number",
paid: "boolean",
signup_at: "timestamp"
});The schema object is the source of truth. TypeScript infers record and query field types from it.
Create and register
const query = new DatasetQueryClient({
token: process.env.LOGURO_PAT!
});
const dataset = await query.createDataset({
projectId: 1,
name: "Orders",
description: "Paid orders"
});
await query.registerSchema({
projectId: 1,
datasetId: dataset.id,
schema: Orders
});Ingest
const ingest = new DatasetIngestClient({
apiKey: process.env.LOGURO_INGEST_KEY!
});
await ingest.push(Orders, {
datasetId: dataset.id,
record: {
timestamp: new Date().toISOString(),
context: { source: "billing" },
country: "RO",
plan: "pro",
amount: 42.5,
paid: true,
signup_at: "2026-06-01T08:00:00Z"
}
});Query
const result = await query.query(Orders, {
projectId: 1,
datasetId: dataset.id,
select: [
Orders.field("country"),
Orders.count().as("events"),
Orders.sum("amount").as("revenue")
],
where: [
Orders.where("country", "=", "RO"),
Orders.where("amount", ">", 20),
Orders.where("paid", "=", true)
],
groupBy: ["country"],
orderBy: [{ field: "revenue", direction: "desc" }],
limit: 50
});
for (const row of result.rows) {
console.log(row.country, row.events, row.revenue);
}