@litemetrics/client 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +241 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +117 -0
- package/dist/index.d.ts +117 -0
- package/dist/index.js +201 -0
- package/dist/index.js.map +1 -0
- package/package.json +42 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var index_exports = {};
|
|
32
|
+
__export(index_exports, {
|
|
33
|
+
LitemetricsClient: () => LitemetricsClient,
|
|
34
|
+
SitesClient: () => SitesClient,
|
|
35
|
+
createClient: () => createClient,
|
|
36
|
+
createSitesClient: () => createSitesClient
|
|
37
|
+
});
|
|
38
|
+
module.exports = __toCommonJS(index_exports);
|
|
39
|
+
|
|
40
|
+
// src/client.ts
|
|
41
|
+
var import_axios = __toESM(require("axios"), 1);
|
|
42
|
+
var LitemetricsClient = class {
|
|
43
|
+
siteId;
|
|
44
|
+
endpoint;
|
|
45
|
+
http;
|
|
46
|
+
constructor(config) {
|
|
47
|
+
this.siteId = config.siteId;
|
|
48
|
+
this.endpoint = config.endpoint ?? "/api/stats";
|
|
49
|
+
const headers = { ...config.headers };
|
|
50
|
+
if (config.secretKey) {
|
|
51
|
+
headers["X-Litemetrics-Secret"] = config.secretKey;
|
|
52
|
+
}
|
|
53
|
+
this.http = import_axios.default.create({
|
|
54
|
+
baseURL: config.baseUrl.replace(/\/$/, ""),
|
|
55
|
+
headers
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/** Change the active site ID */
|
|
59
|
+
setSiteId(siteId) {
|
|
60
|
+
this.siteId = siteId;
|
|
61
|
+
}
|
|
62
|
+
/** Get any metric */
|
|
63
|
+
async getStats(metric, options) {
|
|
64
|
+
const params = {
|
|
65
|
+
siteId: this.siteId,
|
|
66
|
+
metric
|
|
67
|
+
};
|
|
68
|
+
if (options?.period) params.period = options.period;
|
|
69
|
+
if (options?.dateFrom) params.dateFrom = options.dateFrom;
|
|
70
|
+
if (options?.dateTo) params.dateTo = options.dateTo;
|
|
71
|
+
if (options?.limit) params.limit = String(options.limit);
|
|
72
|
+
if (options?.filters) params.filters = JSON.stringify(options.filters);
|
|
73
|
+
if (options?.compare) params.compare = "true";
|
|
74
|
+
const { data } = await this.http.get(this.endpoint, { params });
|
|
75
|
+
return data;
|
|
76
|
+
}
|
|
77
|
+
// ─── Convenience methods ──────────────────────────────────
|
|
78
|
+
async getPageviews(options) {
|
|
79
|
+
return this.getStats("pageviews", options);
|
|
80
|
+
}
|
|
81
|
+
async getVisitors(options) {
|
|
82
|
+
return this.getStats("visitors", options);
|
|
83
|
+
}
|
|
84
|
+
async getSessions(options) {
|
|
85
|
+
return this.getStats("sessions", options);
|
|
86
|
+
}
|
|
87
|
+
async getEvents(options) {
|
|
88
|
+
return this.getStats("events", options);
|
|
89
|
+
}
|
|
90
|
+
async getTopPages(options) {
|
|
91
|
+
return this.getStats("top_pages", options);
|
|
92
|
+
}
|
|
93
|
+
async getTopReferrers(options) {
|
|
94
|
+
return this.getStats("top_referrers", options);
|
|
95
|
+
}
|
|
96
|
+
async getTopCountries(options) {
|
|
97
|
+
return this.getStats("top_countries", options);
|
|
98
|
+
}
|
|
99
|
+
async getTopCities(options) {
|
|
100
|
+
return this.getStats("top_cities", options);
|
|
101
|
+
}
|
|
102
|
+
async getTopEvents(options) {
|
|
103
|
+
return this.getStats("top_events", options);
|
|
104
|
+
}
|
|
105
|
+
async getTopDevices(options) {
|
|
106
|
+
return this.getStats("top_devices", options);
|
|
107
|
+
}
|
|
108
|
+
async getTopBrowsers(options) {
|
|
109
|
+
return this.getStats("top_browsers", options);
|
|
110
|
+
}
|
|
111
|
+
async getTopOS(options) {
|
|
112
|
+
return this.getStats("top_os", options);
|
|
113
|
+
}
|
|
114
|
+
/** Fetch multiple metrics in parallel */
|
|
115
|
+
async getOverview(metrics = ["pageviews", "visitors", "sessions", "events"], options) {
|
|
116
|
+
const results = await Promise.all(
|
|
117
|
+
metrics.map((m) => this.getStats(m, options).then((r) => [m, r]))
|
|
118
|
+
);
|
|
119
|
+
return Object.fromEntries(results);
|
|
120
|
+
}
|
|
121
|
+
// ─── Time series ──────────────────────────────────────
|
|
122
|
+
async getTimeSeries(metric, options) {
|
|
123
|
+
const params = {
|
|
124
|
+
siteId: this.siteId,
|
|
125
|
+
metric: "timeseries",
|
|
126
|
+
tsMetric: metric
|
|
127
|
+
};
|
|
128
|
+
if (options?.period) params.period = options.period;
|
|
129
|
+
if (options?.dateFrom) params.dateFrom = options.dateFrom;
|
|
130
|
+
if (options?.dateTo) params.dateTo = options.dateTo;
|
|
131
|
+
if (options?.granularity) params.granularity = options.granularity;
|
|
132
|
+
const { data } = await this.http.get(this.endpoint, { params });
|
|
133
|
+
return data;
|
|
134
|
+
}
|
|
135
|
+
// ─── Event listing ──────────────────────────────────────
|
|
136
|
+
async getEventsList(options) {
|
|
137
|
+
const params = { siteId: this.siteId };
|
|
138
|
+
if (options?.type) params.type = options.type;
|
|
139
|
+
if (options?.eventName) params.eventName = options.eventName;
|
|
140
|
+
if (options?.visitorId) params.visitorId = options.visitorId;
|
|
141
|
+
if (options?.userId) params.userId = options.userId;
|
|
142
|
+
if (options?.period) params.period = options.period;
|
|
143
|
+
if (options?.dateFrom) params.dateFrom = options.dateFrom;
|
|
144
|
+
if (options?.dateTo) params.dateTo = options.dateTo;
|
|
145
|
+
if (options?.limit) params.limit = String(options.limit);
|
|
146
|
+
if (options?.offset) params.offset = String(options.offset);
|
|
147
|
+
const { data } = await this.http.get("/api/events", { params });
|
|
148
|
+
return data;
|
|
149
|
+
}
|
|
150
|
+
// ─── User listing ──────────────────────────────────────
|
|
151
|
+
async getUsers(options) {
|
|
152
|
+
const params = { siteId: this.siteId };
|
|
153
|
+
if (options?.search) params.search = options.search;
|
|
154
|
+
if (options?.limit) params.limit = String(options.limit);
|
|
155
|
+
if (options?.offset) params.offset = String(options.offset);
|
|
156
|
+
const { data } = await this.http.get("/api/users", { params });
|
|
157
|
+
return data;
|
|
158
|
+
}
|
|
159
|
+
async getUserDetail(visitorId) {
|
|
160
|
+
const params = { siteId: this.siteId };
|
|
161
|
+
const { data } = await this.http.get(`/api/users/${encodeURIComponent(visitorId)}`, { params });
|
|
162
|
+
return data.user;
|
|
163
|
+
}
|
|
164
|
+
async getUserEvents(visitorId, options) {
|
|
165
|
+
const params = { siteId: this.siteId };
|
|
166
|
+
if (options?.type) params.type = options.type;
|
|
167
|
+
if (options?.period) params.period = options.period;
|
|
168
|
+
if (options?.dateFrom) params.dateFrom = options.dateFrom;
|
|
169
|
+
if (options?.dateTo) params.dateTo = options.dateTo;
|
|
170
|
+
if (options?.limit) params.limit = String(options.limit);
|
|
171
|
+
if (options?.offset) params.offset = String(options.offset);
|
|
172
|
+
const { data } = await this.http.get(`/api/users/${encodeURIComponent(visitorId)}/events`, { params });
|
|
173
|
+
return data;
|
|
174
|
+
}
|
|
175
|
+
// ─── Retention ──────────────────────────────────────
|
|
176
|
+
async getRetention(options) {
|
|
177
|
+
const params = {
|
|
178
|
+
siteId: this.siteId,
|
|
179
|
+
metric: "retention"
|
|
180
|
+
};
|
|
181
|
+
if (options?.period) params.period = options.period;
|
|
182
|
+
if (options?.weeks) params.weeks = String(options.weeks);
|
|
183
|
+
const { data } = await this.http.get(this.endpoint, { params });
|
|
184
|
+
return data;
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
function createClient(config) {
|
|
188
|
+
return new LitemetricsClient(config);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// src/sites.ts
|
|
192
|
+
var import_axios2 = __toESM(require("axios"), 1);
|
|
193
|
+
var SitesClient = class {
|
|
194
|
+
endpoint;
|
|
195
|
+
http;
|
|
196
|
+
constructor(config) {
|
|
197
|
+
this.endpoint = config.endpoint ?? "/api/sites";
|
|
198
|
+
this.http = import_axios2.default.create({
|
|
199
|
+
baseURL: config.baseUrl.replace(/\/$/, ""),
|
|
200
|
+
headers: {
|
|
201
|
+
"Content-Type": "application/json",
|
|
202
|
+
"X-Litemetrics-Admin-Secret": config.adminSecret
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
}
|
|
206
|
+
async listSites() {
|
|
207
|
+
const { data } = await this.http.get(this.endpoint);
|
|
208
|
+
return data;
|
|
209
|
+
}
|
|
210
|
+
async getSite(siteId) {
|
|
211
|
+
const { data } = await this.http.get(`${this.endpoint}/${siteId}`);
|
|
212
|
+
return data;
|
|
213
|
+
}
|
|
214
|
+
async createSite(body) {
|
|
215
|
+
const { data } = await this.http.post(this.endpoint, body);
|
|
216
|
+
return data;
|
|
217
|
+
}
|
|
218
|
+
async updateSite(siteId, body) {
|
|
219
|
+
const { data } = await this.http.put(`${this.endpoint}/${siteId}`, body);
|
|
220
|
+
return data;
|
|
221
|
+
}
|
|
222
|
+
async deleteSite(siteId) {
|
|
223
|
+
const { data } = await this.http.delete(`${this.endpoint}/${siteId}`);
|
|
224
|
+
return data;
|
|
225
|
+
}
|
|
226
|
+
async regenerateSecret(siteId) {
|
|
227
|
+
const { data } = await this.http.post(`${this.endpoint}/${siteId}/regenerate`);
|
|
228
|
+
return data;
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
function createSitesClient(config) {
|
|
232
|
+
return new SitesClient(config);
|
|
233
|
+
}
|
|
234
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
235
|
+
0 && (module.exports = {
|
|
236
|
+
LitemetricsClient,
|
|
237
|
+
SitesClient,
|
|
238
|
+
createClient,
|
|
239
|
+
createSitesClient
|
|
240
|
+
});
|
|
241
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/client.ts","../src/sites.ts"],"sourcesContent":["export { LitemetricsClient, createClient } from './client';\nexport type { LitemetricsClientConfig, StatsOptions, TimeSeriesOptions, EventsListOptions, UsersListOptions, RetentionOptions } from './client';\n\nexport { SitesClient, createSitesClient } from './sites';\nexport type { SitesClientConfig } from './sites';\n\n// Re-export query types from core\nexport type {\n Metric,\n Period,\n QueryResult,\n QueryDataPoint,\n Site,\n CreateSiteRequest,\n UpdateSiteRequest,\n EventType,\n EventListParams,\n EventListResult,\n EventListItem,\n UserListParams,\n UserListResult,\n UserDetail,\n Granularity,\n TimeSeriesParams,\n TimeSeriesResult,\n TimeSeriesPoint,\n RetentionParams,\n RetentionResult,\n RetentionCohort,\n} from '@litemetrics/core';\n","import axios, { type AxiosInstance } from 'axios';\nimport type { Metric, Period, Granularity, QueryResult, TimeSeriesResult, RetentionResult, EventListResult, UserListResult, UserDetail, EventType } from '@litemetrics/core';\n\nexport interface LitemetricsClientConfig {\n /** Base URL of the Litemetrics server (e.g. \"https://analytics.myapp.com\") */\n baseUrl: string;\n /** Site ID to query */\n siteId: string;\n /** Secret key for authentication (sk_xxx) */\n secretKey?: string;\n /** Query endpoint path (default: \"/api/stats\") */\n endpoint?: string;\n /** Custom headers to include in requests */\n headers?: Record<string, string>;\n}\n\nexport interface StatsOptions {\n period?: Period;\n dateFrom?: string;\n dateTo?: string;\n limit?: number;\n filters?: Record<string, string>;\n compare?: boolean;\n}\n\nexport interface RetentionOptions {\n period?: Period;\n weeks?: number;\n}\n\nexport interface EventsListOptions {\n type?: EventType;\n eventName?: string;\n visitorId?: string;\n userId?: string;\n period?: Period;\n dateFrom?: string;\n dateTo?: string;\n limit?: number;\n offset?: number;\n}\n\nexport interface TimeSeriesOptions {\n period?: Period;\n dateFrom?: string;\n dateTo?: string;\n granularity?: Granularity;\n}\n\nexport interface UsersListOptions {\n search?: string;\n limit?: number;\n offset?: number;\n}\n\nexport class LitemetricsClient {\n private siteId: string;\n private endpoint: string;\n private http: AxiosInstance;\n\n constructor(config: LitemetricsClientConfig) {\n this.siteId = config.siteId;\n this.endpoint = config.endpoint ?? '/api/stats';\n\n const headers: Record<string, string> = { ...config.headers };\n if (config.secretKey) {\n headers['X-Litemetrics-Secret'] = config.secretKey;\n }\n\n this.http = axios.create({\n baseURL: config.baseUrl.replace(/\\/$/, ''),\n headers,\n });\n }\n\n /** Change the active site ID */\n setSiteId(siteId: string): void {\n this.siteId = siteId;\n }\n\n /** Get any metric */\n async getStats(metric: Metric, options?: StatsOptions): Promise<QueryResult> {\n const params: Record<string, string> = {\n siteId: this.siteId,\n metric,\n };\n\n if (options?.period) params.period = options.period;\n if (options?.dateFrom) params.dateFrom = options.dateFrom;\n if (options?.dateTo) params.dateTo = options.dateTo;\n if (options?.limit) params.limit = String(options.limit);\n if (options?.filters) params.filters = JSON.stringify(options.filters);\n if (options?.compare) params.compare = 'true';\n\n const { data } = await this.http.get<QueryResult>(this.endpoint, { params });\n return data;\n }\n\n // ─── Convenience methods ──────────────────────────────────\n\n async getPageviews(options?: StatsOptions) { return this.getStats('pageviews', options); }\n async getVisitors(options?: StatsOptions) { return this.getStats('visitors', options); }\n async getSessions(options?: StatsOptions) { return this.getStats('sessions', options); }\n async getEvents(options?: StatsOptions) { return this.getStats('events', options); }\n async getTopPages(options?: StatsOptions) { return this.getStats('top_pages', options); }\n async getTopReferrers(options?: StatsOptions) { return this.getStats('top_referrers', options); }\n async getTopCountries(options?: StatsOptions) { return this.getStats('top_countries', options); }\n async getTopCities(options?: StatsOptions) { return this.getStats('top_cities', options); }\n async getTopEvents(options?: StatsOptions) { return this.getStats('top_events', options); }\n async getTopDevices(options?: StatsOptions) { return this.getStats('top_devices', options); }\n async getTopBrowsers(options?: StatsOptions) { return this.getStats('top_browsers', options); }\n async getTopOS(options?: StatsOptions) { return this.getStats('top_os', options); }\n\n /** Fetch multiple metrics in parallel */\n async getOverview(\n metrics: Metric[] = ['pageviews', 'visitors', 'sessions', 'events'],\n options?: StatsOptions,\n ): Promise<Record<Metric, QueryResult>> {\n const results = await Promise.all(\n metrics.map((m) => this.getStats(m, options).then((r) => [m, r] as const)),\n );\n return Object.fromEntries(results) as Record<Metric, QueryResult>;\n }\n\n // ─── Time series ──────────────────────────────────────\n\n async getTimeSeries(\n metric: 'pageviews' | 'visitors' | 'sessions',\n options?: TimeSeriesOptions,\n ): Promise<TimeSeriesResult> {\n const params: Record<string, string> = {\n siteId: this.siteId,\n metric: 'timeseries',\n tsMetric: metric,\n };\n\n if (options?.period) params.period = options.period;\n if (options?.dateFrom) params.dateFrom = options.dateFrom;\n if (options?.dateTo) params.dateTo = options.dateTo;\n if (options?.granularity) params.granularity = options.granularity;\n\n const { data } = await this.http.get<TimeSeriesResult>(this.endpoint, { params });\n return data;\n }\n\n // ─── Event listing ──────────────────────────────────────\n\n async getEventsList(options?: EventsListOptions): Promise<EventListResult> {\n const params: Record<string, string> = { siteId: this.siteId };\n\n if (options?.type) params.type = options.type;\n if (options?.eventName) params.eventName = options.eventName;\n if (options?.visitorId) params.visitorId = options.visitorId;\n if (options?.userId) params.userId = options.userId;\n if (options?.period) params.period = options.period;\n if (options?.dateFrom) params.dateFrom = options.dateFrom;\n if (options?.dateTo) params.dateTo = options.dateTo;\n if (options?.limit) params.limit = String(options.limit);\n if (options?.offset) params.offset = String(options.offset);\n\n const { data } = await this.http.get<EventListResult>('/api/events', { params });\n return data;\n }\n\n // ─── User listing ──────────────────────────────────────\n\n async getUsers(options?: UsersListOptions): Promise<UserListResult> {\n const params: Record<string, string> = { siteId: this.siteId };\n\n if (options?.search) params.search = options.search;\n if (options?.limit) params.limit = String(options.limit);\n if (options?.offset) params.offset = String(options.offset);\n\n const { data } = await this.http.get<UserListResult>('/api/users', { params });\n return data;\n }\n\n async getUserDetail(visitorId: string): Promise<UserDetail> {\n const params: Record<string, string> = { siteId: this.siteId };\n const { data } = await this.http.get<{ user: UserDetail }>(`/api/users/${encodeURIComponent(visitorId)}`, { params });\n return data.user;\n }\n\n async getUserEvents(visitorId: string, options?: EventsListOptions): Promise<EventListResult> {\n const params: Record<string, string> = { siteId: this.siteId };\n\n if (options?.type) params.type = options.type;\n if (options?.period) params.period = options.period;\n if (options?.dateFrom) params.dateFrom = options.dateFrom;\n if (options?.dateTo) params.dateTo = options.dateTo;\n if (options?.limit) params.limit = String(options.limit);\n if (options?.offset) params.offset = String(options.offset);\n\n const { data } = await this.http.get<EventListResult>(`/api/users/${encodeURIComponent(visitorId)}/events`, { params });\n return data;\n }\n\n // ─── Retention ──────────────────────────────────────\n\n async getRetention(options?: RetentionOptions): Promise<RetentionResult> {\n const params: Record<string, string> = {\n siteId: this.siteId,\n metric: 'retention',\n };\n\n if (options?.period) params.period = options.period;\n if (options?.weeks) params.weeks = String(options.weeks);\n\n const { data } = await this.http.get<RetentionResult>(this.endpoint, { params });\n return data;\n }\n}\n\n/** Create an LitemetricsClient instance */\nexport function createClient(config: LitemetricsClientConfig): LitemetricsClient {\n return new LitemetricsClient(config);\n}\n","import axios, { type AxiosInstance } from 'axios';\nimport type { Site, CreateSiteRequest, UpdateSiteRequest } from '@litemetrics/core';\n\nexport interface SitesClientConfig {\n /** Base URL of the Litemetrics server */\n baseUrl: string;\n /** Admin secret for authentication */\n adminSecret: string;\n /** Sites endpoint path (default: \"/api/sites\") */\n endpoint?: string;\n}\n\nexport class SitesClient {\n private endpoint: string;\n private http: AxiosInstance;\n\n constructor(config: SitesClientConfig) {\n this.endpoint = config.endpoint ?? '/api/sites';\n\n this.http = axios.create({\n baseURL: config.baseUrl.replace(/\\/$/, ''),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Litemetrics-Admin-Secret': config.adminSecret,\n },\n });\n }\n\n async listSites(): Promise<{ sites: Site[]; total: number }> {\n const { data } = await this.http.get(this.endpoint);\n return data;\n }\n\n async getSite(siteId: string): Promise<{ site: Site }> {\n const { data } = await this.http.get(`${this.endpoint}/${siteId}`);\n return data;\n }\n\n async createSite(body: CreateSiteRequest): Promise<{ site: Site }> {\n const { data } = await this.http.post(this.endpoint, body);\n return data;\n }\n\n async updateSite(siteId: string, body: UpdateSiteRequest): Promise<{ site: Site }> {\n const { data } = await this.http.put(`${this.endpoint}/${siteId}`, body);\n return data;\n }\n\n async deleteSite(siteId: string): Promise<{ ok: boolean }> {\n const { data } = await this.http.delete(`${this.endpoint}/${siteId}`);\n return data;\n }\n\n async regenerateSecret(siteId: string): Promise<{ site: Site }> {\n const { data } = await this.http.post(`${this.endpoint}/${siteId}/regenerate`);\n return data;\n }\n}\n\nexport function createSitesClient(config: SitesClientConfig): SitesClient {\n return new SitesClient(config);\n}\n"],"mappings":"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","names":["axios","import_axios","axios"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { EventType, Period, Metric, QueryResult, Granularity, TimeSeriesResult, EventListResult, UserListResult, UserDetail, RetentionResult, Site, CreateSiteRequest, UpdateSiteRequest } from '@litemetrics/core';
|
|
2
|
+
export { CreateSiteRequest, EventListItem, EventListParams, EventListResult, EventType, Granularity, Metric, Period, QueryDataPoint, QueryResult, RetentionCohort, RetentionParams, RetentionResult, Site, TimeSeriesParams, TimeSeriesPoint, TimeSeriesResult, UpdateSiteRequest, UserDetail, UserListParams, UserListResult } from '@litemetrics/core';
|
|
3
|
+
|
|
4
|
+
interface LitemetricsClientConfig {
|
|
5
|
+
/** Base URL of the Litemetrics server (e.g. "https://analytics.myapp.com") */
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
/** Site ID to query */
|
|
8
|
+
siteId: string;
|
|
9
|
+
/** Secret key for authentication (sk_xxx) */
|
|
10
|
+
secretKey?: string;
|
|
11
|
+
/** Query endpoint path (default: "/api/stats") */
|
|
12
|
+
endpoint?: string;
|
|
13
|
+
/** Custom headers to include in requests */
|
|
14
|
+
headers?: Record<string, string>;
|
|
15
|
+
}
|
|
16
|
+
interface StatsOptions {
|
|
17
|
+
period?: Period;
|
|
18
|
+
dateFrom?: string;
|
|
19
|
+
dateTo?: string;
|
|
20
|
+
limit?: number;
|
|
21
|
+
filters?: Record<string, string>;
|
|
22
|
+
compare?: boolean;
|
|
23
|
+
}
|
|
24
|
+
interface RetentionOptions {
|
|
25
|
+
period?: Period;
|
|
26
|
+
weeks?: number;
|
|
27
|
+
}
|
|
28
|
+
interface EventsListOptions {
|
|
29
|
+
type?: EventType;
|
|
30
|
+
eventName?: string;
|
|
31
|
+
visitorId?: string;
|
|
32
|
+
userId?: string;
|
|
33
|
+
period?: Period;
|
|
34
|
+
dateFrom?: string;
|
|
35
|
+
dateTo?: string;
|
|
36
|
+
limit?: number;
|
|
37
|
+
offset?: number;
|
|
38
|
+
}
|
|
39
|
+
interface TimeSeriesOptions {
|
|
40
|
+
period?: Period;
|
|
41
|
+
dateFrom?: string;
|
|
42
|
+
dateTo?: string;
|
|
43
|
+
granularity?: Granularity;
|
|
44
|
+
}
|
|
45
|
+
interface UsersListOptions {
|
|
46
|
+
search?: string;
|
|
47
|
+
limit?: number;
|
|
48
|
+
offset?: number;
|
|
49
|
+
}
|
|
50
|
+
declare class LitemetricsClient {
|
|
51
|
+
private siteId;
|
|
52
|
+
private endpoint;
|
|
53
|
+
private http;
|
|
54
|
+
constructor(config: LitemetricsClientConfig);
|
|
55
|
+
/** Change the active site ID */
|
|
56
|
+
setSiteId(siteId: string): void;
|
|
57
|
+
/** Get any metric */
|
|
58
|
+
getStats(metric: Metric, options?: StatsOptions): Promise<QueryResult>;
|
|
59
|
+
getPageviews(options?: StatsOptions): Promise<QueryResult>;
|
|
60
|
+
getVisitors(options?: StatsOptions): Promise<QueryResult>;
|
|
61
|
+
getSessions(options?: StatsOptions): Promise<QueryResult>;
|
|
62
|
+
getEvents(options?: StatsOptions): Promise<QueryResult>;
|
|
63
|
+
getTopPages(options?: StatsOptions): Promise<QueryResult>;
|
|
64
|
+
getTopReferrers(options?: StatsOptions): Promise<QueryResult>;
|
|
65
|
+
getTopCountries(options?: StatsOptions): Promise<QueryResult>;
|
|
66
|
+
getTopCities(options?: StatsOptions): Promise<QueryResult>;
|
|
67
|
+
getTopEvents(options?: StatsOptions): Promise<QueryResult>;
|
|
68
|
+
getTopDevices(options?: StatsOptions): Promise<QueryResult>;
|
|
69
|
+
getTopBrowsers(options?: StatsOptions): Promise<QueryResult>;
|
|
70
|
+
getTopOS(options?: StatsOptions): Promise<QueryResult>;
|
|
71
|
+
/** Fetch multiple metrics in parallel */
|
|
72
|
+
getOverview(metrics?: Metric[], options?: StatsOptions): Promise<Record<Metric, QueryResult>>;
|
|
73
|
+
getTimeSeries(metric: 'pageviews' | 'visitors' | 'sessions', options?: TimeSeriesOptions): Promise<TimeSeriesResult>;
|
|
74
|
+
getEventsList(options?: EventsListOptions): Promise<EventListResult>;
|
|
75
|
+
getUsers(options?: UsersListOptions): Promise<UserListResult>;
|
|
76
|
+
getUserDetail(visitorId: string): Promise<UserDetail>;
|
|
77
|
+
getUserEvents(visitorId: string, options?: EventsListOptions): Promise<EventListResult>;
|
|
78
|
+
getRetention(options?: RetentionOptions): Promise<RetentionResult>;
|
|
79
|
+
}
|
|
80
|
+
/** Create an LitemetricsClient instance */
|
|
81
|
+
declare function createClient(config: LitemetricsClientConfig): LitemetricsClient;
|
|
82
|
+
|
|
83
|
+
interface SitesClientConfig {
|
|
84
|
+
/** Base URL of the Litemetrics server */
|
|
85
|
+
baseUrl: string;
|
|
86
|
+
/** Admin secret for authentication */
|
|
87
|
+
adminSecret: string;
|
|
88
|
+
/** Sites endpoint path (default: "/api/sites") */
|
|
89
|
+
endpoint?: string;
|
|
90
|
+
}
|
|
91
|
+
declare class SitesClient {
|
|
92
|
+
private endpoint;
|
|
93
|
+
private http;
|
|
94
|
+
constructor(config: SitesClientConfig);
|
|
95
|
+
listSites(): Promise<{
|
|
96
|
+
sites: Site[];
|
|
97
|
+
total: number;
|
|
98
|
+
}>;
|
|
99
|
+
getSite(siteId: string): Promise<{
|
|
100
|
+
site: Site;
|
|
101
|
+
}>;
|
|
102
|
+
createSite(body: CreateSiteRequest): Promise<{
|
|
103
|
+
site: Site;
|
|
104
|
+
}>;
|
|
105
|
+
updateSite(siteId: string, body: UpdateSiteRequest): Promise<{
|
|
106
|
+
site: Site;
|
|
107
|
+
}>;
|
|
108
|
+
deleteSite(siteId: string): Promise<{
|
|
109
|
+
ok: boolean;
|
|
110
|
+
}>;
|
|
111
|
+
regenerateSecret(siteId: string): Promise<{
|
|
112
|
+
site: Site;
|
|
113
|
+
}>;
|
|
114
|
+
}
|
|
115
|
+
declare function createSitesClient(config: SitesClientConfig): SitesClient;
|
|
116
|
+
|
|
117
|
+
export { type EventsListOptions, LitemetricsClient, type LitemetricsClientConfig, type RetentionOptions, SitesClient, type SitesClientConfig, type StatsOptions, type TimeSeriesOptions, type UsersListOptions, createClient, createSitesClient };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { EventType, Period, Metric, QueryResult, Granularity, TimeSeriesResult, EventListResult, UserListResult, UserDetail, RetentionResult, Site, CreateSiteRequest, UpdateSiteRequest } from '@litemetrics/core';
|
|
2
|
+
export { CreateSiteRequest, EventListItem, EventListParams, EventListResult, EventType, Granularity, Metric, Period, QueryDataPoint, QueryResult, RetentionCohort, RetentionParams, RetentionResult, Site, TimeSeriesParams, TimeSeriesPoint, TimeSeriesResult, UpdateSiteRequest, UserDetail, UserListParams, UserListResult } from '@litemetrics/core';
|
|
3
|
+
|
|
4
|
+
interface LitemetricsClientConfig {
|
|
5
|
+
/** Base URL of the Litemetrics server (e.g. "https://analytics.myapp.com") */
|
|
6
|
+
baseUrl: string;
|
|
7
|
+
/** Site ID to query */
|
|
8
|
+
siteId: string;
|
|
9
|
+
/** Secret key for authentication (sk_xxx) */
|
|
10
|
+
secretKey?: string;
|
|
11
|
+
/** Query endpoint path (default: "/api/stats") */
|
|
12
|
+
endpoint?: string;
|
|
13
|
+
/** Custom headers to include in requests */
|
|
14
|
+
headers?: Record<string, string>;
|
|
15
|
+
}
|
|
16
|
+
interface StatsOptions {
|
|
17
|
+
period?: Period;
|
|
18
|
+
dateFrom?: string;
|
|
19
|
+
dateTo?: string;
|
|
20
|
+
limit?: number;
|
|
21
|
+
filters?: Record<string, string>;
|
|
22
|
+
compare?: boolean;
|
|
23
|
+
}
|
|
24
|
+
interface RetentionOptions {
|
|
25
|
+
period?: Period;
|
|
26
|
+
weeks?: number;
|
|
27
|
+
}
|
|
28
|
+
interface EventsListOptions {
|
|
29
|
+
type?: EventType;
|
|
30
|
+
eventName?: string;
|
|
31
|
+
visitorId?: string;
|
|
32
|
+
userId?: string;
|
|
33
|
+
period?: Period;
|
|
34
|
+
dateFrom?: string;
|
|
35
|
+
dateTo?: string;
|
|
36
|
+
limit?: number;
|
|
37
|
+
offset?: number;
|
|
38
|
+
}
|
|
39
|
+
interface TimeSeriesOptions {
|
|
40
|
+
period?: Period;
|
|
41
|
+
dateFrom?: string;
|
|
42
|
+
dateTo?: string;
|
|
43
|
+
granularity?: Granularity;
|
|
44
|
+
}
|
|
45
|
+
interface UsersListOptions {
|
|
46
|
+
search?: string;
|
|
47
|
+
limit?: number;
|
|
48
|
+
offset?: number;
|
|
49
|
+
}
|
|
50
|
+
declare class LitemetricsClient {
|
|
51
|
+
private siteId;
|
|
52
|
+
private endpoint;
|
|
53
|
+
private http;
|
|
54
|
+
constructor(config: LitemetricsClientConfig);
|
|
55
|
+
/** Change the active site ID */
|
|
56
|
+
setSiteId(siteId: string): void;
|
|
57
|
+
/** Get any metric */
|
|
58
|
+
getStats(metric: Metric, options?: StatsOptions): Promise<QueryResult>;
|
|
59
|
+
getPageviews(options?: StatsOptions): Promise<QueryResult>;
|
|
60
|
+
getVisitors(options?: StatsOptions): Promise<QueryResult>;
|
|
61
|
+
getSessions(options?: StatsOptions): Promise<QueryResult>;
|
|
62
|
+
getEvents(options?: StatsOptions): Promise<QueryResult>;
|
|
63
|
+
getTopPages(options?: StatsOptions): Promise<QueryResult>;
|
|
64
|
+
getTopReferrers(options?: StatsOptions): Promise<QueryResult>;
|
|
65
|
+
getTopCountries(options?: StatsOptions): Promise<QueryResult>;
|
|
66
|
+
getTopCities(options?: StatsOptions): Promise<QueryResult>;
|
|
67
|
+
getTopEvents(options?: StatsOptions): Promise<QueryResult>;
|
|
68
|
+
getTopDevices(options?: StatsOptions): Promise<QueryResult>;
|
|
69
|
+
getTopBrowsers(options?: StatsOptions): Promise<QueryResult>;
|
|
70
|
+
getTopOS(options?: StatsOptions): Promise<QueryResult>;
|
|
71
|
+
/** Fetch multiple metrics in parallel */
|
|
72
|
+
getOverview(metrics?: Metric[], options?: StatsOptions): Promise<Record<Metric, QueryResult>>;
|
|
73
|
+
getTimeSeries(metric: 'pageviews' | 'visitors' | 'sessions', options?: TimeSeriesOptions): Promise<TimeSeriesResult>;
|
|
74
|
+
getEventsList(options?: EventsListOptions): Promise<EventListResult>;
|
|
75
|
+
getUsers(options?: UsersListOptions): Promise<UserListResult>;
|
|
76
|
+
getUserDetail(visitorId: string): Promise<UserDetail>;
|
|
77
|
+
getUserEvents(visitorId: string, options?: EventsListOptions): Promise<EventListResult>;
|
|
78
|
+
getRetention(options?: RetentionOptions): Promise<RetentionResult>;
|
|
79
|
+
}
|
|
80
|
+
/** Create an LitemetricsClient instance */
|
|
81
|
+
declare function createClient(config: LitemetricsClientConfig): LitemetricsClient;
|
|
82
|
+
|
|
83
|
+
interface SitesClientConfig {
|
|
84
|
+
/** Base URL of the Litemetrics server */
|
|
85
|
+
baseUrl: string;
|
|
86
|
+
/** Admin secret for authentication */
|
|
87
|
+
adminSecret: string;
|
|
88
|
+
/** Sites endpoint path (default: "/api/sites") */
|
|
89
|
+
endpoint?: string;
|
|
90
|
+
}
|
|
91
|
+
declare class SitesClient {
|
|
92
|
+
private endpoint;
|
|
93
|
+
private http;
|
|
94
|
+
constructor(config: SitesClientConfig);
|
|
95
|
+
listSites(): Promise<{
|
|
96
|
+
sites: Site[];
|
|
97
|
+
total: number;
|
|
98
|
+
}>;
|
|
99
|
+
getSite(siteId: string): Promise<{
|
|
100
|
+
site: Site;
|
|
101
|
+
}>;
|
|
102
|
+
createSite(body: CreateSiteRequest): Promise<{
|
|
103
|
+
site: Site;
|
|
104
|
+
}>;
|
|
105
|
+
updateSite(siteId: string, body: UpdateSiteRequest): Promise<{
|
|
106
|
+
site: Site;
|
|
107
|
+
}>;
|
|
108
|
+
deleteSite(siteId: string): Promise<{
|
|
109
|
+
ok: boolean;
|
|
110
|
+
}>;
|
|
111
|
+
regenerateSecret(siteId: string): Promise<{
|
|
112
|
+
site: Site;
|
|
113
|
+
}>;
|
|
114
|
+
}
|
|
115
|
+
declare function createSitesClient(config: SitesClientConfig): SitesClient;
|
|
116
|
+
|
|
117
|
+
export { type EventsListOptions, LitemetricsClient, type LitemetricsClientConfig, type RetentionOptions, SitesClient, type SitesClientConfig, type StatsOptions, type TimeSeriesOptions, type UsersListOptions, createClient, createSitesClient };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
// src/client.ts
|
|
2
|
+
import axios from "axios";
|
|
3
|
+
var LitemetricsClient = class {
|
|
4
|
+
siteId;
|
|
5
|
+
endpoint;
|
|
6
|
+
http;
|
|
7
|
+
constructor(config) {
|
|
8
|
+
this.siteId = config.siteId;
|
|
9
|
+
this.endpoint = config.endpoint ?? "/api/stats";
|
|
10
|
+
const headers = { ...config.headers };
|
|
11
|
+
if (config.secretKey) {
|
|
12
|
+
headers["X-Litemetrics-Secret"] = config.secretKey;
|
|
13
|
+
}
|
|
14
|
+
this.http = axios.create({
|
|
15
|
+
baseURL: config.baseUrl.replace(/\/$/, ""),
|
|
16
|
+
headers
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
/** Change the active site ID */
|
|
20
|
+
setSiteId(siteId) {
|
|
21
|
+
this.siteId = siteId;
|
|
22
|
+
}
|
|
23
|
+
/** Get any metric */
|
|
24
|
+
async getStats(metric, options) {
|
|
25
|
+
const params = {
|
|
26
|
+
siteId: this.siteId,
|
|
27
|
+
metric
|
|
28
|
+
};
|
|
29
|
+
if (options?.period) params.period = options.period;
|
|
30
|
+
if (options?.dateFrom) params.dateFrom = options.dateFrom;
|
|
31
|
+
if (options?.dateTo) params.dateTo = options.dateTo;
|
|
32
|
+
if (options?.limit) params.limit = String(options.limit);
|
|
33
|
+
if (options?.filters) params.filters = JSON.stringify(options.filters);
|
|
34
|
+
if (options?.compare) params.compare = "true";
|
|
35
|
+
const { data } = await this.http.get(this.endpoint, { params });
|
|
36
|
+
return data;
|
|
37
|
+
}
|
|
38
|
+
// ─── Convenience methods ──────────────────────────────────
|
|
39
|
+
async getPageviews(options) {
|
|
40
|
+
return this.getStats("pageviews", options);
|
|
41
|
+
}
|
|
42
|
+
async getVisitors(options) {
|
|
43
|
+
return this.getStats("visitors", options);
|
|
44
|
+
}
|
|
45
|
+
async getSessions(options) {
|
|
46
|
+
return this.getStats("sessions", options);
|
|
47
|
+
}
|
|
48
|
+
async getEvents(options) {
|
|
49
|
+
return this.getStats("events", options);
|
|
50
|
+
}
|
|
51
|
+
async getTopPages(options) {
|
|
52
|
+
return this.getStats("top_pages", options);
|
|
53
|
+
}
|
|
54
|
+
async getTopReferrers(options) {
|
|
55
|
+
return this.getStats("top_referrers", options);
|
|
56
|
+
}
|
|
57
|
+
async getTopCountries(options) {
|
|
58
|
+
return this.getStats("top_countries", options);
|
|
59
|
+
}
|
|
60
|
+
async getTopCities(options) {
|
|
61
|
+
return this.getStats("top_cities", options);
|
|
62
|
+
}
|
|
63
|
+
async getTopEvents(options) {
|
|
64
|
+
return this.getStats("top_events", options);
|
|
65
|
+
}
|
|
66
|
+
async getTopDevices(options) {
|
|
67
|
+
return this.getStats("top_devices", options);
|
|
68
|
+
}
|
|
69
|
+
async getTopBrowsers(options) {
|
|
70
|
+
return this.getStats("top_browsers", options);
|
|
71
|
+
}
|
|
72
|
+
async getTopOS(options) {
|
|
73
|
+
return this.getStats("top_os", options);
|
|
74
|
+
}
|
|
75
|
+
/** Fetch multiple metrics in parallel */
|
|
76
|
+
async getOverview(metrics = ["pageviews", "visitors", "sessions", "events"], options) {
|
|
77
|
+
const results = await Promise.all(
|
|
78
|
+
metrics.map((m) => this.getStats(m, options).then((r) => [m, r]))
|
|
79
|
+
);
|
|
80
|
+
return Object.fromEntries(results);
|
|
81
|
+
}
|
|
82
|
+
// ─── Time series ──────────────────────────────────────
|
|
83
|
+
async getTimeSeries(metric, options) {
|
|
84
|
+
const params = {
|
|
85
|
+
siteId: this.siteId,
|
|
86
|
+
metric: "timeseries",
|
|
87
|
+
tsMetric: metric
|
|
88
|
+
};
|
|
89
|
+
if (options?.period) params.period = options.period;
|
|
90
|
+
if (options?.dateFrom) params.dateFrom = options.dateFrom;
|
|
91
|
+
if (options?.dateTo) params.dateTo = options.dateTo;
|
|
92
|
+
if (options?.granularity) params.granularity = options.granularity;
|
|
93
|
+
const { data } = await this.http.get(this.endpoint, { params });
|
|
94
|
+
return data;
|
|
95
|
+
}
|
|
96
|
+
// ─── Event listing ──────────────────────────────────────
|
|
97
|
+
async getEventsList(options) {
|
|
98
|
+
const params = { siteId: this.siteId };
|
|
99
|
+
if (options?.type) params.type = options.type;
|
|
100
|
+
if (options?.eventName) params.eventName = options.eventName;
|
|
101
|
+
if (options?.visitorId) params.visitorId = options.visitorId;
|
|
102
|
+
if (options?.userId) params.userId = options.userId;
|
|
103
|
+
if (options?.period) params.period = options.period;
|
|
104
|
+
if (options?.dateFrom) params.dateFrom = options.dateFrom;
|
|
105
|
+
if (options?.dateTo) params.dateTo = options.dateTo;
|
|
106
|
+
if (options?.limit) params.limit = String(options.limit);
|
|
107
|
+
if (options?.offset) params.offset = String(options.offset);
|
|
108
|
+
const { data } = await this.http.get("/api/events", { params });
|
|
109
|
+
return data;
|
|
110
|
+
}
|
|
111
|
+
// ─── User listing ──────────────────────────────────────
|
|
112
|
+
async getUsers(options) {
|
|
113
|
+
const params = { siteId: this.siteId };
|
|
114
|
+
if (options?.search) params.search = options.search;
|
|
115
|
+
if (options?.limit) params.limit = String(options.limit);
|
|
116
|
+
if (options?.offset) params.offset = String(options.offset);
|
|
117
|
+
const { data } = await this.http.get("/api/users", { params });
|
|
118
|
+
return data;
|
|
119
|
+
}
|
|
120
|
+
async getUserDetail(visitorId) {
|
|
121
|
+
const params = { siteId: this.siteId };
|
|
122
|
+
const { data } = await this.http.get(`/api/users/${encodeURIComponent(visitorId)}`, { params });
|
|
123
|
+
return data.user;
|
|
124
|
+
}
|
|
125
|
+
async getUserEvents(visitorId, options) {
|
|
126
|
+
const params = { siteId: this.siteId };
|
|
127
|
+
if (options?.type) params.type = options.type;
|
|
128
|
+
if (options?.period) params.period = options.period;
|
|
129
|
+
if (options?.dateFrom) params.dateFrom = options.dateFrom;
|
|
130
|
+
if (options?.dateTo) params.dateTo = options.dateTo;
|
|
131
|
+
if (options?.limit) params.limit = String(options.limit);
|
|
132
|
+
if (options?.offset) params.offset = String(options.offset);
|
|
133
|
+
const { data } = await this.http.get(`/api/users/${encodeURIComponent(visitorId)}/events`, { params });
|
|
134
|
+
return data;
|
|
135
|
+
}
|
|
136
|
+
// ─── Retention ──────────────────────────────────────
|
|
137
|
+
async getRetention(options) {
|
|
138
|
+
const params = {
|
|
139
|
+
siteId: this.siteId,
|
|
140
|
+
metric: "retention"
|
|
141
|
+
};
|
|
142
|
+
if (options?.period) params.period = options.period;
|
|
143
|
+
if (options?.weeks) params.weeks = String(options.weeks);
|
|
144
|
+
const { data } = await this.http.get(this.endpoint, { params });
|
|
145
|
+
return data;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
function createClient(config) {
|
|
149
|
+
return new LitemetricsClient(config);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// src/sites.ts
|
|
153
|
+
import axios2 from "axios";
|
|
154
|
+
var SitesClient = class {
|
|
155
|
+
endpoint;
|
|
156
|
+
http;
|
|
157
|
+
constructor(config) {
|
|
158
|
+
this.endpoint = config.endpoint ?? "/api/sites";
|
|
159
|
+
this.http = axios2.create({
|
|
160
|
+
baseURL: config.baseUrl.replace(/\/$/, ""),
|
|
161
|
+
headers: {
|
|
162
|
+
"Content-Type": "application/json",
|
|
163
|
+
"X-Litemetrics-Admin-Secret": config.adminSecret
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
async listSites() {
|
|
168
|
+
const { data } = await this.http.get(this.endpoint);
|
|
169
|
+
return data;
|
|
170
|
+
}
|
|
171
|
+
async getSite(siteId) {
|
|
172
|
+
const { data } = await this.http.get(`${this.endpoint}/${siteId}`);
|
|
173
|
+
return data;
|
|
174
|
+
}
|
|
175
|
+
async createSite(body) {
|
|
176
|
+
const { data } = await this.http.post(this.endpoint, body);
|
|
177
|
+
return data;
|
|
178
|
+
}
|
|
179
|
+
async updateSite(siteId, body) {
|
|
180
|
+
const { data } = await this.http.put(`${this.endpoint}/${siteId}`, body);
|
|
181
|
+
return data;
|
|
182
|
+
}
|
|
183
|
+
async deleteSite(siteId) {
|
|
184
|
+
const { data } = await this.http.delete(`${this.endpoint}/${siteId}`);
|
|
185
|
+
return data;
|
|
186
|
+
}
|
|
187
|
+
async regenerateSecret(siteId) {
|
|
188
|
+
const { data } = await this.http.post(`${this.endpoint}/${siteId}/regenerate`);
|
|
189
|
+
return data;
|
|
190
|
+
}
|
|
191
|
+
};
|
|
192
|
+
function createSitesClient(config) {
|
|
193
|
+
return new SitesClient(config);
|
|
194
|
+
}
|
|
195
|
+
export {
|
|
196
|
+
LitemetricsClient,
|
|
197
|
+
SitesClient,
|
|
198
|
+
createClient,
|
|
199
|
+
createSitesClient
|
|
200
|
+
};
|
|
201
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/client.ts","../src/sites.ts"],"sourcesContent":["import axios, { type AxiosInstance } from 'axios';\nimport type { Metric, Period, Granularity, QueryResult, TimeSeriesResult, RetentionResult, EventListResult, UserListResult, UserDetail, EventType } from '@litemetrics/core';\n\nexport interface LitemetricsClientConfig {\n /** Base URL of the Litemetrics server (e.g. \"https://analytics.myapp.com\") */\n baseUrl: string;\n /** Site ID to query */\n siteId: string;\n /** Secret key for authentication (sk_xxx) */\n secretKey?: string;\n /** Query endpoint path (default: \"/api/stats\") */\n endpoint?: string;\n /** Custom headers to include in requests */\n headers?: Record<string, string>;\n}\n\nexport interface StatsOptions {\n period?: Period;\n dateFrom?: string;\n dateTo?: string;\n limit?: number;\n filters?: Record<string, string>;\n compare?: boolean;\n}\n\nexport interface RetentionOptions {\n period?: Period;\n weeks?: number;\n}\n\nexport interface EventsListOptions {\n type?: EventType;\n eventName?: string;\n visitorId?: string;\n userId?: string;\n period?: Period;\n dateFrom?: string;\n dateTo?: string;\n limit?: number;\n offset?: number;\n}\n\nexport interface TimeSeriesOptions {\n period?: Period;\n dateFrom?: string;\n dateTo?: string;\n granularity?: Granularity;\n}\n\nexport interface UsersListOptions {\n search?: string;\n limit?: number;\n offset?: number;\n}\n\nexport class LitemetricsClient {\n private siteId: string;\n private endpoint: string;\n private http: AxiosInstance;\n\n constructor(config: LitemetricsClientConfig) {\n this.siteId = config.siteId;\n this.endpoint = config.endpoint ?? '/api/stats';\n\n const headers: Record<string, string> = { ...config.headers };\n if (config.secretKey) {\n headers['X-Litemetrics-Secret'] = config.secretKey;\n }\n\n this.http = axios.create({\n baseURL: config.baseUrl.replace(/\\/$/, ''),\n headers,\n });\n }\n\n /** Change the active site ID */\n setSiteId(siteId: string): void {\n this.siteId = siteId;\n }\n\n /** Get any metric */\n async getStats(metric: Metric, options?: StatsOptions): Promise<QueryResult> {\n const params: Record<string, string> = {\n siteId: this.siteId,\n metric,\n };\n\n if (options?.period) params.period = options.period;\n if (options?.dateFrom) params.dateFrom = options.dateFrom;\n if (options?.dateTo) params.dateTo = options.dateTo;\n if (options?.limit) params.limit = String(options.limit);\n if (options?.filters) params.filters = JSON.stringify(options.filters);\n if (options?.compare) params.compare = 'true';\n\n const { data } = await this.http.get<QueryResult>(this.endpoint, { params });\n return data;\n }\n\n // ─── Convenience methods ──────────────────────────────────\n\n async getPageviews(options?: StatsOptions) { return this.getStats('pageviews', options); }\n async getVisitors(options?: StatsOptions) { return this.getStats('visitors', options); }\n async getSessions(options?: StatsOptions) { return this.getStats('sessions', options); }\n async getEvents(options?: StatsOptions) { return this.getStats('events', options); }\n async getTopPages(options?: StatsOptions) { return this.getStats('top_pages', options); }\n async getTopReferrers(options?: StatsOptions) { return this.getStats('top_referrers', options); }\n async getTopCountries(options?: StatsOptions) { return this.getStats('top_countries', options); }\n async getTopCities(options?: StatsOptions) { return this.getStats('top_cities', options); }\n async getTopEvents(options?: StatsOptions) { return this.getStats('top_events', options); }\n async getTopDevices(options?: StatsOptions) { return this.getStats('top_devices', options); }\n async getTopBrowsers(options?: StatsOptions) { return this.getStats('top_browsers', options); }\n async getTopOS(options?: StatsOptions) { return this.getStats('top_os', options); }\n\n /** Fetch multiple metrics in parallel */\n async getOverview(\n metrics: Metric[] = ['pageviews', 'visitors', 'sessions', 'events'],\n options?: StatsOptions,\n ): Promise<Record<Metric, QueryResult>> {\n const results = await Promise.all(\n metrics.map((m) => this.getStats(m, options).then((r) => [m, r] as const)),\n );\n return Object.fromEntries(results) as Record<Metric, QueryResult>;\n }\n\n // ─── Time series ──────────────────────────────────────\n\n async getTimeSeries(\n metric: 'pageviews' | 'visitors' | 'sessions',\n options?: TimeSeriesOptions,\n ): Promise<TimeSeriesResult> {\n const params: Record<string, string> = {\n siteId: this.siteId,\n metric: 'timeseries',\n tsMetric: metric,\n };\n\n if (options?.period) params.period = options.period;\n if (options?.dateFrom) params.dateFrom = options.dateFrom;\n if (options?.dateTo) params.dateTo = options.dateTo;\n if (options?.granularity) params.granularity = options.granularity;\n\n const { data } = await this.http.get<TimeSeriesResult>(this.endpoint, { params });\n return data;\n }\n\n // ─── Event listing ──────────────────────────────────────\n\n async getEventsList(options?: EventsListOptions): Promise<EventListResult> {\n const params: Record<string, string> = { siteId: this.siteId };\n\n if (options?.type) params.type = options.type;\n if (options?.eventName) params.eventName = options.eventName;\n if (options?.visitorId) params.visitorId = options.visitorId;\n if (options?.userId) params.userId = options.userId;\n if (options?.period) params.period = options.period;\n if (options?.dateFrom) params.dateFrom = options.dateFrom;\n if (options?.dateTo) params.dateTo = options.dateTo;\n if (options?.limit) params.limit = String(options.limit);\n if (options?.offset) params.offset = String(options.offset);\n\n const { data } = await this.http.get<EventListResult>('/api/events', { params });\n return data;\n }\n\n // ─── User listing ──────────────────────────────────────\n\n async getUsers(options?: UsersListOptions): Promise<UserListResult> {\n const params: Record<string, string> = { siteId: this.siteId };\n\n if (options?.search) params.search = options.search;\n if (options?.limit) params.limit = String(options.limit);\n if (options?.offset) params.offset = String(options.offset);\n\n const { data } = await this.http.get<UserListResult>('/api/users', { params });\n return data;\n }\n\n async getUserDetail(visitorId: string): Promise<UserDetail> {\n const params: Record<string, string> = { siteId: this.siteId };\n const { data } = await this.http.get<{ user: UserDetail }>(`/api/users/${encodeURIComponent(visitorId)}`, { params });\n return data.user;\n }\n\n async getUserEvents(visitorId: string, options?: EventsListOptions): Promise<EventListResult> {\n const params: Record<string, string> = { siteId: this.siteId };\n\n if (options?.type) params.type = options.type;\n if (options?.period) params.period = options.period;\n if (options?.dateFrom) params.dateFrom = options.dateFrom;\n if (options?.dateTo) params.dateTo = options.dateTo;\n if (options?.limit) params.limit = String(options.limit);\n if (options?.offset) params.offset = String(options.offset);\n\n const { data } = await this.http.get<EventListResult>(`/api/users/${encodeURIComponent(visitorId)}/events`, { params });\n return data;\n }\n\n // ─── Retention ──────────────────────────────────────\n\n async getRetention(options?: RetentionOptions): Promise<RetentionResult> {\n const params: Record<string, string> = {\n siteId: this.siteId,\n metric: 'retention',\n };\n\n if (options?.period) params.period = options.period;\n if (options?.weeks) params.weeks = String(options.weeks);\n\n const { data } = await this.http.get<RetentionResult>(this.endpoint, { params });\n return data;\n }\n}\n\n/** Create an LitemetricsClient instance */\nexport function createClient(config: LitemetricsClientConfig): LitemetricsClient {\n return new LitemetricsClient(config);\n}\n","import axios, { type AxiosInstance } from 'axios';\nimport type { Site, CreateSiteRequest, UpdateSiteRequest } from '@litemetrics/core';\n\nexport interface SitesClientConfig {\n /** Base URL of the Litemetrics server */\n baseUrl: string;\n /** Admin secret for authentication */\n adminSecret: string;\n /** Sites endpoint path (default: \"/api/sites\") */\n endpoint?: string;\n}\n\nexport class SitesClient {\n private endpoint: string;\n private http: AxiosInstance;\n\n constructor(config: SitesClientConfig) {\n this.endpoint = config.endpoint ?? '/api/sites';\n\n this.http = axios.create({\n baseURL: config.baseUrl.replace(/\\/$/, ''),\n headers: {\n 'Content-Type': 'application/json',\n 'X-Litemetrics-Admin-Secret': config.adminSecret,\n },\n });\n }\n\n async listSites(): Promise<{ sites: Site[]; total: number }> {\n const { data } = await this.http.get(this.endpoint);\n return data;\n }\n\n async getSite(siteId: string): Promise<{ site: Site }> {\n const { data } = await this.http.get(`${this.endpoint}/${siteId}`);\n return data;\n }\n\n async createSite(body: CreateSiteRequest): Promise<{ site: Site }> {\n const { data } = await this.http.post(this.endpoint, body);\n return data;\n }\n\n async updateSite(siteId: string, body: UpdateSiteRequest): Promise<{ site: Site }> {\n const { data } = await this.http.put(`${this.endpoint}/${siteId}`, body);\n return data;\n }\n\n async deleteSite(siteId: string): Promise<{ ok: boolean }> {\n const { data } = await this.http.delete(`${this.endpoint}/${siteId}`);\n return data;\n }\n\n async regenerateSecret(siteId: string): Promise<{ site: Site }> {\n const { data } = await this.http.post(`${this.endpoint}/${siteId}/regenerate`);\n return data;\n }\n}\n\nexport function createSitesClient(config: SitesClientConfig): SitesClient {\n return new SitesClient(config);\n}\n"],"mappings":"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","names":["axios"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@litemetrics/client",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Client-side SDK for querying Litemetrics analytics data",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Metehan Kurucu",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/metehankurucu/litemetrics",
|
|
10
|
+
"directory": "packages/client"
|
|
11
|
+
},
|
|
12
|
+
"keywords": ["analytics", "litemetrics", "client", "dashboard", "query"],
|
|
13
|
+
"type": "module",
|
|
14
|
+
"main": "./dist/index.cjs",
|
|
15
|
+
"module": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"import": "./dist/index.js",
|
|
21
|
+
"require": "./dist/index.cjs"
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"files": ["dist"],
|
|
25
|
+
"publishConfig": {
|
|
26
|
+
"access": "public"
|
|
27
|
+
},
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsup",
|
|
30
|
+
"dev": "tsup --watch",
|
|
31
|
+
"typecheck": "tsc --noEmit",
|
|
32
|
+
"clean": "rm -rf dist"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@litemetrics/core": "0.1.0",
|
|
36
|
+
"axios": "^1.13.4"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"tsup": "^8",
|
|
40
|
+
"typescript": "^5.7"
|
|
41
|
+
}
|
|
42
|
+
}
|