@scalemule/nextjs 0.0.23 → 0.0.25

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/client.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { j as StorageAdapter } from './index-jomBa89d.mjs';
1
+ import { j as StorageAdapter } from './index-CYS_FzSf.mjs';
2
2
 
3
3
  /**
4
4
  * ScaleMule API Client
package/dist/client.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { j as StorageAdapter } from './index-jomBa89d.js';
1
+ import { j as StorageAdapter } from './index-CYS_FzSf.js';
2
2
 
3
3
  /**
4
4
  * ScaleMule API Client
@@ -614,6 +614,13 @@ interface UseAnalyticsOptions {
614
614
  anonymousStorageKey?: string;
615
615
  /** Use v2 enhanced tracking (default: true) */
616
616
  useV2?: boolean;
617
+ /**
618
+ * Minimum milliseconds between duplicate events with the same event_name.
619
+ * Prevents inflated analytics from event bubbling, double-bound listeners,
620
+ * or rapid-fire IntersectionObserver callbacks.
621
+ * Set to 0 to disable dedup. Default: 300ms.
622
+ */
623
+ eventDedupMs?: number;
617
624
  }
618
625
  /**
619
626
  * Analytics hook return type
@@ -614,6 +614,13 @@ interface UseAnalyticsOptions {
614
614
  anonymousStorageKey?: string;
615
615
  /** Use v2 enhanced tracking (default: true) */
616
616
  useV2?: boolean;
617
+ /**
618
+ * Minimum milliseconds between duplicate events with the same event_name.
619
+ * Prevents inflated analytics from event bubbling, double-bound listeners,
620
+ * or rapid-fire IntersectionObserver callbacks.
621
+ * Set to 0 to disable dedup. Default: 300ms.
622
+ */
623
+ eventDedupMs?: number;
617
624
  }
618
625
  /**
619
626
  * Analytics hook return type
package/dist/index.d.mts CHANGED
@@ -2,8 +2,8 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
3
  import { ScaleMuleClient } from './client.mjs';
4
4
  export { ClientConfig, RequestOptions, createClient } from './client.mjs';
5
- import { S as ScaleMuleConfig, U as User, L as LoginResponse, A as ApiError, a as UseAuthReturn, b as UseBillingReturn, c as ListFilesParams, d as UseContentReturn, e as UseUserReturn, f as UseAnalyticsOptions, g as UseAnalyticsReturn } from './index-jomBa89d.mjs';
6
- export { a2 as AccountBalance, a9 as AnalyticsEvent, k as ApiResponse, af as BatchTrackRequest, a3 as BillingPayment, a5 as BillingPayout, a4 as BillingRefund, a7 as BillingTransaction, r as ChangeEmailRequest, C as ChangePasswordRequest, $ as ClientContext, a1 as ConnectedAccount, D as DeviceFingerprint, ac as DeviceInfo, ad as EnhancedAnalyticsEvent, F as ForgotPasswordRequest, x as LinkedAccount, T as ListFilesResponse, n as LoginDeviceInfo, l as LoginRequest, m as LoginResponseWithMFA, o as LoginRiskInfo, G as MFAChallengeResponse, M as MFAMethod, B as MFASMSSetupResponse, y as MFASetupRequest, H as MFAStatus, z as MFATOTPSetupResponse, E as MFAVerifyRequest, v as OAuthCallbackRequest, w as OAuthCallbackResponse, t as OAuthConfig, O as OAuthProvider, u as OAuthStartResponse, aa as PageViewData, a6 as PayoutSchedule, K as PhoneLoginRequest, I as PhoneSendCodeRequest, J as PhoneVerifyRequest, P as Profile, p as RefreshResponse, R as RegisterRequest, q as ResetPasswordRequest, h as ScaleMuleApiError, i as ScaleMuleEnvironment, s as Session, _ as SignedUploadCompleteRequest, Y as SignedUploadRequest, Z as SignedUploadResponse, X as SignedUploadUrl, j as StorageAdapter, N as StorageFile, ae as TrackEventResponse, a8 as TransactionSummary, ab as UTMParams, a0 as UpdateProfileRequest, Q as UploadOptions, W as UploadResponse, V as VerifyEmailRequest } from './index-jomBa89d.mjs';
5
+ import { S as ScaleMuleConfig, U as User, L as LoginResponse, A as ApiError, a as UseAuthReturn, b as UseBillingReturn, c as ListFilesParams, d as UseContentReturn, e as UseUserReturn, f as UseAnalyticsOptions, g as UseAnalyticsReturn } from './index-CYS_FzSf.mjs';
6
+ export { a2 as AccountBalance, a9 as AnalyticsEvent, k as ApiResponse, af as BatchTrackRequest, a3 as BillingPayment, a5 as BillingPayout, a4 as BillingRefund, a7 as BillingTransaction, r as ChangeEmailRequest, C as ChangePasswordRequest, $ as ClientContext, a1 as ConnectedAccount, D as DeviceFingerprint, ac as DeviceInfo, ad as EnhancedAnalyticsEvent, F as ForgotPasswordRequest, x as LinkedAccount, T as ListFilesResponse, n as LoginDeviceInfo, l as LoginRequest, m as LoginResponseWithMFA, o as LoginRiskInfo, G as MFAChallengeResponse, M as MFAMethod, B as MFASMSSetupResponse, y as MFASetupRequest, H as MFAStatus, z as MFATOTPSetupResponse, E as MFAVerifyRequest, v as OAuthCallbackRequest, w as OAuthCallbackResponse, t as OAuthConfig, O as OAuthProvider, u as OAuthStartResponse, aa as PageViewData, a6 as PayoutSchedule, K as PhoneLoginRequest, I as PhoneSendCodeRequest, J as PhoneVerifyRequest, P as Profile, p as RefreshResponse, R as RegisterRequest, q as ResetPasswordRequest, h as ScaleMuleApiError, i as ScaleMuleEnvironment, s as Session, _ as SignedUploadCompleteRequest, Y as SignedUploadRequest, Z as SignedUploadResponse, X as SignedUploadUrl, j as StorageAdapter, N as StorageFile, ae as TrackEventResponse, a8 as TransactionSummary, ab as UTMParams, a0 as UpdateProfileRequest, Q as UploadOptions, W as UploadResponse, V as VerifyEmailRequest } from './index-CYS_FzSf.mjs';
7
7
 
8
8
  interface ScaleMuleContextValue {
9
9
  /** The API client instance */
package/dist/index.d.ts CHANGED
@@ -2,8 +2,8 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
3
  import { ScaleMuleClient } from './client.js';
4
4
  export { ClientConfig, RequestOptions, createClient } from './client.js';
5
- import { S as ScaleMuleConfig, U as User, L as LoginResponse, A as ApiError, a as UseAuthReturn, b as UseBillingReturn, c as ListFilesParams, d as UseContentReturn, e as UseUserReturn, f as UseAnalyticsOptions, g as UseAnalyticsReturn } from './index-jomBa89d.js';
6
- export { a2 as AccountBalance, a9 as AnalyticsEvent, k as ApiResponse, af as BatchTrackRequest, a3 as BillingPayment, a5 as BillingPayout, a4 as BillingRefund, a7 as BillingTransaction, r as ChangeEmailRequest, C as ChangePasswordRequest, $ as ClientContext, a1 as ConnectedAccount, D as DeviceFingerprint, ac as DeviceInfo, ad as EnhancedAnalyticsEvent, F as ForgotPasswordRequest, x as LinkedAccount, T as ListFilesResponse, n as LoginDeviceInfo, l as LoginRequest, m as LoginResponseWithMFA, o as LoginRiskInfo, G as MFAChallengeResponse, M as MFAMethod, B as MFASMSSetupResponse, y as MFASetupRequest, H as MFAStatus, z as MFATOTPSetupResponse, E as MFAVerifyRequest, v as OAuthCallbackRequest, w as OAuthCallbackResponse, t as OAuthConfig, O as OAuthProvider, u as OAuthStartResponse, aa as PageViewData, a6 as PayoutSchedule, K as PhoneLoginRequest, I as PhoneSendCodeRequest, J as PhoneVerifyRequest, P as Profile, p as RefreshResponse, R as RegisterRequest, q as ResetPasswordRequest, h as ScaleMuleApiError, i as ScaleMuleEnvironment, s as Session, _ as SignedUploadCompleteRequest, Y as SignedUploadRequest, Z as SignedUploadResponse, X as SignedUploadUrl, j as StorageAdapter, N as StorageFile, ae as TrackEventResponse, a8 as TransactionSummary, ab as UTMParams, a0 as UpdateProfileRequest, Q as UploadOptions, W as UploadResponse, V as VerifyEmailRequest } from './index-jomBa89d.js';
5
+ import { S as ScaleMuleConfig, U as User, L as LoginResponse, A as ApiError, a as UseAuthReturn, b as UseBillingReturn, c as ListFilesParams, d as UseContentReturn, e as UseUserReturn, f as UseAnalyticsOptions, g as UseAnalyticsReturn } from './index-CYS_FzSf.js';
6
+ export { a2 as AccountBalance, a9 as AnalyticsEvent, k as ApiResponse, af as BatchTrackRequest, a3 as BillingPayment, a5 as BillingPayout, a4 as BillingRefund, a7 as BillingTransaction, r as ChangeEmailRequest, C as ChangePasswordRequest, $ as ClientContext, a1 as ConnectedAccount, D as DeviceFingerprint, ac as DeviceInfo, ad as EnhancedAnalyticsEvent, F as ForgotPasswordRequest, x as LinkedAccount, T as ListFilesResponse, n as LoginDeviceInfo, l as LoginRequest, m as LoginResponseWithMFA, o as LoginRiskInfo, G as MFAChallengeResponse, M as MFAMethod, B as MFASMSSetupResponse, y as MFASetupRequest, H as MFAStatus, z as MFATOTPSetupResponse, E as MFAVerifyRequest, v as OAuthCallbackRequest, w as OAuthCallbackResponse, t as OAuthConfig, O as OAuthProvider, u as OAuthStartResponse, aa as PageViewData, a6 as PayoutSchedule, K as PhoneLoginRequest, I as PhoneSendCodeRequest, J as PhoneVerifyRequest, P as Profile, p as RefreshResponse, R as RegisterRequest, q as ResetPasswordRequest, h as ScaleMuleApiError, i as ScaleMuleEnvironment, s as Session, _ as SignedUploadCompleteRequest, Y as SignedUploadRequest, Z as SignedUploadResponse, X as SignedUploadUrl, j as StorageAdapter, N as StorageFile, ae as TrackEventResponse, a8 as TransactionSummary, ab as UTMParams, a0 as UpdateProfileRequest, Q as UploadOptions, W as UploadResponse, V as VerifyEmailRequest } from './index-CYS_FzSf.js';
7
7
 
8
8
  interface ScaleMuleContextValue {
9
9
  /** The API client instance */
package/dist/index.js CHANGED
@@ -2412,6 +2412,44 @@ function useRealtime(options = {}) {
2412
2412
  [status, error, connect, disconnect, subscribe, send, lastMessage]
2413
2413
  );
2414
2414
  }
2415
+
2416
+ // src/hooks/event-dedup.ts
2417
+ var DEFAULT_EVENT_DEDUP_MS = 300;
2418
+ var DEDUP_MAP_MAX = 200;
2419
+ var _eventLastFired = typeof window !== "undefined" ? /* @__PURE__ */ new Map() : null;
2420
+ function dedupKey(eventName, properties) {
2421
+ if (!properties) return eventName;
2422
+ const keys = Object.keys(properties);
2423
+ if (keys.length === 0) return eventName;
2424
+ let parts = eventName;
2425
+ for (let i = 0, len = keys.length; i < len; i++) {
2426
+ const k = keys[i];
2427
+ const v = properties[k];
2428
+ if (v === null || v === void 0) {
2429
+ parts += `|${k}=`;
2430
+ } else if (typeof v === "object") {
2431
+ parts += `|${k}=[obj]`;
2432
+ } else {
2433
+ parts += `|${k}=${String(v)}`;
2434
+ }
2435
+ }
2436
+ return parts;
2437
+ }
2438
+ function shouldDedup(eventName, cooldownMs, properties) {
2439
+ if (!_eventLastFired || cooldownMs <= 0) return false;
2440
+ const now = Date.now();
2441
+ const key = dedupKey(eventName, properties);
2442
+ const last = _eventLastFired.get(key);
2443
+ if (last !== void 0 && now - last < cooldownMs) return true;
2444
+ if (_eventLastFired.size >= DEDUP_MAP_MAX) {
2445
+ const oldest = _eventLastFired.keys().next().value;
2446
+ if (oldest !== void 0) _eventLastFired.delete(oldest);
2447
+ }
2448
+ _eventLastFired.set(key, now);
2449
+ return false;
2450
+ }
2451
+
2452
+ // src/hooks/useAnalytics.ts
2415
2453
  function generateUUID() {
2416
2454
  return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
2417
2455
  const r = Math.random() * 16 | 0;
@@ -2560,7 +2598,8 @@ function useAnalytics(options = {}) {
2560
2598
  autoGenerateSessionId = true,
2561
2599
  sessionStorageKey = "sm_session_id",
2562
2600
  anonymousStorageKey = "sm_anonymous_id",
2563
- useV2 = true
2601
+ useV2 = true,
2602
+ eventDedupMs = DEFAULT_EVENT_DEDUP_MS
2564
2603
  } = options;
2565
2604
  const shouldAutoCaptureUtmParams = autoCaptureUtmParams ?? autoCapturUtmParams ?? true;
2566
2605
  const { client, user, analyticsProxyUrl, publishableKey, gatewayUrl } = useScaleMule();
@@ -2706,6 +2745,9 @@ function useAnalytics(options = {}) {
2706
2745
  sendEventRef.current = sendEvent;
2707
2746
  const trackEvent = react.useCallback(
2708
2747
  async (event) => {
2748
+ if (shouldDedup(event.event_name, eventDedupMs, event.properties)) {
2749
+ return { tracked: 0, session_id: sessionIdRef.current || void 0 };
2750
+ }
2709
2751
  setError(null);
2710
2752
  setLoading(true);
2711
2753
  try {
@@ -2725,7 +2767,7 @@ function useAnalytics(options = {}) {
2725
2767
  }
2726
2768
  },
2727
2769
  // Note: idsReady removed - we use ref to keep callback stable
2728
- [sendEvent]
2770
+ [sendEvent, eventDedupMs]
2729
2771
  );
2730
2772
  const trackPageView = react.useCallback(
2731
2773
  async (data) => {
package/dist/index.mjs CHANGED
@@ -2410,6 +2410,44 @@ function useRealtime(options = {}) {
2410
2410
  [status, error, connect, disconnect, subscribe, send, lastMessage]
2411
2411
  );
2412
2412
  }
2413
+
2414
+ // src/hooks/event-dedup.ts
2415
+ var DEFAULT_EVENT_DEDUP_MS = 300;
2416
+ var DEDUP_MAP_MAX = 200;
2417
+ var _eventLastFired = typeof window !== "undefined" ? /* @__PURE__ */ new Map() : null;
2418
+ function dedupKey(eventName, properties) {
2419
+ if (!properties) return eventName;
2420
+ const keys = Object.keys(properties);
2421
+ if (keys.length === 0) return eventName;
2422
+ let parts = eventName;
2423
+ for (let i = 0, len = keys.length; i < len; i++) {
2424
+ const k = keys[i];
2425
+ const v = properties[k];
2426
+ if (v === null || v === void 0) {
2427
+ parts += `|${k}=`;
2428
+ } else if (typeof v === "object") {
2429
+ parts += `|${k}=[obj]`;
2430
+ } else {
2431
+ parts += `|${k}=${String(v)}`;
2432
+ }
2433
+ }
2434
+ return parts;
2435
+ }
2436
+ function shouldDedup(eventName, cooldownMs, properties) {
2437
+ if (!_eventLastFired || cooldownMs <= 0) return false;
2438
+ const now = Date.now();
2439
+ const key = dedupKey(eventName, properties);
2440
+ const last = _eventLastFired.get(key);
2441
+ if (last !== void 0 && now - last < cooldownMs) return true;
2442
+ if (_eventLastFired.size >= DEDUP_MAP_MAX) {
2443
+ const oldest = _eventLastFired.keys().next().value;
2444
+ if (oldest !== void 0) _eventLastFired.delete(oldest);
2445
+ }
2446
+ _eventLastFired.set(key, now);
2447
+ return false;
2448
+ }
2449
+
2450
+ // src/hooks/useAnalytics.ts
2413
2451
  function generateUUID() {
2414
2452
  return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
2415
2453
  const r = Math.random() * 16 | 0;
@@ -2558,7 +2596,8 @@ function useAnalytics(options = {}) {
2558
2596
  autoGenerateSessionId = true,
2559
2597
  sessionStorageKey = "sm_session_id",
2560
2598
  anonymousStorageKey = "sm_anonymous_id",
2561
- useV2 = true
2599
+ useV2 = true,
2600
+ eventDedupMs = DEFAULT_EVENT_DEDUP_MS
2562
2601
  } = options;
2563
2602
  const shouldAutoCaptureUtmParams = autoCaptureUtmParams ?? autoCapturUtmParams ?? true;
2564
2603
  const { client, user, analyticsProxyUrl, publishableKey, gatewayUrl } = useScaleMule();
@@ -2704,6 +2743,9 @@ function useAnalytics(options = {}) {
2704
2743
  sendEventRef.current = sendEvent;
2705
2744
  const trackEvent = useCallback(
2706
2745
  async (event) => {
2746
+ if (shouldDedup(event.event_name, eventDedupMs, event.properties)) {
2747
+ return { tracked: 0, session_id: sessionIdRef.current || void 0 };
2748
+ }
2707
2749
  setError(null);
2708
2750
  setLoading(true);
2709
2751
  try {
@@ -2723,7 +2765,7 @@ function useAnalytics(options = {}) {
2723
2765
  }
2724
2766
  },
2725
2767
  // Note: idsReady removed - we use ref to keep callback stable
2726
- [sendEvent]
2768
+ [sendEvent, eventDedupMs]
2727
2769
  );
2728
2770
  const trackPageView = useCallback(
2729
2771
  async (data) => {
@@ -1,6 +1,6 @@
1
- import { S as ServerConfig } from '../webhook-handler-aT2C5z2y.mjs';
2
- export { a as ScaleMuleServer, e as VideoFailedEvent, V as VideoReadyEvent, g as VideoTranscodedEvent, f as VideoUploadedEvent, W as WebhookEvent, h as WebhookRoutesConfig, c as createServerClient, i as createWebhookHandler, d as createWebhookRoutes, p as parseWebhookEvent, b as registerVideoWebhook, r as resolveGatewayUrl, v as verifyWebhookSignature } from '../webhook-handler-aT2C5z2y.mjs';
3
- import { $ as ClientContext, A as ApiError } from '../index-jomBa89d.mjs';
1
+ import { S as ServerConfig } from '../webhook-handler-BlklRG--.mjs';
2
+ export { a as ScaleMuleServer, e as VideoFailedEvent, V as VideoReadyEvent, g as VideoTranscodedEvent, f as VideoUploadedEvent, W as WebhookEvent, h as WebhookRoutesConfig, c as createServerClient, i as createWebhookHandler, d as createWebhookRoutes, p as parseWebhookEvent, b as registerVideoWebhook, r as resolveGatewayUrl, v as verifyWebhookSignature } from '../webhook-handler-BlklRG--.mjs';
3
+ import { $ as ClientContext, A as ApiError } from '../index-CYS_FzSf.mjs';
4
4
  import { NextRequest, NextResponse } from 'next/server';
5
5
 
6
6
  /**
@@ -1,6 +1,6 @@
1
- import { S as ServerConfig } from '../webhook-handler-Dok4jfub.js';
2
- export { a as ScaleMuleServer, e as VideoFailedEvent, V as VideoReadyEvent, g as VideoTranscodedEvent, f as VideoUploadedEvent, W as WebhookEvent, h as WebhookRoutesConfig, c as createServerClient, i as createWebhookHandler, d as createWebhookRoutes, p as parseWebhookEvent, b as registerVideoWebhook, r as resolveGatewayUrl, v as verifyWebhookSignature } from '../webhook-handler-Dok4jfub.js';
3
- import { $ as ClientContext, A as ApiError } from '../index-jomBa89d.js';
1
+ import { S as ServerConfig } from '../webhook-handler-DHCE2Utl.js';
2
+ export { a as ScaleMuleServer, e as VideoFailedEvent, V as VideoReadyEvent, g as VideoTranscodedEvent, f as VideoUploadedEvent, W as WebhookEvent, h as WebhookRoutesConfig, c as createServerClient, i as createWebhookHandler, d as createWebhookRoutes, p as parseWebhookEvent, b as registerVideoWebhook, r as resolveGatewayUrl, v as verifyWebhookSignature } from '../webhook-handler-DHCE2Utl.js';
3
+ import { $ as ClientContext, A as ApiError } from '../index-CYS_FzSf.js';
4
4
  import { NextRequest, NextResponse } from 'next/server';
5
5
 
6
6
  /**
@@ -1,2 +1,2 @@
1
- export { i as createWebhookHandler } from '../webhook-handler-aT2C5z2y.mjs';
2
- import '../index-jomBa89d.mjs';
1
+ export { i as createWebhookHandler } from '../webhook-handler-BlklRG--.mjs';
2
+ import '../index-CYS_FzSf.mjs';
@@ -1,2 +1,2 @@
1
- export { i as createWebhookHandler } from '../webhook-handler-Dok4jfub.js';
2
- import '../index-jomBa89d.js';
1
+ export { i as createWebhookHandler } from '../webhook-handler-DHCE2Utl.js';
2
+ import '../index-CYS_FzSf.js';
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { U as User, N as StorageFile, A as ApiError } from './index-jomBa89d.mjs';
3
+ import { U as User, N as StorageFile, A as ApiError } from './index-CYS_FzSf.mjs';
4
4
 
5
5
  interface MockUserOptions {
6
6
  id?: string;
package/dist/testing.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { ReactNode } from 'react';
3
- import { U as User, N as StorageFile, A as ApiError } from './index-jomBa89d.js';
3
+ import { U as User, N as StorageFile, A as ApiError } from './index-CYS_FzSf.js';
4
4
 
5
5
  interface MockUserOptions {
6
6
  id?: string;
@@ -1,4 +1,4 @@
1
- import { R as RegisterRequest, $ as ClientContext, U as User, l as LoginRequest, L as LoginResponse, c as ListFilesParams, T as ListFilesResponse, N as StorageFile, W as UploadResponse } from './index-jomBa89d.mjs';
1
+ import { R as RegisterRequest, $ as ClientContext, U as User, l as LoginRequest, L as LoginResponse, c as ListFilesParams, T as ListFilesResponse, N as StorageFile, W as UploadResponse } from './index-CYS_FzSf.mjs';
2
2
 
3
3
  /**
4
4
  * Server-Side ScaleMule Client
@@ -1,4 +1,4 @@
1
- import { R as RegisterRequest, $ as ClientContext, U as User, l as LoginRequest, L as LoginResponse, c as ListFilesParams, T as ListFilesResponse, N as StorageFile, W as UploadResponse } from './index-jomBa89d.js';
1
+ import { R as RegisterRequest, $ as ClientContext, U as User, l as LoginRequest, L as LoginResponse, c as ListFilesParams, T as ListFilesResponse, N as StorageFile, W as UploadResponse } from './index-CYS_FzSf.js';
2
2
 
3
3
  /**
4
4
  * Server-Side ScaleMule Client
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scalemule/nextjs",
3
- "version": "0.0.23",
3
+ "version": "0.0.25",
4
4
  "description": "ScaleMule SDK for Next.js applications - authentication, storage, and user management",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",