@aranova/tracking-react 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
@@ -162,8 +162,12 @@ export default async function handler(_req, res) {
162
162
  }
163
163
  ```
164
164
 
165
- A public-key client calling `list`/`get`/`update`/`delete` gets a `403` telling it
166
- to use a secret key server-side.
165
+ `sales.summary({ range: '30d' })` returns currency-grouped aggregations (revenue and
166
+ average order value per currency, distinct customers, by-service / by-currency /
167
+ by-category breakdowns, and a revenue/count trend) — also a secret-key read.
168
+
169
+ A public-key client calling `list`/`summary`/`get`/`update`/`delete` gets a `403`
170
+ telling it to use a secret key server-side.
167
171
 
168
172
  Generate the typed `AranovaService` union from your dashboard services with the CLI
169
173
  (install it as a **devDependency**):
package/dist/index.d.mts CHANGED
@@ -1725,6 +1725,61 @@ interface SaleListQuery extends SaleFilters {
1725
1725
  limit?: number;
1726
1726
  cursor?: string | null;
1727
1727
  }
1728
+ declare const TRACKING_RANGES: readonly ["24h", "7d", "30d"];
1729
+ type TrackingOverviewRange = (typeof TRACKING_RANGES)[number];
1730
+ /** Query input for `SalesClient.summary()` — filters + range + options. */
1731
+ interface SaleSummaryQuery extends SaleFilters {
1732
+ range: TrackingOverviewRange;
1733
+ /** Include the per-category line-item breakdown (extra join; default false). */
1734
+ include_categories?: boolean;
1735
+ /** Surface soft-deleted services individually (flagged "(deleted)") instead of
1736
+ * rolling them into a single "Deleted services" bucket. Default false. */
1737
+ include_deleted_services?: boolean;
1738
+ /** Cap on the by-service / by-category rows (1–50, default 10). */
1739
+ top_n?: number;
1740
+ }
1741
+ interface CurrencyRevenue {
1742
+ currency: SupportedCurrency;
1743
+ sale_count: number;
1744
+ revenue_cents: number;
1745
+ average_order_value_cents: number;
1746
+ }
1747
+ interface SalesServiceBreakdown {
1748
+ service_id: string | null;
1749
+ service_key: string | null;
1750
+ /** "Unassigned" when the sale has no service. */
1751
+ service_label: string | null;
1752
+ currency: SupportedCurrency;
1753
+ sale_count: number;
1754
+ revenue_cents: number;
1755
+ }
1756
+ interface SalesCategoryBreakdown {
1757
+ category: string | null;
1758
+ currency: SupportedCurrency;
1759
+ /** sum(unit_price_cents * quantity) — advisory, not authoritative. */
1760
+ revenue_cents: number;
1761
+ /** Decimal string. */
1762
+ quantity: string;
1763
+ }
1764
+ interface SalesTrendPoint {
1765
+ bucket_start: string;
1766
+ currency: SupportedCurrency;
1767
+ sale_count: number;
1768
+ revenue_cents: number;
1769
+ }
1770
+ interface SaleSummary {
1771
+ range: TrackingOverviewRange;
1772
+ business_id: string | null;
1773
+ metrics: {
1774
+ sale_count: number;
1775
+ distinct_customers: number;
1776
+ by_currency: CurrencyRevenue[];
1777
+ };
1778
+ by_service: SalesServiceBreakdown[];
1779
+ by_currency: CurrencyRevenue[];
1780
+ by_category: SalesCategoryBreakdown[];
1781
+ series: SalesTrendPoint[];
1782
+ }
1728
1783
 
1729
1784
  /** Shared config for every sales HTTP helper. */
1730
1785
  interface SalesTransportConfig {
@@ -1764,6 +1819,12 @@ interface SalesClient<TService extends string = string> {
1764
1819
  occurred_at?: string;
1765
1820
  }): Promise<Sale>;
1766
1821
  list(query?: SaleListQuery): Promise<SaleCursorPage>;
1822
+ /**
1823
+ * Currency-grouped aggregations for the key's business (revenue per currency,
1824
+ * AOV, distinct customers, by-service / by-currency / by-category breakdowns,
1825
+ * and a revenue/count trend). Secret key only — a public key gets a `403`.
1826
+ */
1827
+ summary(query: SaleSummaryQuery): Promise<SaleSummary>;
1767
1828
  get(id: string): Promise<Sale>;
1768
1829
  update(id: string, patch: Omit<SaleUpdateInput, 'service'> & {
1769
1830
  service?: TService | null;
@@ -1963,4 +2024,4 @@ interface CreateTrackingResult<TRegistry extends TriggerRegistryConfig> {
1963
2024
  }
1964
2025
  declare function createTracking<TRegistry extends TriggerRegistryConfig>(options: CreateTrackingOptions<TRegistry>): CreateTrackingResult<TRegistry>;
1965
2026
 
1966
- export { AranovaApiError, type AutomaticEventName, ConsentBanner, type ConsentBannerProps, type 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, type TrackingClientContext, type TrackingEventCreatePayload, type TrackingInitConfig, type TrackingInstallSurface, type TrackingParams, type TrackingProviderProps, type 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 };
2027
+ export { AranovaApiError, type AutomaticEventName, ConsentBanner, type ConsentBannerProps, type 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, type TrackingClientContext, type TrackingEventCreatePayload, type TrackingInitConfig, type TrackingInstallSurface, type TrackingOverviewRange, type TrackingParams, type TrackingProviderProps, type 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
@@ -1725,6 +1725,61 @@ interface SaleListQuery extends SaleFilters {
1725
1725
  limit?: number;
1726
1726
  cursor?: string | null;
1727
1727
  }
1728
+ declare const TRACKING_RANGES: readonly ["24h", "7d", "30d"];
1729
+ type TrackingOverviewRange = (typeof TRACKING_RANGES)[number];
1730
+ /** Query input for `SalesClient.summary()` — filters + range + options. */
1731
+ interface SaleSummaryQuery extends SaleFilters {
1732
+ range: TrackingOverviewRange;
1733
+ /** Include the per-category line-item breakdown (extra join; default false). */
1734
+ include_categories?: boolean;
1735
+ /** Surface soft-deleted services individually (flagged "(deleted)") instead of
1736
+ * rolling them into a single "Deleted services" bucket. Default false. */
1737
+ include_deleted_services?: boolean;
1738
+ /** Cap on the by-service / by-category rows (1–50, default 10). */
1739
+ top_n?: number;
1740
+ }
1741
+ interface CurrencyRevenue {
1742
+ currency: SupportedCurrency;
1743
+ sale_count: number;
1744
+ revenue_cents: number;
1745
+ average_order_value_cents: number;
1746
+ }
1747
+ interface SalesServiceBreakdown {
1748
+ service_id: string | null;
1749
+ service_key: string | null;
1750
+ /** "Unassigned" when the sale has no service. */
1751
+ service_label: string | null;
1752
+ currency: SupportedCurrency;
1753
+ sale_count: number;
1754
+ revenue_cents: number;
1755
+ }
1756
+ interface SalesCategoryBreakdown {
1757
+ category: string | null;
1758
+ currency: SupportedCurrency;
1759
+ /** sum(unit_price_cents * quantity) — advisory, not authoritative. */
1760
+ revenue_cents: number;
1761
+ /** Decimal string. */
1762
+ quantity: string;
1763
+ }
1764
+ interface SalesTrendPoint {
1765
+ bucket_start: string;
1766
+ currency: SupportedCurrency;
1767
+ sale_count: number;
1768
+ revenue_cents: number;
1769
+ }
1770
+ interface SaleSummary {
1771
+ range: TrackingOverviewRange;
1772
+ business_id: string | null;
1773
+ metrics: {
1774
+ sale_count: number;
1775
+ distinct_customers: number;
1776
+ by_currency: CurrencyRevenue[];
1777
+ };
1778
+ by_service: SalesServiceBreakdown[];
1779
+ by_currency: CurrencyRevenue[];
1780
+ by_category: SalesCategoryBreakdown[];
1781
+ series: SalesTrendPoint[];
1782
+ }
1728
1783
 
1729
1784
  /** Shared config for every sales HTTP helper. */
1730
1785
  interface SalesTransportConfig {
@@ -1764,6 +1819,12 @@ interface SalesClient<TService extends string = string> {
1764
1819
  occurred_at?: string;
1765
1820
  }): Promise<Sale>;
1766
1821
  list(query?: SaleListQuery): Promise<SaleCursorPage>;
1822
+ /**
1823
+ * Currency-grouped aggregations for the key's business (revenue per currency,
1824
+ * AOV, distinct customers, by-service / by-currency / by-category breakdowns,
1825
+ * and a revenue/count trend). Secret key only — a public key gets a `403`.
1826
+ */
1827
+ summary(query: SaleSummaryQuery): Promise<SaleSummary>;
1767
1828
  get(id: string): Promise<Sale>;
1768
1829
  update(id: string, patch: Omit<SaleUpdateInput, 'service'> & {
1769
1830
  service?: TService | null;
@@ -1963,4 +2024,4 @@ interface CreateTrackingResult<TRegistry extends TriggerRegistryConfig> {
1963
2024
  }
1964
2025
  declare function createTracking<TRegistry extends TriggerRegistryConfig>(options: CreateTrackingOptions<TRegistry>): CreateTrackingResult<TRegistry>;
1965
2026
 
1966
- export { AranovaApiError, type AutomaticEventName, ConsentBanner, type ConsentBannerProps, type 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, type TrackingClientContext, type TrackingEventCreatePayload, type TrackingInitConfig, type TrackingInstallSurface, type TrackingParams, type TrackingProviderProps, type 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 };
2027
+ export { AranovaApiError, type AutomaticEventName, ConsentBanner, type ConsentBannerProps, type 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, type TrackingClientContext, type TrackingEventCreatePayload, type TrackingInitConfig, type TrackingInstallSurface, type TrackingOverviewRange, type TrackingParams, type TrackingProviderProps, type 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
@@ -1386,6 +1386,16 @@ function createSalesClient(config) {
1386
1386
  ...cursor !== void 0 ? { cursor } : {}
1387
1387
  });
1388
1388
  },
1389
+ async summary(query) {
1390
+ const { range, include_categories, include_deleted_services, top_n, ...filters } = query;
1391
+ return salesRequest(config, "POST", "/sales/summary", {
1392
+ filters,
1393
+ range,
1394
+ ...include_categories !== void 0 ? { include_categories } : {},
1395
+ ...include_deleted_services !== void 0 ? { include_deleted_services } : {},
1396
+ ...top_n !== void 0 ? { top_n } : {}
1397
+ });
1398
+ },
1389
1399
  async get(id) {
1390
1400
  return salesRequest(config, "GET", `/sales/${id}`);
1391
1401
  },
@@ -1681,7 +1691,7 @@ function GoogleAdsTracking(props) {
1681
1691
  var import_react4 = require("react");
1682
1692
 
1683
1693
  // package.json
1684
- var version = "0.9.1";
1694
+ var version = "0.10.0";
1685
1695
 
1686
1696
  // src/factory.tsx
1687
1697
  var import_jsx_runtime2 = require("react/jsx-runtime");