@goliapkg/sentori-react-native 0.9.11 → 1.0.0-rc.2
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/android/src/main/java/com/sentori/SentoriForegroundActivity.kt +145 -0
- package/android/src/main/java/com/sentori/SentoriModule.kt +13 -0
- package/android/src/main/java/com/sentori/SentoriReplayCapture.kt +41 -18
- package/android/src/main/java/com/sentori/SentoriScreenshotCapture.kt +72 -36
- package/ios/SentoriModule.swift +15 -0
- package/ios/SentoriReplayCapture.swift +103 -9
- package/ios/SentoriScreenshotCapture.swift +69 -3
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.bak +64 -0
- package/lib/index.js.map +1 -1
- package/lib/native.d.ts +57 -0
- package/lib/native.d.ts.map +1 -1
- package/lib/native.js +99 -0
- package/lib/native.js.map +1 -1
- package/lib/replay.d.ts.map +1 -1
- package/lib/replay.js +75 -8
- package/lib/replay.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +3 -0
- package/src/native.ts +136 -0
- package/src/replay.ts +75 -7
|
@@ -82,10 +82,15 @@ import UIKit
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
private static func captureWithMaskSync(maskedIds: [String]) -> [String: String]? {
|
|
85
|
-
guard let window =
|
|
85
|
+
guard let window = keyWindowDiag().window else {
|
|
86
|
+
lastDiagPath = "window.null"
|
|
87
|
+
return nil
|
|
88
|
+
}
|
|
86
89
|
guard let jpeg = renderJpegBase64(window: window, maskedIds: Set(maskedIds)) else {
|
|
90
|
+
lastDiagPath = "render.failed"
|
|
87
91
|
return nil
|
|
88
92
|
}
|
|
93
|
+
lastDiagPath = "ok"
|
|
89
94
|
return [
|
|
90
95
|
"base64": jpeg,
|
|
91
96
|
"mediaType": "image/jpeg",
|
|
@@ -94,8 +99,28 @@ import UIKit
|
|
|
94
99
|
|
|
95
100
|
// MARK: - Internals
|
|
96
101
|
|
|
102
|
+
// v1.0.0-rc.2 — diagnostic readout mirror of the replay-capture
|
|
103
|
+
// probe. The JS side calls `probeScreenshot()` to ship raw state
|
|
104
|
+
// back when screenshot returns null.
|
|
105
|
+
private static var lastDiagPath: String = "none(not-yet-called)"
|
|
106
|
+
|
|
107
|
+
@objc public static func probe() -> [String: Any] {
|
|
108
|
+
let (win, path) = keyWindowDiag()
|
|
109
|
+
return [
|
|
110
|
+
"lastPath": lastDiagPath,
|
|
111
|
+
"resolvedPath": path,
|
|
112
|
+
"windowFound": win != nil,
|
|
113
|
+
"rootViewControllerFound": win?.rootViewController != nil,
|
|
114
|
+
"boundsW": win.map { Double($0.bounds.width) } ?? 0.0,
|
|
115
|
+
"boundsH": win.map { Double($0.bounds.height) } ?? 0.0,
|
|
116
|
+
]
|
|
117
|
+
}
|
|
118
|
+
|
|
97
119
|
private static func captureSync() -> [String: Any]? {
|
|
98
|
-
guard let window =
|
|
120
|
+
guard let window = keyWindowDiag().window else {
|
|
121
|
+
lastDiagPath = "window.null"
|
|
122
|
+
return nil
|
|
123
|
+
}
|
|
99
124
|
var out: [String: Any] = [:]
|
|
100
125
|
if let jpeg = renderJpegBase64(window: window) {
|
|
101
126
|
out["screenshot"] = [
|
|
@@ -104,7 +129,48 @@ import UIKit
|
|
|
104
129
|
]
|
|
105
130
|
}
|
|
106
131
|
out["viewTree"] = walkTree(root: window)
|
|
107
|
-
|
|
132
|
+
if out.isEmpty {
|
|
133
|
+
lastDiagPath = "empty"
|
|
134
|
+
return nil
|
|
135
|
+
}
|
|
136
|
+
lastDiagPath = "ok"
|
|
137
|
+
return out
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/// keyWindow with the same 4-tier resolution as the replay capture,
|
|
141
|
+
/// plus the diagnostic path tag for the probe. The original
|
|
142
|
+
/// single-pass `keyWindow()` is kept for source-compat callers but
|
|
143
|
+
/// new paths funnel through this so screenshot + replay agree on
|
|
144
|
+
/// which window they are pointing at.
|
|
145
|
+
private static func keyWindowDiag() -> (window: UIWindow?, path: String) {
|
|
146
|
+
if #available(iOS 13.0, *) {
|
|
147
|
+
let scenes = Array(UIApplication.shared.connectedScenes)
|
|
148
|
+
for scene in scenes where scene.activationState == .foregroundActive {
|
|
149
|
+
if let ws = scene as? UIWindowScene,
|
|
150
|
+
let key = ws.windows.first(where: { $0.isKeyWindow }) {
|
|
151
|
+
return (key, "scene.fg.key")
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
for scene in scenes where scene.activationState == .foregroundActive {
|
|
155
|
+
if let ws = scene as? UIWindowScene, let win = ws.windows.first {
|
|
156
|
+
return (win, "scene.fg.first")
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
for scene in scenes where scene.activationState == .foregroundInactive {
|
|
160
|
+
if let ws = scene as? UIWindowScene, let win = ws.windows.first {
|
|
161
|
+
return (win, "scene.fgi.first")
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
for scene in scenes {
|
|
165
|
+
if let ws = scene as? UIWindowScene, let win = ws.windows.first {
|
|
166
|
+
return (win, "scene.any.first")
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
if let leg = UIApplication.shared.windows.first {
|
|
171
|
+
return (leg, "legacy.first")
|
|
172
|
+
}
|
|
173
|
+
return (nil, "none")
|
|
108
174
|
}
|
|
109
175
|
|
|
110
176
|
private static func keyWindow() -> UIWindow? {
|
package/lib/index.d.ts
CHANGED
|
@@ -61,7 +61,8 @@ export { getColdStartMs, markTimeToFullDisplay, type TimeToFullDisplayHandle, }
|
|
|
61
61
|
export { MomentHandle, type MomentProperties, startMoment } from '@goliapkg/sentori-core';
|
|
62
62
|
export { bindState, recordState, type StateSnapshot, unbindState, } from './state-snapshots';
|
|
63
63
|
export { RageTapCapture } from './rage-tap';
|
|
64
|
-
export { startAnrWatchdog, stopAnrWatchdog, triggerNativeCrash, } from './native';
|
|
64
|
+
export { probeNativeScreenshot, probeNativeWireframe, startAnrWatchdog, stopAnrWatchdog, triggerNativeCrash, } from './native';
|
|
65
|
+
export { drainReplay, startReplay, stopReplay } from './replay';
|
|
65
66
|
export { endSession, markSessionCrashed, startSession, } from './session-tracker';
|
|
66
67
|
export { type NavigationRefLike, useTraceNavigation } from './navigation';
|
|
67
68
|
export type { Event, SentoriError, Frame, Breadcrumb, BreadcrumbType, Device, DeviceOS, App, User, Tags, EventKind, Platform, } from './types';
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAkB,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAOxG,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,cAAc,EACd,qBAAqB,EAEtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO5C,eAAO,MAAM,OAAO;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAkB,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAOxG,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,cAAc,EACd,qBAAqB,EAEtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAO5C,eAAO,MAAM,OAAO;;;;;;;;;;aAiG6P,CAAC;eAAmB,CAAC;YAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;CAnEtT,CAAC;AAEF,eAAe,OAAO,CAAC;AAEvB,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,gBAAgB,EAChB,OAAO,GACR,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxG,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,cAAc,EACd,qBAAqB,EACrB,KAAK,uBAAuB,GAC7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EACL,SAAS,EACT,WAAW,EACX,KAAK,aAAa,EAClB,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAChE,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE1E,YAAY,EACV,KAAK,EACL,YAAY,EACZ,KAAK,EACL,UAAU,EACV,cAAc,EACd,MAAM,EACN,QAAQ,EACR,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,QAAQ,GACT,MAAM,SAAS,CAAC"}
|
package/lib/index.js
CHANGED
|
@@ -57,7 +57,8 @@ export { getColdStartMs, markTimeToFullDisplay, } from './mobile-vitals';
|
|
|
57
57
|
export { MomentHandle, startMoment } from '@goliapkg/sentori-core';
|
|
58
58
|
export { bindState, recordState, unbindState, } from './state-snapshots';
|
|
59
59
|
export { RageTapCapture } from './rage-tap';
|
|
60
|
-
export { startAnrWatchdog, stopAnrWatchdog, triggerNativeCrash, } from './native';
|
|
60
|
+
export { probeNativeScreenshot, probeNativeWireframe, startAnrWatchdog, stopAnrWatchdog, triggerNativeCrash, } from './native';
|
|
61
|
+
export { drainReplay, startReplay, stopReplay } from './replay';
|
|
61
62
|
export { endSession, markSessionCrashed, startSession, } from './session-tracker';
|
|
62
63
|
export { useTraceNavigation } from './navigation';
|
|
63
64
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.bak
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { init } from './init';
|
|
2
|
+
import { addBreadcrumb } from './breadcrumbs';
|
|
3
|
+
import { captureError, captureException, captureStep, getUser, sendUserFeedback, setUser, } from './capture';
|
|
4
|
+
import { ErrorBoundary } from './error-boundary';
|
|
5
|
+
import { FeedbackButton } from './feedback-widget';
|
|
6
|
+
import { clearAllFeatureFlags, clearFeatureFlag, getFeatureFlags, setFeatureFlag, } from './feature-flags';
|
|
7
|
+
import { clearMaskQuery, registerMaskQuery } from './mask';
|
|
8
|
+
import { measureFn } from './measure';
|
|
9
|
+
import { getColdStartMs, markTimeToFullDisplay, } from './mobile-vitals';
|
|
10
|
+
import { bindState, recordState, unbindState } from './state-snapshots';
|
|
11
|
+
import { startMoment } from '@goliapkg/sentori-core';
|
|
12
|
+
import { flushMetrics, recordMetric } from './metrics';
|
|
13
|
+
import { RageTapCapture } from './rage-tap';
|
|
14
|
+
import { endSession, markSessionCrashed, startSession, } from './session-tracker';
|
|
15
|
+
export const sentori = {
|
|
16
|
+
init,
|
|
17
|
+
addBreadcrumb,
|
|
18
|
+
setUser,
|
|
19
|
+
getUser,
|
|
20
|
+
captureError,
|
|
21
|
+
captureException,
|
|
22
|
+
captureStep,
|
|
23
|
+
sendUserFeedback,
|
|
24
|
+
recordMetric,
|
|
25
|
+
flushMetrics,
|
|
26
|
+
measureFn,
|
|
27
|
+
startMoment,
|
|
28
|
+
bindState,
|
|
29
|
+
recordState,
|
|
30
|
+
unbindState,
|
|
31
|
+
markTimeToFullDisplay,
|
|
32
|
+
getColdStartMs,
|
|
33
|
+
setFeatureFlag,
|
|
34
|
+
clearFeatureFlag,
|
|
35
|
+
clearAllFeatureFlags,
|
|
36
|
+
getFeatureFlags,
|
|
37
|
+
ErrorBoundary,
|
|
38
|
+
FeedbackButton,
|
|
39
|
+
RageTapCapture,
|
|
40
|
+
registerMaskQuery,
|
|
41
|
+
clearMaskQuery,
|
|
42
|
+
startSession,
|
|
43
|
+
endSession,
|
|
44
|
+
markSessionCrashed,
|
|
45
|
+
};
|
|
46
|
+
export default sentori;
|
|
47
|
+
export { init, init as initSentori } from './init';
|
|
48
|
+
export { addBreadcrumb } from './breadcrumbs';
|
|
49
|
+
export { captureError, captureException, captureStep, getUser, sendUserFeedback, setUser, } from './capture';
|
|
50
|
+
export { ErrorBoundary } from './error-boundary';
|
|
51
|
+
export { FeedbackButton } from './feedback-widget';
|
|
52
|
+
export { clearAllFeatureFlags, clearFeatureFlag, getFeatureFlags, setFeatureFlag, } from './feature-flags';
|
|
53
|
+
export { clearMaskQuery, registerMaskQuery } from './mask';
|
|
54
|
+
export { flushMetrics, recordMetric } from './metrics';
|
|
55
|
+
export { measureFn } from './measure';
|
|
56
|
+
export { getColdStartMs, markTimeToFullDisplay, } from './mobile-vitals';
|
|
57
|
+
export { MomentHandle, startMoment } from '@goliapkg/sentori-core';
|
|
58
|
+
export { bindState, recordState, unbindState, } from './state-snapshots';
|
|
59
|
+
export { RageTapCapture } from './rage-tap';
|
|
60
|
+
export { probeNativeWireframe, startAnrWatchdog, stopAnrWatchdog, triggerNativeCrash, } from './native';
|
|
61
|
+
export { drainReplay, startReplay, stopReplay } from './replay';
|
|
62
|
+
export { endSession, markSessionCrashed, startSession, } from './session-tracker';
|
|
63
|
+
export { useTraceNavigation } from './navigation';
|
|
64
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,gBAAgB,EAChB,OAAO,GACR,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAuD,MAAM,mBAAmB,CAAC;AACxG,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,cAAc,EACd,qBAAqB,GAEtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI;IACJ,aAAa;IACb,OAAO;IACP,OAAO;IACP,YAAY;IACZ,gBAAgB;IAChB,WAAW;IACX,gBAAgB;IAChB,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,WAAW;IACX,SAAS;IACT,WAAW;IACX,WAAW;IACX,qBAAqB;IACrB,cAAc;IACd,cAAc;IACd,gBAAgB;IAChB,oBAAoB;IACpB,eAAe;IACf,aAAa;IACb,cAAc;IACd,cAAc;IACd,iBAAiB;IACjB,cAAc;IACd,YAAY;IACZ,UAAU;IACV,kBAAkB;CACnB,CAAC;AAEF,eAAe,OAAO,CAAC;AAEvB,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,QAAQ,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,OAAO,EACP,gBAAgB,EAChB,OAAO,GACR,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAuD,MAAM,mBAAmB,CAAC;AACxG,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EACL,cAAc,EACd,qBAAqB,GAEtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAyB,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EACL,SAAS,EACT,WAAW,EAEX,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,kBAAkB,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA0B,kBAAkB,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/native.d.ts
CHANGED
|
@@ -78,5 +78,62 @@ export declare function captureNativeScreenshotWithMask(maskedIds: string[]): Pr
|
|
|
78
78
|
export declare function describeWireframeNative(): {
|
|
79
79
|
bound: boolean;
|
|
80
80
|
hasCaptureWireframe: boolean;
|
|
81
|
+
hasProbeWireframe: boolean;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* v0.9.12 — JS entry to the native `probeWireframe` diagnostic. Safe
|
|
85
|
+
* to call before the first replay tick — returns the not-yet-called
|
|
86
|
+
* sentinel. When the ring stays empty, this is the single call that
|
|
87
|
+
* answers "why" without redeploying the pod.
|
|
88
|
+
*
|
|
89
|
+
* path meaning
|
|
90
|
+
* ─────────────── ───────────────────────────────────────────────
|
|
91
|
+
* none(not-yet…) captureWireframe has never run yet
|
|
92
|
+
* scene.fg.key iOS: resolved via foregroundActive scene's key window
|
|
93
|
+
* scene.fg.first iOS: foregroundActive scene's first window (no key)
|
|
94
|
+
* scene.fgi.first iOS: foregroundInactive scene mid-transition
|
|
95
|
+
* scene.any.first iOS: had to fall back to any window
|
|
96
|
+
* legacy.first iOS: legacy UIApplication.windows path
|
|
97
|
+
* none iOS: no UIWindow reachable at the tick instant
|
|
98
|
+
* activity.null Android: no resumed Activity registered
|
|
99
|
+
* decorView.null Android: activity has no decor view yet
|
|
100
|
+
* root.zero-size Android: decorView size <= 0 (mid-layout)
|
|
101
|
+
* activity.resumed Android: ok
|
|
102
|
+
*/
|
|
103
|
+
export declare function probeNativeWireframe(): {
|
|
104
|
+
available: boolean;
|
|
105
|
+
lastNodes: number;
|
|
106
|
+
lastPath: string;
|
|
107
|
+
sceneCount: number;
|
|
108
|
+
windowCount: number;
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* v1.0.0-rc.2 — JS entry to the `probeScreenshot` native diagnostic.
|
|
112
|
+
* Same shape contract as [probeNativeWireframe]: returns a flat
|
|
113
|
+
* key/value bag the consumer can ship back as-is when screenshot
|
|
114
|
+
* capture returns null.
|
|
115
|
+
*
|
|
116
|
+
* path meaning
|
|
117
|
+
* ───────────────────────── ───────────────────────────────────────
|
|
118
|
+
* none(not-yet-called) captureScreenshot has never run
|
|
119
|
+
* ok capture succeeded
|
|
120
|
+
* activity.null Android: foreground tracker had no Activity
|
|
121
|
+
* window.null Android/iOS: Activity/scene has no window
|
|
122
|
+
* decorView.null Android: window had no decor view
|
|
123
|
+
* decorView.zero-size Android: decorView size <= 0 (mid-layout)
|
|
124
|
+
* api.unsupported Android: API < 24 (no PixelCopy)
|
|
125
|
+
* pixelCopy.notSuccess Android: PixelCopy completed but reported failure
|
|
126
|
+
* pixelCopy.threw:<class> Android: PixelCopy threw mid-request
|
|
127
|
+
* render.failed iOS: UIGraphicsImageRenderer returned nil
|
|
128
|
+
* empty iOS: walked tree but no view+screenshot output
|
|
129
|
+
*
|
|
130
|
+
* On Android the result also carries `trackedSource` (lifecycle.created /
|
|
131
|
+
* lifecycle.resumed / reflection.activityThread / manual.setActivity)
|
|
132
|
+
* so callers can tell whether the SDK back-filled via reflection.
|
|
133
|
+
*/
|
|
134
|
+
export declare function probeNativeScreenshot(): {
|
|
135
|
+
available: boolean;
|
|
136
|
+
lastPath: string;
|
|
137
|
+
raw: Record<string, unknown>;
|
|
81
138
|
};
|
|
82
139
|
//# sourceMappingURL=native.d.ts.map
|
package/lib/native.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAyIH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,IAAI,CAMP;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAQ5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IACzC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,IAAI,CAMP;AAED,wBAAgB,eAAe,IAAI,IAAI,CAMtC;AAED,+DAA+D;AAC/D,wBAAgB,uBAAuB,IAAI,IAAI,CAM9C;AAED,yEAAyE;AACzE,wBAAgB,oBAAoB,IAAI,IAAI,GAAG,MAAM,CAOpD;AAED,oEAAoE;AACpE,wBAAgB,sBAAsB,IAAI,IAAI,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAMhF;AAED,iEAAiE;AACjE,wBAAgB,wBAAwB,IAAI,IAAI,CAM/C;AAED;;yBAEyB;AACzB,wBAAgB,wBAAwB,IAAI,IAAI,GAAG;IACjD,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAMA;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,+BAA+B,CACnD,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,IAAI,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAoCvD;AAED;;sEAEsE;AACtE,wBAAgB,uBAAuB,IAAI;IACzC,KAAK,EAAE,OAAO,CAAA;IACd,mBAAmB,EAAE,OAAO,CAAA;IAC5B,iBAAiB,EAAE,OAAO,CAAA;CAC3B,CAOA;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,IAAI;IACtC,SAAS,EAAE,OAAO,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;CACpB,CAiCA;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,qBAAqB,IAAI;IACvC,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC7B,CAkBA"}
|
package/lib/native.js
CHANGED
|
@@ -193,6 +193,105 @@ export function describeWireframeNative() {
|
|
|
193
193
|
return {
|
|
194
194
|
bound: n !== null,
|
|
195
195
|
hasCaptureWireframe: Boolean(n?.captureWireframe),
|
|
196
|
+
hasProbeWireframe: Boolean(n?.probeWireframe),
|
|
196
197
|
};
|
|
197
198
|
}
|
|
199
|
+
/**
|
|
200
|
+
* v0.9.12 — JS entry to the native `probeWireframe` diagnostic. Safe
|
|
201
|
+
* to call before the first replay tick — returns the not-yet-called
|
|
202
|
+
* sentinel. When the ring stays empty, this is the single call that
|
|
203
|
+
* answers "why" without redeploying the pod.
|
|
204
|
+
*
|
|
205
|
+
* path meaning
|
|
206
|
+
* ─────────────── ───────────────────────────────────────────────
|
|
207
|
+
* none(not-yet…) captureWireframe has never run yet
|
|
208
|
+
* scene.fg.key iOS: resolved via foregroundActive scene's key window
|
|
209
|
+
* scene.fg.first iOS: foregroundActive scene's first window (no key)
|
|
210
|
+
* scene.fgi.first iOS: foregroundInactive scene mid-transition
|
|
211
|
+
* scene.any.first iOS: had to fall back to any window
|
|
212
|
+
* legacy.first iOS: legacy UIApplication.windows path
|
|
213
|
+
* none iOS: no UIWindow reachable at the tick instant
|
|
214
|
+
* activity.null Android: no resumed Activity registered
|
|
215
|
+
* decorView.null Android: activity has no decor view yet
|
|
216
|
+
* root.zero-size Android: decorView size <= 0 (mid-layout)
|
|
217
|
+
* activity.resumed Android: ok
|
|
218
|
+
*/
|
|
219
|
+
export function probeNativeWireframe() {
|
|
220
|
+
const n = native();
|
|
221
|
+
if (!n || typeof n.probeWireframe !== 'function') {
|
|
222
|
+
return {
|
|
223
|
+
available: false,
|
|
224
|
+
lastNodes: 0,
|
|
225
|
+
lastPath: 'native.unavailable',
|
|
226
|
+
sceneCount: 0,
|
|
227
|
+
windowCount: 0,
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
try {
|
|
231
|
+
const r = n.probeWireframe();
|
|
232
|
+
return {
|
|
233
|
+
available: true,
|
|
234
|
+
lastNodes: typeof r?.lastNodes === 'number' ? r.lastNodes : 0,
|
|
235
|
+
lastPath: typeof r?.lastPath === 'string' ? r.lastPath : 'unknown',
|
|
236
|
+
sceneCount: typeof r?.sceneCount === 'number' ? r.sceneCount : 0,
|
|
237
|
+
windowCount: typeof r?.windowCount === 'number' ? r.windowCount : 0,
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
catch (e) {
|
|
241
|
+
if (typeof __DEV__ !== 'undefined' && __DEV__) {
|
|
242
|
+
// eslint-disable-next-line no-console
|
|
243
|
+
console.warn('[sentori] probeWireframe threw', e);
|
|
244
|
+
}
|
|
245
|
+
return {
|
|
246
|
+
available: false,
|
|
247
|
+
lastNodes: 0,
|
|
248
|
+
lastPath: 'native.threw',
|
|
249
|
+
sceneCount: 0,
|
|
250
|
+
windowCount: 0,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* v1.0.0-rc.2 — JS entry to the `probeScreenshot` native diagnostic.
|
|
256
|
+
* Same shape contract as [probeNativeWireframe]: returns a flat
|
|
257
|
+
* key/value bag the consumer can ship back as-is when screenshot
|
|
258
|
+
* capture returns null.
|
|
259
|
+
*
|
|
260
|
+
* path meaning
|
|
261
|
+
* ───────────────────────── ───────────────────────────────────────
|
|
262
|
+
* none(not-yet-called) captureScreenshot has never run
|
|
263
|
+
* ok capture succeeded
|
|
264
|
+
* activity.null Android: foreground tracker had no Activity
|
|
265
|
+
* window.null Android/iOS: Activity/scene has no window
|
|
266
|
+
* decorView.null Android: window had no decor view
|
|
267
|
+
* decorView.zero-size Android: decorView size <= 0 (mid-layout)
|
|
268
|
+
* api.unsupported Android: API < 24 (no PixelCopy)
|
|
269
|
+
* pixelCopy.notSuccess Android: PixelCopy completed but reported failure
|
|
270
|
+
* pixelCopy.threw:<class> Android: PixelCopy threw mid-request
|
|
271
|
+
* render.failed iOS: UIGraphicsImageRenderer returned nil
|
|
272
|
+
* empty iOS: walked tree but no view+screenshot output
|
|
273
|
+
*
|
|
274
|
+
* On Android the result also carries `trackedSource` (lifecycle.created /
|
|
275
|
+
* lifecycle.resumed / reflection.activityThread / manual.setActivity)
|
|
276
|
+
* so callers can tell whether the SDK back-filled via reflection.
|
|
277
|
+
*/
|
|
278
|
+
export function probeNativeScreenshot() {
|
|
279
|
+
const n = native();
|
|
280
|
+
if (!n || typeof n.probeScreenshot !== 'function') {
|
|
281
|
+
return { available: false, lastPath: 'native.unavailable', raw: {} };
|
|
282
|
+
}
|
|
283
|
+
try {
|
|
284
|
+
const r = n.probeScreenshot();
|
|
285
|
+
const raw = r && typeof r === 'object' && !Array.isArray(r) ? r : {};
|
|
286
|
+
const lastPath = typeof raw.lastPath === 'string' ? raw.lastPath : 'unknown';
|
|
287
|
+
return { available: true, lastPath, raw };
|
|
288
|
+
}
|
|
289
|
+
catch (e) {
|
|
290
|
+
if (typeof __DEV__ !== 'undefined' && __DEV__) {
|
|
291
|
+
// eslint-disable-next-line no-console
|
|
292
|
+
console.warn('[sentori] probeScreenshot threw', e);
|
|
293
|
+
}
|
|
294
|
+
return { available: false, lastPath: 'native.threw', raw: {} };
|
|
295
|
+
}
|
|
296
|
+
}
|
|
198
297
|
//# sourceMappingURL=native.js.map
|
package/lib/native.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"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"}
|
package/lib/replay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAkEA,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC;IAC3B,mCAAmC;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CA+CrD;AAED,wBAAgB,UAAU,IAAI,IAAI,CAUjC;AAsGD;;2BAE2B;AAC3B,wBAAgB,WAAW,IAAI,MAAM,CAMpC;AAED,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
|
package/lib/replay.js
CHANGED
|
@@ -29,6 +29,25 @@ const MIN_TICK_PERIOD_MS = 250;
|
|
|
29
29
|
let _ring = [];
|
|
30
30
|
let _timer = null;
|
|
31
31
|
let _running = false;
|
|
32
|
+
/**
|
|
33
|
+
* v0.9.13 — frame-level delta encoding: when the new snapshot matches
|
|
34
|
+
* the last one byte-for-byte (static UI, no animation, off-screen
|
|
35
|
+
* app), skip pushing it. The ring stays meaningful (one frame =
|
|
36
|
+
* one *change*), the attachment shrinks proportionally, and a real
|
|
37
|
+
* idle phase no longer evicts a useful pre-error frame.
|
|
38
|
+
*
|
|
39
|
+
* We only check against the most-recently-pushed snapshot, not the
|
|
40
|
+
* whole ring — that's cheap (one string comparison per tick) and
|
|
41
|
+
* catches the dominant case (idle screens). True content changes
|
|
42
|
+
* fall through and push as before.
|
|
43
|
+
*
|
|
44
|
+
* Budget verification on the iOS showcase (apps/ios-showcase): 60
|
|
45
|
+
* frames at ~120 bytes each → ≈ 7 KB raw NDJSON, well under the
|
|
46
|
+
* 500 KB attachment cap. Heavier RN apps with 200+ visible nodes
|
|
47
|
+
* per frame can land in the 400 KB band; future work in v1.x adds
|
|
48
|
+
* native gzip on upload if real-world traffic ever pushes the cap.
|
|
49
|
+
*/
|
|
50
|
+
let _lastPushed = null;
|
|
32
51
|
/** Native module ref, resolved once on first start. Caching here
|
|
33
52
|
* avoids the cost of `requireNativeModule('Sentori')` on every
|
|
34
53
|
* capture tick (Metro's require cache makes this cheap, but the
|
|
@@ -64,7 +83,20 @@ export function startReplay(opts) {
|
|
|
64
83
|
_timer = setInterval(() => {
|
|
65
84
|
captureTick();
|
|
66
85
|
}, period);
|
|
67
|
-
|
|
86
|
+
// v0.9.12 — Insight 2026-05-17 report: 0.9.11 emitted the
|
|
87
|
+
// "starting bound=true" line then went silent. Root cause was the
|
|
88
|
+
// `.unref?.()` call that used to live here. Hermes 0.81 doesn't
|
|
89
|
+
// ship a Timer object with the Node-style `unref` method, and the
|
|
90
|
+
// optional-chained call ended up dereferencing a `prototype`
|
|
91
|
+
// property on `undefined` — throwing synchronously inside
|
|
92
|
+
// startReplay, which RN's bridge swallowed silently. Net effect:
|
|
93
|
+
// setInterval registered, captureTick never invoked. Drop the
|
|
94
|
+
// call; replay tick lifecycle is bound to the app process, no
|
|
95
|
+
// event-loop tweak needed.
|
|
96
|
+
if (typeof __DEV__ !== 'undefined' && __DEV__) {
|
|
97
|
+
// eslint-disable-next-line no-console
|
|
98
|
+
console.warn('[sentori] replay: scheduled tick period=', period, 'ms');
|
|
99
|
+
}
|
|
68
100
|
}
|
|
69
101
|
export function stopReplay() {
|
|
70
102
|
_running = false;
|
|
@@ -75,20 +107,49 @@ export function stopReplay() {
|
|
|
75
107
|
_nativeMod = null;
|
|
76
108
|
_emptyTickCount = 0;
|
|
77
109
|
_emptyTickLogStride = 1;
|
|
110
|
+
_firstTickLogged = false;
|
|
78
111
|
}
|
|
79
112
|
let _emptyTickCount = 0;
|
|
80
113
|
let _emptyTickLogStride = 1;
|
|
114
|
+
let _firstTickLogged = false;
|
|
81
115
|
function captureTick() {
|
|
82
116
|
if (!_running)
|
|
83
117
|
return;
|
|
84
|
-
|
|
118
|
+
// v0.9.12 — UNCONDITIONAL first-tick log. Proves the setInterval
|
|
119
|
+
// callback is firing at all, before any other code that could
|
|
120
|
+
// throw. 0.9.11's diagnostic was inside a `else if (snapshot==null)`
|
|
121
|
+
// branch that could only surface AFTER the native call returned;
|
|
122
|
+
// useless when the bug is that the tick body never enters.
|
|
123
|
+
if (typeof __DEV__ !== 'undefined' && __DEV__ && !_firstTickLogged) {
|
|
124
|
+
// eslint-disable-next-line no-console
|
|
125
|
+
console.warn('[sentori] replay tick: FIRST INVOCATION');
|
|
126
|
+
_firstTickLogged = true;
|
|
127
|
+
}
|
|
128
|
+
// 0.9.11 called startSpan OUTSIDE the catch block. If
|
|
129
|
+
// `@goliapkg/sentori-core` failed to initialise (or startSpan
|
|
130
|
+
// threw for any other reason on the first tick) the whole tick
|
|
131
|
+
// callback died silently. Wrap so worst case is "no span for this
|
|
132
|
+
// tick" not "no ticks for the session".
|
|
133
|
+
let tickSpan = null;
|
|
134
|
+
try {
|
|
135
|
+
tickSpan = startSpan('sentori.replay.tick', { name: 'tick' });
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
// never fatal
|
|
139
|
+
}
|
|
85
140
|
try {
|
|
86
141
|
const maskIds = readMaskIds();
|
|
87
142
|
const snapshot = _nativeMod?.captureWireframe?.(maskIds);
|
|
88
143
|
if (typeof snapshot === 'string' && snapshot.length > 0) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
144
|
+
// v0.9.13 — skip pushing if the frame is identical to the last
|
|
145
|
+
// pushed one. See _lastPushed comment for the rationale.
|
|
146
|
+
if (snapshot !== _lastPushed) {
|
|
147
|
+
_ring.push(snapshot);
|
|
148
|
+
_lastPushed = snapshot;
|
|
149
|
+
while (_ring.length > RING_SIZE) {
|
|
150
|
+
_ring.shift();
|
|
151
|
+
}
|
|
152
|
+
}
|
|
92
153
|
_emptyTickCount = 0;
|
|
93
154
|
_emptyTickLogStride = 1;
|
|
94
155
|
}
|
|
@@ -109,12 +170,16 @@ function captureTick() {
|
|
|
109
170
|
_emptyTickLogStride = Math.max(_emptyTickLogStride * 10, 10);
|
|
110
171
|
}
|
|
111
172
|
}
|
|
112
|
-
tickSpan
|
|
173
|
+
tickSpan?.finish({ status: 'ok' });
|
|
113
174
|
}
|
|
114
175
|
catch (e) {
|
|
115
176
|
if (e instanceof Error)
|
|
116
|
-
tickSpan
|
|
117
|
-
tickSpan
|
|
177
|
+
tickSpan?.setTag('error.message', e.message);
|
|
178
|
+
tickSpan?.finish({ status: 'error' });
|
|
179
|
+
if (typeof __DEV__ !== 'undefined' && __DEV__) {
|
|
180
|
+
// eslint-disable-next-line no-console
|
|
181
|
+
console.warn('[sentori] replay tick: threw', e);
|
|
182
|
+
}
|
|
118
183
|
}
|
|
119
184
|
}
|
|
120
185
|
function readMaskIds() {
|
|
@@ -146,10 +211,12 @@ export function drainReplay() {
|
|
|
146
211
|
return '';
|
|
147
212
|
const out = _ring.join('\n');
|
|
148
213
|
_ring = [];
|
|
214
|
+
_lastPushed = null;
|
|
149
215
|
return out;
|
|
150
216
|
}
|
|
151
217
|
export function __resetReplayForTests() {
|
|
152
218
|
stopReplay();
|
|
153
219
|
_ring = [];
|
|
220
|
+
_lastPushed = null;
|
|
154
221
|
}
|
|
155
222
|
//# sourceMappingURL=replay.js.map
|
package/lib/replay.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,mEAAmE;AACnE,mEAAmE;AACnE,kEAAkE;AAClE,kEAAkE;AAClE,4DAA4D;AAC5D,EAAE;AACF,gCAAgC;AAChC,kEAAkE;AAClE,iEAAiE;AACjE,+DAA+D;AAC/D,6DAA6D;AAC7D,wDAAwD;AACxD,iEAAiE;AACjE,iEAAiE;AACjE,4DAA4D;AAC5D,wBAAwB;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAInD,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAC9B,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB;;;wCAGwC;AACxC,MAAM,kBAAkB,GAAG,GAAG,CAAC;AAE/B,IAAI,KAAK,GAAa,EAAE,CAAC;AACzB,IAAI,MAAM,GAA0C,IAAI,CAAC;AACzD,IAAI,QAAQ,GAAG,KAAK,CAAC;AAErB;;;;uCAIuC;AACvC,IAAI,UAAU,GAA8B,IAAI,CAAC;AAQjD,MAAM,UAAU,WAAW,CAAC,IAAmB;IAC7C,IAAI,QAAQ;QAAE,OAAO;IACrB,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO;IACtC,iEAAiE;IACjE,gEAAgE;IAChE,6DAA6D;IAC7D,8DAA8D;IAC9D,iEAAiE;IACjE,qEAAqE;IACrE,MAAM,IAAI,GAAG,uBAAuB,EAAE,CAAC;IACvC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EAAE,CAAC;YAC9C,sCAAsC;YACtC,OAAO,CAAC,IAAI,CACV,4GAA4G,CAC7G,CAAC;QACJ,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EAAE,CAAC;QAC9C,sCAAsC;QACtC,OAAO,CAAC,IAAI,CACV,4BAA4B,EAC5B,QAAQ,EAAE,IAAI,CAAC,KAAK,EACpB,sBAAsB,EAAE,IAAI,CAAC,mBAAmB,CACjD,CAAC;IACJ,CAAC;IACD,QAAQ,GAAG,IAAI,CAAC;IAChB,UAAU,GAAG,gBAAgB,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE;QACxB,WAAW,EAAE,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../src/replay.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goliapkg/sentori-react-native",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.0-rc.2",
|
|
4
4
|
"description": "Sentori SDK for React Native \u2014 JS-layer error capture, native crash handlers (iOS / Android), batched transport, fetch + react-navigation tracing.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://sentori.golia.jp",
|
package/src/index.ts
CHANGED
|
@@ -102,10 +102,13 @@ export {
|
|
|
102
102
|
} from './state-snapshots';
|
|
103
103
|
export { RageTapCapture } from './rage-tap';
|
|
104
104
|
export {
|
|
105
|
+
probeNativeScreenshot,
|
|
106
|
+
probeNativeWireframe,
|
|
105
107
|
startAnrWatchdog,
|
|
106
108
|
stopAnrWatchdog,
|
|
107
109
|
triggerNativeCrash,
|
|
108
110
|
} from './native';
|
|
111
|
+
export { drainReplay, startReplay, stopReplay } from './replay';
|
|
109
112
|
export {
|
|
110
113
|
endSession,
|
|
111
114
|
markSessionCrashed,
|