@ bonnard/ sdk (英语)
用于查询的脚本 SDK 类型 博纳德 任何JavaScript或TypeScript应用程序的语义层.
安装
npm install @bonnard/sdk
快速启动
有可以出版的密钥
import { createClient } from '@bonnard/sdk';
const bon = createClient({
apiKey: 'bon_pk_...',
});
const { data } = await bon.query({
measures: ['orders.revenue', 'orders.count'],
dimensions: ['orders.status'],
});
console.log(data);
// [{ "orders.revenue": 45000, "orders.count": 120, "orders.status": "completed" }, ...]
以代币交换(多租户)
对于每个用户看到自己数据的B2B应用程序,使用服务器侧密钥来薄荷瞄准符:
// Server: exchange secret key for a scoped JWT
const res = await fetch('https://app.bonnard.dev/api/sdk/token', {
method: 'POST',
headers: {
Authorization: 'Bearer bon_sk_...',
'Content-Type': 'application/json',
},
body: JSON.stringify({
security_context: { tenant_id: 'acme-123' },
}),
});
const { token } = await res.json();
// Client: use the token callback
const bon = createClient({
fetchToken: async () => {
const res = await fetch('/api/analytics/token');
const { token } = await res.json();
return token;
},
});
const { data } = await bon.query({
measures: ['orders.revenue'],
timeDimension: {
dimension: 'orders.created_at',
granularity: 'month',
dateRange: ['2025-01-01', '2025-12-31'],
},
});
托肯在到期前60秒自动被缓存并刷新.
API 密码
createClient(config)
| 选项 | 类型 | 说明 |
|---|---|---|
apiKey | string | 可公布的密钥( E)bon_pk_...) (中文(简体) ). 使用其中的一个 apiKey 或者说 fetchToken。 。 。 . |
fetchToken | () => Promise<string> | Async召回,返回一个JWT。 用于多租户设置. |
baseUrl | string | API 基础 URL( 默认 ): https://app.bonnard.dev(中文(简体) ) |
client.query(options)
JSON针对语义层的查询.
const { data } = await bon.query({
measures: ['orders.revenue', 'orders.count'],
dimensions: ['orders.product_category'],
filters: [
{ dimension: 'orders.status', operator: 'equals', values: ['completed'] },
],
timeDimension: {
dimension: 'orders.created_at',
granularity: 'month',
dateRange: ['2025-01-01', '2025-12-31'],
},
orderBy: { 'orders.revenue': 'desc' },
limit: 100,
});
client.sql(query)
使用 Cube SQL 语法进行 Raw SQL 查询.
const { data } = await bon.sql(
`SELECT product_category, MEASURE(revenue) FROM orders GROUP BY 1`
);
处理错误
所有 API 出错 BonnardError hTTP 状态代码 :
import { createClient, BonnardError } from '@bonnard/sdk';
try {
const { data } = await bon.query({ measures: ['orders.revenue'] });
} catch (err) {
if (err instanceof BonnardError) {
console.log(err.statusCode); // 401, 400, 500, etc.
console.log(err.retryable); // true for 429 and 5xx
}
}