feat: add dashboard analytics to sdk and public api (#353)
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
import { paths } from "../types/schema";
|
||||
import { ErrorResponse } from "../types";
|
||||
import { UseSend } from "./usesend";
|
||||
|
||||
type EmailTimeSeriesQuery =
|
||||
paths["/v1/analytics/email-time-series"]["get"]["parameters"]["query"];
|
||||
|
||||
type EmailTimeSeriesResponseSuccess =
|
||||
paths["/v1/analytics/email-time-series"]["get"]["responses"]["200"]["content"]["application/json"];
|
||||
|
||||
type EmailTimeSeriesResponse = {
|
||||
data: EmailTimeSeriesResponseSuccess | null;
|
||||
error: ErrorResponse | null;
|
||||
};
|
||||
|
||||
type ReputationMetricsQuery =
|
||||
paths["/v1/analytics/reputation-metrics"]["get"]["parameters"]["query"];
|
||||
|
||||
type ReputationMetricsResponseSuccess =
|
||||
paths["/v1/analytics/reputation-metrics"]["get"]["responses"]["200"]["content"]["application/json"];
|
||||
|
||||
type ReputationMetricsResponse = {
|
||||
data: ReputationMetricsResponseSuccess | null;
|
||||
error: ErrorResponse | null;
|
||||
};
|
||||
|
||||
export class Analytics {
|
||||
constructor(private readonly usesend: UseSend) {
|
||||
this.usesend = usesend;
|
||||
}
|
||||
|
||||
async emailTimeSeries(
|
||||
query?: EmailTimeSeriesQuery,
|
||||
): Promise<EmailTimeSeriesResponse> {
|
||||
const params = new URLSearchParams();
|
||||
if (query?.days) params.set("days", query.days);
|
||||
if (query?.domainId) params.set("domainId", query.domainId);
|
||||
|
||||
const qs = params.toString();
|
||||
const path = `/analytics/email-time-series${qs ? `?${qs}` : ""}`;
|
||||
|
||||
return this.usesend.get<EmailTimeSeriesResponseSuccess>(path);
|
||||
}
|
||||
|
||||
async reputationMetrics(
|
||||
query?: ReputationMetricsQuery,
|
||||
): Promise<ReputationMetricsResponse> {
|
||||
const params = new URLSearchParams();
|
||||
if (query?.domainId) params.set("domainId", query.domainId);
|
||||
|
||||
const qs = params.toString();
|
||||
const path = `/analytics/reputation-metrics${qs ? `?${qs}` : ""}`;
|
||||
|
||||
return this.usesend.get<ReputationMetricsResponseSuccess>(path);
|
||||
}
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import { ContactBooks } from "./contactBook";
|
||||
import { Emails } from "./email";
|
||||
import { Domains } from "./domain";
|
||||
import { Campaigns } from "./campaign";
|
||||
import { Analytics } from "./analytics";
|
||||
import { Webhooks } from "./webhooks";
|
||||
|
||||
const defaultBaseUrl = "https://app.usesend.com";
|
||||
@@ -26,6 +27,7 @@ export class UseSend {
|
||||
readonly contacts = new Contacts(this);
|
||||
readonly contactBooks = new ContactBooks(this);
|
||||
readonly campaigns = new Campaigns(this);
|
||||
readonly analytics = new Analytics(this);
|
||||
url = baseUrl;
|
||||
|
||||
constructor(
|
||||
|
||||
Vendored
+102
@@ -1715,6 +1715,108 @@ export interface paths {
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/v1/analytics/email-time-series": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
get: {
|
||||
parameters: {
|
||||
query?: {
|
||||
/** @description Number of days to retrieve data for (default: 30) */
|
||||
days?: "7" | "30";
|
||||
/** @description Filter by domain ID */
|
||||
domainId?: string;
|
||||
};
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody?: never;
|
||||
responses: {
|
||||
/** @description Retrieve email time series data */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": {
|
||||
result: {
|
||||
date: string;
|
||||
sent: number;
|
||||
delivered: number;
|
||||
opened: number;
|
||||
clicked: number;
|
||||
bounced: number;
|
||||
complained: number;
|
||||
}[];
|
||||
totalCounts: {
|
||||
sent: number;
|
||||
delivered: number;
|
||||
opened: number;
|
||||
clicked: number;
|
||||
bounced: number;
|
||||
complained: number;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
put?: never;
|
||||
post?: never;
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
"/v1/analytics/reputation-metrics": {
|
||||
parameters: {
|
||||
query?: never;
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
get: {
|
||||
parameters: {
|
||||
query?: {
|
||||
/** @description Filter by domain ID */
|
||||
domainId?: string;
|
||||
};
|
||||
header?: never;
|
||||
path?: never;
|
||||
cookie?: never;
|
||||
};
|
||||
requestBody?: never;
|
||||
responses: {
|
||||
/** @description Retrieve reputation metrics data */
|
||||
200: {
|
||||
headers: {
|
||||
[name: string]: unknown;
|
||||
};
|
||||
content: {
|
||||
"application/json": {
|
||||
delivered: number;
|
||||
hardBounced: number;
|
||||
complained: number;
|
||||
bounceRate: number;
|
||||
complaintRate: number;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
put?: never;
|
||||
post?: never;
|
||||
delete?: never;
|
||||
options?: never;
|
||||
head?: never;
|
||||
patch?: never;
|
||||
trace?: never;
|
||||
};
|
||||
}
|
||||
export type webhooks = Record<string, never>;
|
||||
export interface components {
|
||||
|
||||
Reference in New Issue
Block a user