@aranova/tracking-next 0.9.1 → 0.10.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/README.md CHANGED
@@ -200,10 +200,15 @@ const sales = createSalesClient<AranovaService>({
200
200
  endpoint: process.env.ARANOVA_TRACKING_ENDPOINT!,
201
201
  });
202
202
  const { items, next_cursor } = await sales.list({ limit: 50 });
203
+ const summary = await sales.summary({ range: '30d' }); // currency-grouped aggregations
203
204
  ```
204
205
 
205
- A public-key client calling `list`/`get`/`update`/`delete` gets a `403` telling it
206
- to use a secret key server-side.
206
+ `sales.summary({ range })` returns revenue and average order value per currency,
207
+ distinct customers, by-service / by-currency / by-category breakdowns, and a
208
+ revenue/count trend — a secret-key read scoped to the key's business.
209
+
210
+ A public-key client calling `list`/`summary`/`get`/`update`/`delete` gets a `403`
211
+ telling it to use a secret key server-side.
207
212
 
208
213
  Generate the typed `AranovaService` union from your dashboard services with the CLI
209
214
  (install it as a **devDependency**):
package/dist/index.d.mts CHANGED
@@ -1503,6 +1503,61 @@ interface SaleListQuery extends SaleFilters {
1503
1503
  limit?: number;
1504
1504
  cursor?: string | null;
1505
1505
  }
1506
+ declare const TRACKING_RANGES: readonly ["24h", "7d", "30d"];
1507
+ type TrackingOverviewRange = (typeof TRACKING_RANGES)[number];
1508
+ /** Query input for `SalesClient.summary()` — filters + range + options. */
1509
+ interface SaleSummaryQuery extends SaleFilters {
1510
+ range: TrackingOverviewRange;
1511
+ /** Include the per-category line-item breakdown (extra join; default false). */
1512
+ include_categories?: boolean;
1513
+ /** Surface soft-deleted services individually (flagged "(deleted)") instead of
1514
+ * rolling them into a single "Deleted services" bucket. Default false. */
1515
+ include_deleted_services?: boolean;
1516
+ /** Cap on the by-service / by-category rows (1–50, default 10). */
1517
+ top_n?: number;
1518
+ }
1519
+ interface CurrencyRevenue {
1520
+ currency: SupportedCurrency;
1521
+ sale_count: number;
1522
+ revenue_cents: number;
1523
+ average_order_value_cents: number;
1524
+ }
1525
+ interface SalesServiceBreakdown {
1526
+ service_id: string | null;
1527
+ service_key: string | null;
1528
+ /** "Unassigned" when the sale has no service. */
1529
+ service_label: string | null;
1530
+ currency: SupportedCurrency;
1531
+ sale_count: number;
1532
+ revenue_cents: number;
1533
+ }
1534
+ interface SalesCategoryBreakdown {
1535
+ category: string | null;
1536
+ currency: SupportedCurrency;
1537
+ /** sum(unit_price_cents * quantity) — advisory, not authoritative. */
1538
+ revenue_cents: number;
1539
+ /** Decimal string. */
1540
+ quantity: string;
1541
+ }
1542
+ interface SalesTrendPoint {
1543
+ bucket_start: string;
1544
+ currency: SupportedCurrency;
1545
+ sale_count: number;
1546
+ revenue_cents: number;
1547
+ }
1548
+ interface SaleSummary {
1549
+ range: TrackingOverviewRange;
1550
+ business_id: string | null;
1551
+ metrics: {
1552
+ sale_count: number;
1553
+ distinct_customers: number;
1554
+ by_currency: CurrencyRevenue[];
1555
+ };
1556
+ by_service: SalesServiceBreakdown[];
1557
+ by_currency: CurrencyRevenue[];
1558
+ by_category: SalesCategoryBreakdown[];
1559
+ series: SalesTrendPoint[];
1560
+ }
1506
1561
 
1507
1562
  /** Shared config for every sales HTTP helper. */
1508
1563
  interface SalesTransportConfig {
@@ -1542,6 +1597,12 @@ interface SalesClient<TService extends string = string> {
1542
1597
  occurred_at?: string;
1543
1598
  }): Promise<Sale>;
1544
1599
  list(query?: SaleListQuery): Promise<SaleCursorPage>;
1600
+ /**
1601
+ * Currency-grouped aggregations for the key's business (revenue per currency,
1602
+ * AOV, distinct customers, by-service / by-currency / by-category breakdowns,
1603
+ * and a revenue/count trend). Secret key only — a public key gets a `403`.
1604
+ */
1605
+ summary(query: SaleSummaryQuery): Promise<SaleSummary>;
1545
1606
  get(id: string): Promise<Sale>;
1546
1607
  update(id: string, patch: Omit<SaleUpdateInput, 'service'> & {
1547
1608
  service?: TService | null;
@@ -1803,4 +1864,4 @@ interface CreateTrackingResult<TRegistry extends TriggerRegistryConfig> {
1803
1864
  */
1804
1865
  declare function createTracking<TRegistry extends TriggerRegistryConfig>(options: CreateTrackingOptions<TRegistry>): CreateTrackingResult<TRegistry>;
1805
1866
 
1806
- export { AranovaApiError, type AutomaticEventName, ConsentBanner, type ConsentBannerProps, ConsentState, type CreateTrackingOptions, type CreateTrackingResult, type CtaClickConfig, type CtaClickMetadata, type EventConfig, type EventMetadata, type EventName, type FormStartConfig, type FormStartMetadata, type FormSubmitConfig, type FormSubmitMetadata, GoogleAdsTracking, type GoogleAdsTrackingProps, type JsonValue, type ManualEventName, type MultiPageSessionConfig, type MultiPageSessionMetadata, type PageViewConfig, type PageViewMetadata, type PhoneClickConfig, type PhoneClickMetadata, type PublicServiceItem, type RegisteredAutomaticEvents, type RegisteredManualEvents, type Sale, type SaleCursorPage, type SaleInput, type SaleItem, type SaleItemInput, type SaleListPage, type SaleListQuery, type SaleUpdateInput, type SalesClient, type SalesClientConfig, type SalesTransportConfig, type ScrollDepthConfig, type ScrollDepthMetadata, type SpecificPageName, type SpecificPageVisitConfig, type SpecificPageVisitMetadata, type SupportedCurrency, TRACKING_PARAM_KEYS, type TimeOnSiteConfig, type TimeOnSiteMetadata, type TrackingClient, TrackingClientContext, TrackingEventCreatePayload, TrackingInstallSurface, TrackingParams, type TrackingProviderProps, TrackingSessionUpsertPayload, type TriggerRegistryConfig, type TypedTrackEventOptions, type TypedTrackingClient, type UseConsentResult, captureTrackingParamsFromLocation, createSalesClient, createTracking, createTrackingClientContext, createTrackingEventCreatePayload, createTrackingSessionUpsertPayload, fetchServices, formatMoney, fromMinor, getConsentState, resetConsent, setConsentState, toMinor, useConsent, useConsentState, useGclid, useTrackingParams };
1867
+ export { AranovaApiError, type AutomaticEventName, ConsentBanner, type ConsentBannerProps, ConsentState, type CreateTrackingOptions, type CreateTrackingResult, type CtaClickConfig, type CtaClickMetadata, type CurrencyRevenue, type EventConfig, type EventMetadata, type EventName, type FormStartConfig, type FormStartMetadata, type FormSubmitConfig, type FormSubmitMetadata, GoogleAdsTracking, type GoogleAdsTrackingProps, type JsonValue, type ManualEventName, type MultiPageSessionConfig, type MultiPageSessionMetadata, type PageViewConfig, type PageViewMetadata, type PhoneClickConfig, type PhoneClickMetadata, type PublicServiceItem, type RegisteredAutomaticEvents, type RegisteredManualEvents, type Sale, type SaleCursorPage, type SaleInput, type SaleItem, type SaleItemInput, type SaleListPage, type SaleListQuery, type SaleSummary, type SaleSummaryQuery, type SaleUpdateInput, type SalesCategoryBreakdown, type SalesClient, type SalesClientConfig, type SalesServiceBreakdown, type SalesTransportConfig, type SalesTrendPoint, type ScrollDepthConfig, type ScrollDepthMetadata, type SpecificPageName, type SpecificPageVisitConfig, type SpecificPageVisitMetadata, type SupportedCurrency, TRACKING_PARAM_KEYS, type TimeOnSiteConfig, type TimeOnSiteMetadata, type TrackingClient, TrackingClientContext, TrackingEventCreatePayload, TrackingInstallSurface, type TrackingOverviewRange, TrackingParams, type TrackingProviderProps, TrackingSessionUpsertPayload, type TriggerRegistryConfig, type TypedTrackEventOptions, type TypedTrackingClient, type UseConsentResult, captureTrackingParamsFromLocation, createSalesClient, createTracking, createTrackingClientContext, createTrackingEventCreatePayload, createTrackingSessionUpsertPayload, fetchServices, formatMoney, fromMinor, getConsentState, resetConsent, setConsentState, toMinor, useConsent, useConsentState, useGclid, useTrackingParams };
package/dist/index.d.ts CHANGED
@@ -1503,6 +1503,61 @@ interface SaleListQuery extends SaleFilters {
1503
1503
  limit?: number;
1504
1504
  cursor?: string | null;
1505
1505
  }
1506
+ declare const TRACKING_RANGES: readonly ["24h", "7d", "30d"];
1507
+ type TrackingOverviewRange = (typeof TRACKING_RANGES)[number];
1508
+ /** Query input for `SalesClient.summary()` — filters + range + options. */
1509
+ interface SaleSummaryQuery extends SaleFilters {
1510
+ range: TrackingOverviewRange;
1511
+ /** Include the per-category line-item breakdown (extra join; default false). */
1512
+ include_categories?: boolean;
1513
+ /** Surface soft-deleted services individually (flagged "(deleted)") instead of
1514
+ * rolling them into a single "Deleted services" bucket. Default false. */
1515
+ include_deleted_services?: boolean;
1516
+ /** Cap on the by-service / by-category rows (1–50, default 10). */
1517
+ top_n?: number;
1518
+ }
1519
+ interface CurrencyRevenue {
1520
+ currency: SupportedCurrency;
1521
+ sale_count: number;
1522
+ revenue_cents: number;
1523
+ average_order_value_cents: number;
1524
+ }
1525
+ interface SalesServiceBreakdown {
1526
+ service_id: string | null;
1527
+ service_key: string | null;
1528
+ /** "Unassigned" when the sale has no service. */
1529
+ service_label: string | null;
1530
+ currency: SupportedCurrency;
1531
+ sale_count: number;
1532
+ revenue_cents: number;
1533
+ }
1534
+ interface SalesCategoryBreakdown {
1535
+ category: string | null;
1536
+ currency: SupportedCurrency;
1537
+ /** sum(unit_price_cents * quantity) — advisory, not authoritative. */
1538
+ revenue_cents: number;
1539
+ /** Decimal string. */
1540
+ quantity: string;
1541
+ }
1542
+ interface SalesTrendPoint {
1543
+ bucket_start: string;
1544
+ currency: SupportedCurrency;
1545
+ sale_count: number;
1546
+ revenue_cents: number;
1547
+ }
1548
+ interface SaleSummary {
1549
+ range: TrackingOverviewRange;
1550
+ business_id: string | null;
1551
+ metrics: {
1552
+ sale_count: number;
1553
+ distinct_customers: number;
1554
+ by_currency: CurrencyRevenue[];
1555
+ };
1556
+ by_service: SalesServiceBreakdown[];
1557
+ by_currency: CurrencyRevenue[];
1558
+ by_category: SalesCategoryBreakdown[];
1559
+ series: SalesTrendPoint[];
1560
+ }
1506
1561
 
1507
1562
  /** Shared config for every sales HTTP helper. */
1508
1563
  interface SalesTransportConfig {
@@ -1542,6 +1597,12 @@ interface SalesClient<TService extends string = string> {
1542
1597
  occurred_at?: string;
1543
1598
  }): Promise<Sale>;
1544
1599
  list(query?: SaleListQuery): Promise<SaleCursorPage>;
1600
+ /**
1601
+ * Currency-grouped aggregations for the key's business (revenue per currency,
1602
+ * AOV, distinct customers, by-service / by-currency / by-category breakdowns,
1603
+ * and a revenue/count trend). Secret key only — a public key gets a `403`.
1604
+ */
1605
+ summary(query: SaleSummaryQuery): Promise<SaleSummary>;
1545
1606
  get(id: string): Promise<Sale>;
1546
1607
  update(id: string, patch: Omit<SaleUpdateInput, 'service'> & {
1547
1608
  service?: TService | null;
@@ -1803,4 +1864,4 @@ interface CreateTrackingResult<TRegistry extends TriggerRegistryConfig> {
1803
1864
  */
1804
1865
  declare function createTracking<TRegistry extends TriggerRegistryConfig>(options: CreateTrackingOptions<TRegistry>): CreateTrackingResult<TRegistry>;
1805
1866
 
1806
- export { AranovaApiError, type AutomaticEventName, ConsentBanner, type ConsentBannerProps, ConsentState, type CreateTrackingOptions, type CreateTrackingResult, type CtaClickConfig, type CtaClickMetadata, type EventConfig, type EventMetadata, type EventName, type FormStartConfig, type FormStartMetadata, type FormSubmitConfig, type FormSubmitMetadata, GoogleAdsTracking, type GoogleAdsTrackingProps, type JsonValue, type ManualEventName, type MultiPageSessionConfig, type MultiPageSessionMetadata, type PageViewConfig, type PageViewMetadata, type PhoneClickConfig, type PhoneClickMetadata, type PublicServiceItem, type RegisteredAutomaticEvents, type RegisteredManualEvents, type Sale, type SaleCursorPage, type SaleInput, type SaleItem, type SaleItemInput, type SaleListPage, type SaleListQuery, type SaleUpdateInput, type SalesClient, type SalesClientConfig, type SalesTransportConfig, type ScrollDepthConfig, type ScrollDepthMetadata, type SpecificPageName, type SpecificPageVisitConfig, type SpecificPageVisitMetadata, type SupportedCurrency, TRACKING_PARAM_KEYS, type TimeOnSiteConfig, type TimeOnSiteMetadata, type TrackingClient, TrackingClientContext, TrackingEventCreatePayload, TrackingInstallSurface, TrackingParams, type TrackingProviderProps, TrackingSessionUpsertPayload, type TriggerRegistryConfig, type TypedTrackEventOptions, type TypedTrackingClient, type UseConsentResult, captureTrackingParamsFromLocation, createSalesClient, createTracking, createTrackingClientContext, createTrackingEventCreatePayload, createTrackingSessionUpsertPayload, fetchServices, formatMoney, fromMinor, getConsentState, resetConsent, setConsentState, toMinor, useConsent, useConsentState, useGclid, useTrackingParams };
1867
+ export { AranovaApiError, type AutomaticEventName, ConsentBanner, type ConsentBannerProps, ConsentState, type CreateTrackingOptions, type CreateTrackingResult, type CtaClickConfig, type CtaClickMetadata, type CurrencyRevenue, type EventConfig, type EventMetadata, type EventName, type FormStartConfig, type FormStartMetadata, type FormSubmitConfig, type FormSubmitMetadata, GoogleAdsTracking, type GoogleAdsTrackingProps, type JsonValue, type ManualEventName, type MultiPageSessionConfig, type MultiPageSessionMetadata, type PageViewConfig, type PageViewMetadata, type PhoneClickConfig, type PhoneClickMetadata, type PublicServiceItem, type RegisteredAutomaticEvents, type RegisteredManualEvents, type Sale, type SaleCursorPage, type SaleInput, type SaleItem, type SaleItemInput, type SaleListPage, type SaleListQuery, type SaleSummary, type SaleSummaryQuery, type SaleUpdateInput, type SalesCategoryBreakdown, type SalesClient, type SalesClientConfig, type SalesServiceBreakdown, type SalesTransportConfig, type SalesTrendPoint, type ScrollDepthConfig, type ScrollDepthMetadata, type SpecificPageName, type SpecificPageVisitConfig, type SpecificPageVisitMetadata, type SupportedCurrency, TRACKING_PARAM_KEYS, type TimeOnSiteConfig, type TimeOnSiteMetadata, type TrackingClient, TrackingClientContext, TrackingEventCreatePayload, TrackingInstallSurface, type TrackingOverviewRange, TrackingParams, type TrackingProviderProps, TrackingSessionUpsertPayload, type TriggerRegistryConfig, type TypedTrackEventOptions, type TypedTrackingClient, type UseConsentResult, captureTrackingParamsFromLocation, createSalesClient, createTracking, createTrackingClientContext, createTrackingEventCreatePayload, createTrackingSessionUpsertPayload, fetchServices, formatMoney, fromMinor, getConsentState, resetConsent, setConsentState, toMinor, useConsent, useConsentState, useGclid, useTrackingParams };
package/dist/index.js CHANGED
@@ -1190,6 +1190,16 @@ function createSalesClient(config) {
1190
1190
  ...cursor !== void 0 ? { cursor } : {}
1191
1191
  });
1192
1192
  },
1193
+ async summary(query) {
1194
+ const { range, include_categories, include_deleted_services, top_n, ...filters } = query;
1195
+ return salesRequest(config, "POST", "/sales/summary", {
1196
+ filters,
1197
+ range,
1198
+ ...include_categories !== void 0 ? { include_categories } : {},
1199
+ ...include_deleted_services !== void 0 ? { include_deleted_services } : {},
1200
+ ...top_n !== void 0 ? { top_n } : {}
1201
+ });
1202
+ },
1193
1203
  async get(id) {
1194
1204
  return salesRequest(config, "GET", `/sales/${id}`);
1195
1205
  },
@@ -1494,7 +1504,7 @@ function GoogleAdsTracking(props) {
1494
1504
  var import_navigation = require("next/navigation");
1495
1505
 
1496
1506
  // package.json
1497
- var version = "0.9.1";
1507
+ var version = "0.10.0";
1498
1508
 
1499
1509
  // src/factory.tsx
1500
1510
  var import_react3 = require("react");