@magicfeedback/popup-sdk 1.12.0 → 1.13.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.d.mts +14 -1
- package/dist/index.d.ts +14 -1
- package/dist/index.js +37 -3
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +37 -3
- package/dist/index.mjs.map +1 -1
- package/dist/react-native.d.mts +14 -1
- package/dist/react-native.d.ts +14 -1
- package/dist/react-native.js +37 -3
- package/dist/react-native.js.map +1 -1
- package/dist/react-native.mjs +37 -3
- package/dist/react-native.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -929,7 +929,20 @@ declare class DeepdotsPopups {
|
|
|
929
929
|
final?: boolean;
|
|
930
930
|
sessionEnd?: boolean;
|
|
931
931
|
}): void;
|
|
932
|
-
/**
|
|
932
|
+
/**
|
|
933
|
+
* Emite un evento `user_engagement` con el tiempo activo acumulado (#8) y la pantalla en
|
|
934
|
+
* curso: `screen` y `path` (los mismos que llevará su `page_view`) y `screen_seconds` (lo
|
|
935
|
+
* que lleva en ella, medido como el `duration_seconds` del `page_view`).
|
|
936
|
+
*
|
|
937
|
+
* El `page_view` sale al SALIR de la pantalla; si el cierre no llega nunca (pestaña dormida
|
|
938
|
+
* y descartada al volver, pestaña o app matada en segundo plano), la última pantalla de la
|
|
939
|
+
* sesión se perdía y una visita de una sola pantalla se quedaba sin ninguna. Con la pantalla
|
|
940
|
+
* en el latido y en el engagement de ocultar la pestaña, el backend la reconstruye.
|
|
941
|
+
*
|
|
942
|
+
* En los cierres (`closeSession`, `suspendSession`) el observador ya emitió el `page_view`
|
|
943
|
+
* y no tiene pantalla, así que ese engagement va sin `screen`: nunca se cuenta dos veces.
|
|
944
|
+
* Tampoco se emite un `page_view` aquí, por lo mismo.
|
|
945
|
+
*/
|
|
933
946
|
private flushEngagement;
|
|
934
947
|
/** Tick del flush periódico: latido de engagement si toca, y envío de lo acumulado. */
|
|
935
948
|
private onAnalyticsFlushTick;
|
package/dist/index.d.ts
CHANGED
|
@@ -929,7 +929,20 @@ declare class DeepdotsPopups {
|
|
|
929
929
|
final?: boolean;
|
|
930
930
|
sessionEnd?: boolean;
|
|
931
931
|
}): void;
|
|
932
|
-
/**
|
|
932
|
+
/**
|
|
933
|
+
* Emite un evento `user_engagement` con el tiempo activo acumulado (#8) y la pantalla en
|
|
934
|
+
* curso: `screen` y `path` (los mismos que llevará su `page_view`) y `screen_seconds` (lo
|
|
935
|
+
* que lleva en ella, medido como el `duration_seconds` del `page_view`).
|
|
936
|
+
*
|
|
937
|
+
* El `page_view` sale al SALIR de la pantalla; si el cierre no llega nunca (pestaña dormida
|
|
938
|
+
* y descartada al volver, pestaña o app matada en segundo plano), la última pantalla de la
|
|
939
|
+
* sesión se perdía y una visita de una sola pantalla se quedaba sin ninguna. Con la pantalla
|
|
940
|
+
* en el latido y en el engagement de ocultar la pestaña, el backend la reconstruye.
|
|
941
|
+
*
|
|
942
|
+
* En los cierres (`closeSession`, `suspendSession`) el observador ya emitió el `page_view`
|
|
943
|
+
* y no tiene pantalla, así que ese engagement va sin `screen`: nunca se cuenta dos veces.
|
|
944
|
+
* Tampoco se emite un `page_view` aquí, por lo mismo.
|
|
945
|
+
*/
|
|
933
946
|
private flushEngagement;
|
|
934
947
|
/** Tick del flush periódico: latido de engagement si toca, y envío de lo acumulado. */
|
|
935
948
|
private onAnalyticsFlushTick;
|
package/dist/index.js
CHANGED
|
@@ -7739,6 +7739,23 @@ var NavigationObserver = class {
|
|
|
7739
7739
|
if (!this.installed || this.currentScreen != null || typeof window === "undefined") return;
|
|
7740
7740
|
this.begin(window.location.href);
|
|
7741
7741
|
}
|
|
7742
|
+
/**
|
|
7743
|
+
* La pantalla en curso, sin cerrarla ni emitir nada; null si no hay (antes de `begin`, tras
|
|
7744
|
+
* `stop`/`discard`). Para que el `user_engagement` lleve la pantalla: si el cierre de la
|
|
7745
|
+
* sesión no llega nunca (pestaña dormida y descartada, app matada), la última pantalla no
|
|
7746
|
+
* tiene `page_view` y solo queda esto.
|
|
7747
|
+
*/
|
|
7748
|
+
current() {
|
|
7749
|
+
if (this.currentScreen == null) return null;
|
|
7750
|
+
return {
|
|
7751
|
+
screen: this.currentScreen,
|
|
7752
|
+
path: this.currentPath ?? this.currentScreen,
|
|
7753
|
+
seconds: this.secondsSinceEntry(this.now())
|
|
7754
|
+
};
|
|
7755
|
+
}
|
|
7756
|
+
secondsSinceEntry(at) {
|
|
7757
|
+
return Math.max(0, Math.round((at - this.entryAt) / 1e3));
|
|
7758
|
+
}
|
|
7742
7759
|
closeCurrent() {
|
|
7743
7760
|
if (this.currentScreen == null) return;
|
|
7744
7761
|
const exit = this.now();
|
|
@@ -7747,7 +7764,7 @@ var NavigationObserver = class {
|
|
|
7747
7764
|
path: this.currentPath ?? this.currentScreen,
|
|
7748
7765
|
entry: this.entryAt,
|
|
7749
7766
|
exit,
|
|
7750
|
-
durationSeconds:
|
|
7767
|
+
durationSeconds: this.secondsSinceEntry(exit)
|
|
7751
7768
|
};
|
|
7752
7769
|
this.listeners.forEach((l) => {
|
|
7753
7770
|
try {
|
|
@@ -8768,12 +8785,29 @@ var DeepdotsPopups = class {
|
|
|
8768
8785
|
if (!this.tracking?.isTrackingEnabled()) return;
|
|
8769
8786
|
this.analytics?.flush(this.analyticsIdentity(), options);
|
|
8770
8787
|
}
|
|
8771
|
-
/**
|
|
8788
|
+
/**
|
|
8789
|
+
* Emite un evento `user_engagement` con el tiempo activo acumulado (#8) y la pantalla en
|
|
8790
|
+
* curso: `screen` y `path` (los mismos que llevará su `page_view`) y `screen_seconds` (lo
|
|
8791
|
+
* que lleva en ella, medido como el `duration_seconds` del `page_view`).
|
|
8792
|
+
*
|
|
8793
|
+
* El `page_view` sale al SALIR de la pantalla; si el cierre no llega nunca (pestaña dormida
|
|
8794
|
+
* y descartada al volver, pestaña o app matada en segundo plano), la última pantalla de la
|
|
8795
|
+
* sesión se perdía y una visita de una sola pantalla se quedaba sin ninguna. Con la pantalla
|
|
8796
|
+
* en el latido y en el engagement de ocultar la pestaña, el backend la reconstruye.
|
|
8797
|
+
*
|
|
8798
|
+
* En los cierres (`closeSession`, `suspendSession`) el observador ya emitió el `page_view`
|
|
8799
|
+
* y no tiene pantalla, así que ese engagement va sin `screen`: nunca se cuenta dos veces.
|
|
8800
|
+
* Tampoco se emite un `page_view` aquí, por lo mismo.
|
|
8801
|
+
*/
|
|
8772
8802
|
flushEngagement() {
|
|
8773
8803
|
if (!this.tracking?.isTrackingEnabled()) return;
|
|
8774
8804
|
const ms = this.engagement?.consume() ?? 0;
|
|
8775
8805
|
if (ms > 0) {
|
|
8776
|
-
this.
|
|
8806
|
+
const current = this.navObserver?.current();
|
|
8807
|
+
this.track("deepdots_user_engagement", {
|
|
8808
|
+
engagement_time_msec: ms,
|
|
8809
|
+
...current ? { screen: current.screen, path: current.path, screen_seconds: current.seconds } : {}
|
|
8810
|
+
});
|
|
8777
8811
|
this.lastEngagementAt = Date.now();
|
|
8778
8812
|
}
|
|
8779
8813
|
}
|