@playcademy/sdk 0.7.3-beta.8 → 0.7.4-beta.1
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.js +42 -10
- package/dist/internal.js +42 -10
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1692,34 +1692,47 @@ function createTimebackActivityTracker(client) {
|
|
|
1692
1692
|
activity.windowPausedAtStart = pausedAtReset;
|
|
1693
1693
|
startHeartbeatInterval(activity);
|
|
1694
1694
|
}
|
|
1695
|
-
function
|
|
1695
|
+
function markPausedHeartbeatTimedOut(activity) {
|
|
1696
|
+
activity.pausedHeartbeatTimeoutId = null;
|
|
1697
|
+
activity.pausedHeartbeatTimedOut = true;
|
|
1698
|
+
stopHeartbeatInterval(activity);
|
|
1699
|
+
}
|
|
1700
|
+
function armPausedHeartbeatTimeout(activity, startedAt = Date.now()) {
|
|
1696
1701
|
if (activity.pausedHeartbeatTimeoutMs === Infinity) {
|
|
1697
1702
|
return;
|
|
1698
1703
|
}
|
|
1699
1704
|
clearPausedHeartbeatTimeout(activity);
|
|
1705
|
+
const now = Date.now();
|
|
1706
|
+
const elapsedPauseMs = Math.max(0, now - Math.min(startedAt, now));
|
|
1707
|
+
const remainingTimeoutMs = activity.pausedHeartbeatTimeoutMs - elapsedPauseMs;
|
|
1708
|
+
if (remainingTimeoutMs <= 0) {
|
|
1709
|
+
markPausedHeartbeatTimedOut(activity);
|
|
1710
|
+
return;
|
|
1711
|
+
}
|
|
1700
1712
|
const trackedActivity = activity;
|
|
1701
1713
|
activity.pausedHeartbeatTimeoutId = setTimeout(() => {
|
|
1702
1714
|
if (currentActivity !== trackedActivity) {
|
|
1703
1715
|
return;
|
|
1704
1716
|
}
|
|
1705
|
-
trackedActivity
|
|
1706
|
-
|
|
1707
|
-
stopHeartbeatInterval(trackedActivity);
|
|
1708
|
-
}, activity.pausedHeartbeatTimeoutMs);
|
|
1717
|
+
markPausedHeartbeatTimedOut(trackedActivity);
|
|
1718
|
+
}, remainingTimeoutMs);
|
|
1709
1719
|
}
|
|
1710
|
-
function addPauseReason(reason) {
|
|
1720
|
+
function addPauseReason(reason, startedAt = Date.now()) {
|
|
1711
1721
|
if (!currentActivity) {
|
|
1712
1722
|
return;
|
|
1713
1723
|
}
|
|
1724
|
+
if (reason !== "inactivity") {
|
|
1725
|
+
applyOverdueInactivity();
|
|
1726
|
+
}
|
|
1714
1727
|
const wasPaused = currentActivity.pauseReasons.size > 0;
|
|
1715
1728
|
const wasAutoPaused = hasAutoPauseReason(currentActivity);
|
|
1716
1729
|
const alreadyHadReason = currentActivity.pauseReasons.has(reason);
|
|
1717
1730
|
currentActivity.pauseReasons.add(reason);
|
|
1718
1731
|
if (!wasPaused && currentActivity.pauseReasons.size > 0) {
|
|
1719
|
-
currentActivity.pauseStartTime = Date.now();
|
|
1732
|
+
currentActivity.pauseStartTime = Math.min(startedAt, Date.now());
|
|
1720
1733
|
}
|
|
1721
1734
|
if (isAutoPauseReason(reason) && !alreadyHadReason && !wasAutoPaused) {
|
|
1722
|
-
armPausedHeartbeatTimeout(currentActivity);
|
|
1735
|
+
armPausedHeartbeatTimeout(currentActivity, startedAt);
|
|
1723
1736
|
}
|
|
1724
1737
|
syncInactivityTracking();
|
|
1725
1738
|
}
|
|
@@ -1772,16 +1785,31 @@ function createTimebackActivityTracker(client) {
|
|
|
1772
1785
|
}
|
|
1773
1786
|
clearInactivityTimeout(activity);
|
|
1774
1787
|
const trackedActivity = activity;
|
|
1775
|
-
|
|
1788
|
+
const timerStartedAt = Date.now();
|
|
1789
|
+
const inactivityStartedAt = timerStartedAt + trackedActivity.remainingInactivityMs;
|
|
1790
|
+
activity.inactivityTimerStartedAt = timerStartedAt;
|
|
1776
1791
|
activity.inactivityTimeoutId = setTimeout(() => {
|
|
1777
1792
|
if (currentActivity !== trackedActivity) {
|
|
1778
1793
|
return;
|
|
1779
1794
|
}
|
|
1780
1795
|
trackedActivity.remainingInactivityMs = 0;
|
|
1781
1796
|
clearInactivityTimeout(trackedActivity);
|
|
1782
|
-
addPauseReason("inactivity");
|
|
1797
|
+
addPauseReason("inactivity", inactivityStartedAt);
|
|
1783
1798
|
}, trackedActivity.remainingInactivityMs);
|
|
1784
1799
|
}
|
|
1800
|
+
function applyOverdueInactivity(now = Date.now()) {
|
|
1801
|
+
const activity = currentActivity;
|
|
1802
|
+
if (!activity || activity.inactivityTimerStartedAt === null || activity.pauseReasons.has("inactivity")) {
|
|
1803
|
+
return;
|
|
1804
|
+
}
|
|
1805
|
+
const inactivityStartedAt = activity.inactivityTimerStartedAt + activity.remainingInactivityMs;
|
|
1806
|
+
if (now < inactivityStartedAt) {
|
|
1807
|
+
return;
|
|
1808
|
+
}
|
|
1809
|
+
activity.remainingInactivityMs = 0;
|
|
1810
|
+
clearInactivityTimeout(activity);
|
|
1811
|
+
addPauseReason("inactivity", inactivityStartedAt);
|
|
1812
|
+
}
|
|
1785
1813
|
function syncInactivityTracking() {
|
|
1786
1814
|
const activity = currentActivity;
|
|
1787
1815
|
if (!activity) {
|
|
@@ -1802,6 +1830,7 @@ function createTimebackActivityTracker(client) {
|
|
|
1802
1830
|
activity.remainingInactivityMs = activity.inactivityTimeoutMs;
|
|
1803
1831
|
}
|
|
1804
1832
|
function handleUserInteraction() {
|
|
1833
|
+
applyOverdueInactivity();
|
|
1805
1834
|
const activity = currentActivity;
|
|
1806
1835
|
if (!activity || activity.inactivityTimeoutMs === Infinity || isDocumentHidden()) {
|
|
1807
1836
|
return;
|
|
@@ -1840,6 +1869,7 @@ function createTimebackActivityTracker(client) {
|
|
|
1840
1869
|
};
|
|
1841
1870
|
}
|
|
1842
1871
|
async function flushHeartbeat(isFinal) {
|
|
1872
|
+
applyOverdueInactivity();
|
|
1843
1873
|
const activity = currentActivity;
|
|
1844
1874
|
if (!activity) {
|
|
1845
1875
|
return;
|
|
@@ -1860,6 +1890,7 @@ function createTimebackActivityTracker(client) {
|
|
|
1860
1890
|
});
|
|
1861
1891
|
}
|
|
1862
1892
|
function handlePageHide() {
|
|
1893
|
+
applyOverdueInactivity();
|
|
1863
1894
|
const activity = currentActivity;
|
|
1864
1895
|
if (!activity) {
|
|
1865
1896
|
return;
|
|
@@ -1999,6 +2030,7 @@ function createTimebackActivityTracker(client) {
|
|
|
1999
2030
|
throw new Error("No activity in progress. Call startActivity() before endActivity().");
|
|
2000
2031
|
}
|
|
2001
2032
|
const activity = currentActivity;
|
|
2033
|
+
applyOverdueInactivity();
|
|
2002
2034
|
cleanupListeners();
|
|
2003
2035
|
await flushHeartbeat(true);
|
|
2004
2036
|
if (activity.pauseStartTime !== null) {
|
package/dist/internal.js
CHANGED
|
@@ -1692,34 +1692,47 @@ function createTimebackActivityTracker(client) {
|
|
|
1692
1692
|
activity.windowPausedAtStart = pausedAtReset;
|
|
1693
1693
|
startHeartbeatInterval(activity);
|
|
1694
1694
|
}
|
|
1695
|
-
function
|
|
1695
|
+
function markPausedHeartbeatTimedOut(activity) {
|
|
1696
|
+
activity.pausedHeartbeatTimeoutId = null;
|
|
1697
|
+
activity.pausedHeartbeatTimedOut = true;
|
|
1698
|
+
stopHeartbeatInterval(activity);
|
|
1699
|
+
}
|
|
1700
|
+
function armPausedHeartbeatTimeout(activity, startedAt = Date.now()) {
|
|
1696
1701
|
if (activity.pausedHeartbeatTimeoutMs === Infinity) {
|
|
1697
1702
|
return;
|
|
1698
1703
|
}
|
|
1699
1704
|
clearPausedHeartbeatTimeout(activity);
|
|
1705
|
+
const now = Date.now();
|
|
1706
|
+
const elapsedPauseMs = Math.max(0, now - Math.min(startedAt, now));
|
|
1707
|
+
const remainingTimeoutMs = activity.pausedHeartbeatTimeoutMs - elapsedPauseMs;
|
|
1708
|
+
if (remainingTimeoutMs <= 0) {
|
|
1709
|
+
markPausedHeartbeatTimedOut(activity);
|
|
1710
|
+
return;
|
|
1711
|
+
}
|
|
1700
1712
|
const trackedActivity = activity;
|
|
1701
1713
|
activity.pausedHeartbeatTimeoutId = setTimeout(() => {
|
|
1702
1714
|
if (currentActivity !== trackedActivity) {
|
|
1703
1715
|
return;
|
|
1704
1716
|
}
|
|
1705
|
-
trackedActivity
|
|
1706
|
-
|
|
1707
|
-
stopHeartbeatInterval(trackedActivity);
|
|
1708
|
-
}, activity.pausedHeartbeatTimeoutMs);
|
|
1717
|
+
markPausedHeartbeatTimedOut(trackedActivity);
|
|
1718
|
+
}, remainingTimeoutMs);
|
|
1709
1719
|
}
|
|
1710
|
-
function addPauseReason(reason) {
|
|
1720
|
+
function addPauseReason(reason, startedAt = Date.now()) {
|
|
1711
1721
|
if (!currentActivity) {
|
|
1712
1722
|
return;
|
|
1713
1723
|
}
|
|
1724
|
+
if (reason !== "inactivity") {
|
|
1725
|
+
applyOverdueInactivity();
|
|
1726
|
+
}
|
|
1714
1727
|
const wasPaused = currentActivity.pauseReasons.size > 0;
|
|
1715
1728
|
const wasAutoPaused = hasAutoPauseReason(currentActivity);
|
|
1716
1729
|
const alreadyHadReason = currentActivity.pauseReasons.has(reason);
|
|
1717
1730
|
currentActivity.pauseReasons.add(reason);
|
|
1718
1731
|
if (!wasPaused && currentActivity.pauseReasons.size > 0) {
|
|
1719
|
-
currentActivity.pauseStartTime = Date.now();
|
|
1732
|
+
currentActivity.pauseStartTime = Math.min(startedAt, Date.now());
|
|
1720
1733
|
}
|
|
1721
1734
|
if (isAutoPauseReason(reason) && !alreadyHadReason && !wasAutoPaused) {
|
|
1722
|
-
armPausedHeartbeatTimeout(currentActivity);
|
|
1735
|
+
armPausedHeartbeatTimeout(currentActivity, startedAt);
|
|
1723
1736
|
}
|
|
1724
1737
|
syncInactivityTracking();
|
|
1725
1738
|
}
|
|
@@ -1772,16 +1785,31 @@ function createTimebackActivityTracker(client) {
|
|
|
1772
1785
|
}
|
|
1773
1786
|
clearInactivityTimeout(activity);
|
|
1774
1787
|
const trackedActivity = activity;
|
|
1775
|
-
|
|
1788
|
+
const timerStartedAt = Date.now();
|
|
1789
|
+
const inactivityStartedAt = timerStartedAt + trackedActivity.remainingInactivityMs;
|
|
1790
|
+
activity.inactivityTimerStartedAt = timerStartedAt;
|
|
1776
1791
|
activity.inactivityTimeoutId = setTimeout(() => {
|
|
1777
1792
|
if (currentActivity !== trackedActivity) {
|
|
1778
1793
|
return;
|
|
1779
1794
|
}
|
|
1780
1795
|
trackedActivity.remainingInactivityMs = 0;
|
|
1781
1796
|
clearInactivityTimeout(trackedActivity);
|
|
1782
|
-
addPauseReason("inactivity");
|
|
1797
|
+
addPauseReason("inactivity", inactivityStartedAt);
|
|
1783
1798
|
}, trackedActivity.remainingInactivityMs);
|
|
1784
1799
|
}
|
|
1800
|
+
function applyOverdueInactivity(now = Date.now()) {
|
|
1801
|
+
const activity = currentActivity;
|
|
1802
|
+
if (!activity || activity.inactivityTimerStartedAt === null || activity.pauseReasons.has("inactivity")) {
|
|
1803
|
+
return;
|
|
1804
|
+
}
|
|
1805
|
+
const inactivityStartedAt = activity.inactivityTimerStartedAt + activity.remainingInactivityMs;
|
|
1806
|
+
if (now < inactivityStartedAt) {
|
|
1807
|
+
return;
|
|
1808
|
+
}
|
|
1809
|
+
activity.remainingInactivityMs = 0;
|
|
1810
|
+
clearInactivityTimeout(activity);
|
|
1811
|
+
addPauseReason("inactivity", inactivityStartedAt);
|
|
1812
|
+
}
|
|
1785
1813
|
function syncInactivityTracking() {
|
|
1786
1814
|
const activity = currentActivity;
|
|
1787
1815
|
if (!activity) {
|
|
@@ -1802,6 +1830,7 @@ function createTimebackActivityTracker(client) {
|
|
|
1802
1830
|
activity.remainingInactivityMs = activity.inactivityTimeoutMs;
|
|
1803
1831
|
}
|
|
1804
1832
|
function handleUserInteraction() {
|
|
1833
|
+
applyOverdueInactivity();
|
|
1805
1834
|
const activity = currentActivity;
|
|
1806
1835
|
if (!activity || activity.inactivityTimeoutMs === Infinity || isDocumentHidden()) {
|
|
1807
1836
|
return;
|
|
@@ -1840,6 +1869,7 @@ function createTimebackActivityTracker(client) {
|
|
|
1840
1869
|
};
|
|
1841
1870
|
}
|
|
1842
1871
|
async function flushHeartbeat(isFinal) {
|
|
1872
|
+
applyOverdueInactivity();
|
|
1843
1873
|
const activity = currentActivity;
|
|
1844
1874
|
if (!activity) {
|
|
1845
1875
|
return;
|
|
@@ -1860,6 +1890,7 @@ function createTimebackActivityTracker(client) {
|
|
|
1860
1890
|
});
|
|
1861
1891
|
}
|
|
1862
1892
|
function handlePageHide() {
|
|
1893
|
+
applyOverdueInactivity();
|
|
1863
1894
|
const activity = currentActivity;
|
|
1864
1895
|
if (!activity) {
|
|
1865
1896
|
return;
|
|
@@ -1999,6 +2030,7 @@ function createTimebackActivityTracker(client) {
|
|
|
1999
2030
|
throw new Error("No activity in progress. Call startActivity() before endActivity().");
|
|
2000
2031
|
}
|
|
2001
2032
|
const activity = currentActivity;
|
|
2033
|
+
applyOverdueInactivity();
|
|
2002
2034
|
cleanupListeners();
|
|
2003
2035
|
await flushHeartbeat(true);
|
|
2004
2036
|
if (activity.pauseStartTime !== null) {
|