@goliapkg/sentori-react-native 5.1.1 → 5.1.3
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/SentoriReplayCapture.kt +77 -49
- package/ios/SentoriReplayCapture.swift +26 -8
- package/lib/transport.d.ts +1 -0
- package/lib/transport.d.ts.map +1 -1
- package/lib/transport.js +3 -1
- package/lib/transport.js.map +1 -1
- package/lib/verbs.d.ts.map +1 -1
- package/lib/verbs.js +37 -1
- package/lib/verbs.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/transport.test.ts +6 -0
- package/src/__tests__/verbs.test.ts +43 -0
- package/src/transport.ts +3 -1
- package/src/verbs.ts +41 -1
|
@@ -120,7 +120,8 @@ object SentoriReplayCapture {
|
|
|
120
120
|
val nodes = JSONArray()
|
|
121
121
|
val rootLoc = IntArray(2).also { root.getLocationInWindow(it) }
|
|
122
122
|
val ctx = WalkContext(rootLoc = rootLoc, maskedSet = maskedSet)
|
|
123
|
-
|
|
123
|
+
val rootClip = android.graphics.Rect(0, 0, root.width, root.height)
|
|
124
|
+
walk(root, depth = 0, parentMasked = false, ctx = ctx, clip = rootClip, nodes = nodes)
|
|
124
125
|
|
|
125
126
|
val payload = JSONObject().apply {
|
|
126
127
|
put("ts", System.currentTimeMillis())
|
|
@@ -173,6 +174,7 @@ object SentoriReplayCapture {
|
|
|
173
174
|
depth: Int,
|
|
174
175
|
parentMasked: Boolean,
|
|
175
176
|
ctx: WalkContext,
|
|
177
|
+
clip: android.graphics.Rect,
|
|
176
178
|
nodes: JSONArray,
|
|
177
179
|
) {
|
|
178
180
|
if (nodes.length() >= MAX_NODES) return
|
|
@@ -188,68 +190,94 @@ object SentoriReplayCapture {
|
|
|
188
190
|
val w = view.width
|
|
189
191
|
val h = view.height
|
|
190
192
|
|
|
193
|
+
// Insight 2026-08-01: nothing was clipped here at all — a
|
|
194
|
+
// scroll container's full content width shipped as-is and
|
|
195
|
+
// drew past the device in the replay. `clip` accumulates
|
|
196
|
+
// every clipping ancestor (clipChildren defaults to true, so
|
|
197
|
+
// scroll viewports narrow it); a node ships as its visible
|
|
198
|
+
// intersection, an invisible one not at all. This is the
|
|
199
|
+
// root-cause fix the 05-18 decorView→content anchor swap
|
|
200
|
+
// only sidestepped.
|
|
201
|
+
var childClip = clip
|
|
202
|
+
|
|
191
203
|
// Emit a node ONLY when the view has visual extent. A zero-
|
|
192
204
|
// size view contributes nothing to render but its subtree
|
|
193
|
-
// might; recurse below regardless
|
|
205
|
+
// might; recurse below regardless (and without narrowing the
|
|
206
|
+
// clip — transient zero-size Fabric wrappers do not really
|
|
207
|
+
// clip their laid-out descendants).
|
|
194
208
|
if (w > 0 && h > 0) {
|
|
195
209
|
val loc = IntArray(2)
|
|
196
210
|
view.getLocationInWindow(loc)
|
|
197
211
|
val x = loc[0] - ctx.rootLoc[0]
|
|
198
212
|
val y = loc[1] - ctx.rootLoc[1]
|
|
199
213
|
|
|
200
|
-
val
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
214
|
+
val selfRect = android.graphics.Rect(x, y, x + w, y + h)
|
|
215
|
+
val visible = android.graphics.Rect(selfRect)
|
|
216
|
+
if (!visible.intersect(clip)) {
|
|
217
|
+
// Fully outside every clipping ancestor: the view
|
|
218
|
+
// shows nothing, and if it clips its own children the
|
|
219
|
+
// whole subtree is gone with it.
|
|
220
|
+
if (view is ViewGroup && view.clipChildren) return
|
|
221
|
+
visible.setEmpty()
|
|
205
222
|
}
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
val text = view.text.toString().let { if (it.length > 200) it.substring(0, 200) else it }
|
|
216
|
-
node.put("text", text)
|
|
217
|
-
node.put("color", colorToHex(view.currentTextColor))
|
|
218
|
-
kindEmitted = true
|
|
219
|
-
}
|
|
220
|
-
view is EditText -> {
|
|
221
|
-
node.put("kind", "text")
|
|
222
|
-
val text = (view.text ?: "").toString().let { if (it.length > 200) it.substring(0, 200) else it }
|
|
223
|
-
node.put("text", text)
|
|
224
|
-
kindEmitted = true
|
|
225
|
-
}
|
|
226
|
-
view is ImageView -> {
|
|
227
|
-
node.put("kind", "image")
|
|
228
|
-
kindEmitted = true
|
|
223
|
+
if (view is ViewGroup && view.clipChildren) {
|
|
224
|
+
childClip = android.graphics.Rect(visible)
|
|
225
|
+
}
|
|
226
|
+
if (!visible.isEmpty) {
|
|
227
|
+
val node = JSONObject().apply {
|
|
228
|
+
put("x", visible.left)
|
|
229
|
+
put("y", visible.top)
|
|
230
|
+
put("w", visible.width())
|
|
231
|
+
put("h", visible.height())
|
|
229
232
|
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
233
|
+
|
|
234
|
+
var kindEmitted = false
|
|
235
|
+
when {
|
|
236
|
+
masked -> {
|
|
237
|
+
node.put("kind", "mask")
|
|
238
|
+
kindEmitted = true
|
|
239
|
+
}
|
|
240
|
+
view is TextView && !view.text.isNullOrEmpty() -> {
|
|
241
|
+
node.put("kind", "text")
|
|
242
|
+
val text = view.text.toString().let { if (it.length > 200) it.substring(0, 200) else it }
|
|
243
|
+
node.put("text", text)
|
|
244
|
+
node.put("color", colorToHex(view.currentTextColor))
|
|
245
|
+
kindEmitted = true
|
|
246
|
+
}
|
|
247
|
+
view is EditText -> {
|
|
248
|
+
node.put("kind", "text")
|
|
249
|
+
val text = (view.text ?: "").toString().let { if (it.length > 200) it.substring(0, 200) else it }
|
|
250
|
+
node.put("text", text)
|
|
251
|
+
kindEmitted = true
|
|
252
|
+
}
|
|
253
|
+
view is ImageView -> {
|
|
239
254
|
node.put("kind", "image")
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
255
|
+
kindEmitted = true
|
|
256
|
+
}
|
|
257
|
+
view.background != null -> {
|
|
258
|
+
// rc.8 — backgrounds backed by a BitmapDrawable
|
|
259
|
+
// (a View whose backgroundImage / drawable
|
|
260
|
+
// resource is a raster) emit as `image` kind so
|
|
261
|
+
// the dashboard renders them as a media region,
|
|
262
|
+
// not as a grey rect. Everything else stays
|
|
263
|
+
// `rect` and tries to extract a fill colour.
|
|
264
|
+
val bg = view.background
|
|
265
|
+
if (bg is BitmapDrawable) {
|
|
266
|
+
node.put("kind", "image")
|
|
267
|
+
} else {
|
|
268
|
+
node.put("kind", "rect")
|
|
269
|
+
val color = extractDrawableColor(bg)
|
|
270
|
+
if (color != null && (color shr 24 and 0xff) != 0) {
|
|
271
|
+
node.put("color", colorToHex(color))
|
|
272
|
+
}
|
|
245
273
|
}
|
|
274
|
+
kindEmitted = true
|
|
246
275
|
}
|
|
247
|
-
kindEmitted = true
|
|
248
276
|
}
|
|
249
|
-
}
|
|
250
277
|
|
|
251
|
-
|
|
252
|
-
|
|
278
|
+
if (kindEmitted) {
|
|
279
|
+
nodes.put(node)
|
|
280
|
+
}
|
|
253
281
|
}
|
|
254
282
|
}
|
|
255
283
|
|
|
@@ -257,7 +285,7 @@ object SentoriReplayCapture {
|
|
|
257
285
|
// descendants (the rc.3 fix).
|
|
258
286
|
if (!masked && view is ViewGroup) {
|
|
259
287
|
for (i in 0 until view.childCount) {
|
|
260
|
-
walk(view.getChildAt(i), depth + 1, masked, ctx, nodes)
|
|
288
|
+
walk(view.getChildAt(i), depth + 1, masked, ctx, childClip, nodes)
|
|
261
289
|
}
|
|
262
290
|
}
|
|
263
291
|
}
|
|
@@ -74,6 +74,7 @@ import UIKit
|
|
|
74
74
|
parentMasked: false,
|
|
75
75
|
maskedIds: maskedIds,
|
|
76
76
|
window: window,
|
|
77
|
+
clip: window.bounds,
|
|
77
78
|
nodes: &nodes
|
|
78
79
|
)
|
|
79
80
|
lastDiagNodes = nodes.count
|
|
@@ -195,6 +196,7 @@ import UIKit
|
|
|
195
196
|
parentMasked: Bool,
|
|
196
197
|
maskedIds: Set<String>,
|
|
197
198
|
window: UIWindow,
|
|
199
|
+
clip: CGRect,
|
|
198
200
|
nodes: inout [[String: Any]]
|
|
199
201
|
) {
|
|
200
202
|
if nodes.count >= MAX_NODES { return }
|
|
@@ -207,17 +209,29 @@ import UIKit
|
|
|
207
209
|
.map { maskedIds.contains($0) } ?? false
|
|
208
210
|
let masked = parentMasked || isThisMasked
|
|
209
211
|
|
|
212
|
+
// Insight 2026-08-01: the old check culled only nodes FULLY
|
|
213
|
+
// outside the window, so a 2000pt scroll ruler shipped at
|
|
214
|
+
// 2000pt and drew past the phone. `clip` accumulates every
|
|
215
|
+
// clipping ancestor (scroll views, clipsToBounds containers)
|
|
216
|
+
// from the window down; a node ships as the part of it that
|
|
217
|
+
// is actually visible, and a subtree behind a clipping edge
|
|
218
|
+
// ships not at all. This replaces the 05-18 anchor-swap class
|
|
219
|
+
// of fix: clipping is the root cause, anchors were symptoms.
|
|
210
220
|
let frame = view.convert(view.bounds, to: window)
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
221
|
+
let visible = frame.intersection(clip)
|
|
222
|
+
let clipsChildren = view.clipsToBounds
|
|
223
|
+
if visible.isNull || visible.isEmpty {
|
|
224
|
+
// Nothing of this view shows. Its children can still show
|
|
225
|
+
// when this view does not clip them (transform-heavy or
|
|
226
|
+
// zero-size wrappers); a clipping view ends the subtree.
|
|
227
|
+
if clipsChildren { return }
|
|
214
228
|
}
|
|
215
229
|
|
|
216
230
|
var node: [String: Any] = [
|
|
217
|
-
"x": Double(
|
|
218
|
-
"y": Double(
|
|
219
|
-
"w": Double(
|
|
220
|
-
"h": Double(
|
|
231
|
+
"x": Double(visible.origin.x),
|
|
232
|
+
"y": Double(visible.origin.y),
|
|
233
|
+
"w": Double(visible.size.width),
|
|
234
|
+
"h": Double(visible.size.height),
|
|
221
235
|
]
|
|
222
236
|
|
|
223
237
|
if masked {
|
|
@@ -239,11 +253,14 @@ import UIKit
|
|
|
239
253
|
}
|
|
240
254
|
// else: invisible container — skip emitting but recurse.
|
|
241
255
|
|
|
242
|
-
if node["kind"] != nil {
|
|
256
|
+
if node["kind"] != nil, !visible.isNull, !visible.isEmpty {
|
|
243
257
|
nodes.append(node)
|
|
244
258
|
}
|
|
245
259
|
|
|
246
260
|
if !masked {
|
|
261
|
+
// A clipping view narrows the clip for everything below
|
|
262
|
+
// it; a non-clipping one passes the inherited clip on.
|
|
263
|
+
let childClip = clipsChildren ? visible : clip
|
|
247
264
|
// Don't expose internals of masked subtrees.
|
|
248
265
|
for sub in view.subviews {
|
|
249
266
|
walk(
|
|
@@ -253,6 +270,7 @@ import UIKit
|
|
|
253
270
|
parentMasked: masked,
|
|
254
271
|
maskedIds: maskedIds,
|
|
255
272
|
window: window,
|
|
273
|
+
clip: childClip,
|
|
256
274
|
nodes: &nodes
|
|
257
275
|
)
|
|
258
276
|
}
|
package/lib/transport.d.ts
CHANGED
|
@@ -40,6 +40,7 @@ export declare const uploadAttachment: (eventId: string, kind: import('@goliapkg
|
|
|
40
40
|
} | null>;
|
|
41
41
|
export declare const __resetForTests: () => void;
|
|
42
42
|
export declare const __peekQueue: () => readonly WireEvent[];
|
|
43
|
+
export declare const __sdkVersion: () => string;
|
|
43
44
|
export declare const __peekAssertStats: () => readonly AssertStat[];
|
|
44
45
|
export {};
|
|
45
46
|
//# sourceMappingURL=transport.d.ts.map
|
package/lib/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAiB,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAiB,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAoBnF,eAAO,MAAM,OAAO,UAAW,SAAS,KAAG,IAU1C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW,SAAU,MAAM,MAAM,OAAO,WAAW,MAAM,KAAG,IAcxE,CAAC;AAEF,eAAO,MAAM,cAAc,QAAO,IAEjC,CAAC;AAEF,eAAO,MAAM,KAAK,QAAa,OAAO,CAAC,IAAI,CA+B1C,CAAC;AAIF,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,OAAO,wBAAwB,EAAE,cAAc,CAAC;IACtD,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,MAAM,EAAE,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC;CAClC,CAAC;AAIF;;6CAE6C;AAC7C,eAAO,MAAM,eAAe,YACjB,MAAM,QACT,gBAAgB,CAAC,MAAM,CAAC,QACxB,gBAAgB,CAAC,MAAM,CAAC,SACxB;IAAE,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAA;CAAE,KAC5C,IAIF,CAAC;AA0GF,eAAO,MAAM,iBAAiB,QAAa,OAAO,CAAC,IAAI,CAatD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,YAClB,MAAM,QACT,OAAO,wBAAwB,EAAE,cAAc,QAC/C;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,SACrD;IAAE,MAAM,CAAC,EAAE,SAAS,GAAG,KAAK,GAAG,IAAI,CAAA;CAAE,KAC1C,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA8ChC,CAAC;AAEF,eAAO,MAAM,eAAe,QAAO,IAMlC,CAAC;AAEF,eAAO,MAAM,WAAW,QAAO,SAAS,SAAS,EAAY,CAAC;AAC9D,eAAO,MAAM,YAAY,QAAO,MAAqB,CAAC;AACtD,eAAO,MAAM,iBAAiB,QAAO,SAAS,UAAU,EAAgC,CAAC"}
|
package/lib/transport.js
CHANGED
|
@@ -14,7 +14,8 @@ const BATCH_SIZE = 10;
|
|
|
14
14
|
const MAX_RETRY = 3;
|
|
15
15
|
const STORAGE_KEY = '@sentori/pending';
|
|
16
16
|
const MAX_PERSISTED = 1000;
|
|
17
|
-
|
|
17
|
+
// Pinned to package.json by a test — bump both together.
|
|
18
|
+
const SDK_VERSION = '5.1.3';
|
|
18
19
|
let _queue = [];
|
|
19
20
|
let _assertStats = new Map();
|
|
20
21
|
let _flushTimer = null;
|
|
@@ -267,5 +268,6 @@ export const __resetForTests = () => {
|
|
|
267
268
|
_started = false;
|
|
268
269
|
};
|
|
269
270
|
export const __peekQueue = () => _queue;
|
|
271
|
+
export const __sdkVersion = () => SDK_VERSION;
|
|
270
272
|
export const __peekAssertStats = () => [..._assertStats.values()];
|
|
271
273
|
//# sourceMappingURL=transport.js.map
|
package/lib/transport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
package/lib/verbs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verbs.d.ts","sourceRoot":"","sources":["../src/verbs.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,SAAS,EAGT,OAAO,EACP,YAAY,EAGb,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"verbs.d.ts","sourceRoot":"","sources":["../src/verbs.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EACV,SAAS,EAGT,OAAO,EACP,YAAY,EAGb,MAAM,wBAAwB,CAAC;AAgJhC,eAAO,MAAM,KAAK,oEAOhB,CAAC;AAEH,eAAO,MAAM,IAAI,oEAWhB,CAAC;AAEF,uEAAuE;AACvE,eAAO,MAAM,YAAY,aACb,MAAM,WACP,OAAO,SACT,SAAS,KACf,MACiE,CAAC;AAErE,eAAO,MAAM,KAAK,qGAQjB,CAAC;AAEF,eAAO,MAAM,MAAM,iFAQlB,CAAC;AAEF,eAAO,MAAM,KAAK,mEAIhB,CAAC;AAKH,eAAO,MAAM,KAAK;IAChB,KAAK,QAAQ,OAAO,SAAS,SAAS,KAAG,MAAM;IAC/C,IAAI,SAAS,MAAM,SAAS,SAAS,KAAG,MAAM;IAC9C,KAAK,SAAS,MAAM,SAAS,SAAS,SAAS,YAAY,KAAG,MAAM;IAEpE,MAAM,SAAS,MAAM,MAAM,OAAO,SAAS,SAAS,KAAG,MAAM;IAE7D,KAAK,QAAQ,MAAM,SAAS,SAAS,KAAG,MAAM;CAC/C,CAAC"}
|
package/lib/verbs.js
CHANGED
|
@@ -11,6 +11,7 @@ import { coerceError, parseStack, pushSignal, safeFn, snapshotSignals, uuidV7, }
|
|
|
11
11
|
import { getConfig } from './config';
|
|
12
12
|
import { collectDevice } from './device';
|
|
13
13
|
import { onEventEmitted } from './emit-hooks';
|
|
14
|
+
import { symbolicateErrorViaMetro } from './handlers/dev-symbolicate';
|
|
14
15
|
import { currentContext, currentUserKey } from './scope';
|
|
15
16
|
import { countAssert, enqueue } from './transport';
|
|
16
17
|
/** Serialize any Error instances found in the data argument — the
|
|
@@ -97,10 +98,45 @@ const emit = (kind, opts) => {
|
|
|
97
98
|
// not cost them the crash report.
|
|
98
99
|
}
|
|
99
100
|
}
|
|
100
|
-
|
|
101
|
+
// In dev there is no uploaded source map, so without local
|
|
102
|
+
// symbolication errors land as `entry.bundle:721724`. Hold the
|
|
103
|
+
// event out of the batch until Metro's /symbolicate answers
|
|
104
|
+
// (bounded at 2 s inside, never throws) — mutating it after
|
|
105
|
+
// enqueue would race the flush timer. Release builds and
|
|
106
|
+
// error-free events enqueue synchronously as before.
|
|
107
|
+
if (isDevRuntime() && hasErrorShape(payload)) {
|
|
108
|
+
void devSymbolicateThenEnqueue(event);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
enqueue(event);
|
|
112
|
+
}
|
|
101
113
|
onEventEmitted(event);
|
|
102
114
|
return id;
|
|
103
115
|
};
|
|
116
|
+
const isDevRuntime = () => typeof __DEV__ !== 'undefined' && !!__DEV__;
|
|
117
|
+
const hasErrorShape = (payload) => {
|
|
118
|
+
if (payload.error)
|
|
119
|
+
return true;
|
|
120
|
+
return Object.values(payload.data ?? {}).some((v) => !!v && typeof v === 'object' && Array.isArray(v.stack));
|
|
121
|
+
};
|
|
122
|
+
const devSymbolicateThenEnqueue = async (event) => {
|
|
123
|
+
try {
|
|
124
|
+
const { error: err, data } = event.payload;
|
|
125
|
+
if (err)
|
|
126
|
+
await symbolicateErrorViaMetro(err);
|
|
127
|
+
for (const v of Object.values(data ?? {})) {
|
|
128
|
+
// The error-in-data convention: serialized errors riding warn/
|
|
129
|
+
// trace data get the same treatment as the headline error.
|
|
130
|
+
if (!!v && typeof v === 'object' && Array.isArray(v.stack)) {
|
|
131
|
+
await symbolicateErrorViaMetro(v);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// Symbolication is garnish; delivery is the contract.
|
|
137
|
+
}
|
|
138
|
+
enqueue(event);
|
|
139
|
+
};
|
|
104
140
|
// ── the verbs ──────────────────────────────────────────────────────
|
|
105
141
|
export const error = safeFn('error', (err, data) => {
|
|
106
142
|
const coerced = coerceError(err);
|
package/lib/verbs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verbs.js","sourceRoot":"","sources":["../src/verbs.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,oEAAoE;AACpE,uCAAuC;AACvC,EAAE;AACF,iCAAiC;AACjC,mCAAmC;AACnC,mCAAmC;AACnC,mCAAmC;AACnC,uCAAuC;AAEvC,OAAO,EACL,WAAW,EACX,UAAU,EACV,UAAU,EACV,MAAM,EACN,eAAe,EACf,MAAM,GACP,MAAM,wBAAwB,CAAC;AAWhC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"verbs.js","sourceRoot":"","sources":["../src/verbs.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goliapkg/sentori-react-native",
|
|
3
|
-
"version": "5.1.
|
|
4
|
-
"description": "Sentori SDK for React Native
|
|
3
|
+
"version": "5.1.3",
|
|
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": "Apache-2.0 OR MIT",
|
|
6
6
|
"author": "GOLIA K.K. <takagi@golia.jp> (https://golia.jp)",
|
|
7
7
|
"homepage": "https://sentori.golia.jp",
|
|
@@ -98,3 +98,9 @@ describe('transport (v1 wire)', () => {
|
|
|
98
98
|
expect(__peekQueue().length).toBe(1);
|
|
99
99
|
});
|
|
100
100
|
});
|
|
101
|
+
|
|
102
|
+
it('SDK_VERSION constant matches package.json (staleness gate)', async () => {
|
|
103
|
+
const { __sdkVersion } = await import('../transport');
|
|
104
|
+
const pkg = (await import('../../package.json')) as { default?: { version?: string }; version?: string };
|
|
105
|
+
expect(__sdkVersion()).toBe(pkg.default?.version ?? pkg.version);
|
|
106
|
+
});
|
|
@@ -89,3 +89,46 @@ describe('the five verbs', () => {
|
|
|
89
89
|
expect(__peekQueue().length).toBe(0);
|
|
90
90
|
});
|
|
91
91
|
});
|
|
92
|
+
|
|
93
|
+
describe('dev symbolication wiring', () => {
|
|
94
|
+
beforeEach(() => {
|
|
95
|
+
resetTransport();
|
|
96
|
+
resetConfig();
|
|
97
|
+
resetScope();
|
|
98
|
+
clearSignals();
|
|
99
|
+
setConfig(baseConfig);
|
|
100
|
+
startTransport();
|
|
101
|
+
});
|
|
102
|
+
afterEach(() => {
|
|
103
|
+
resetTransport();
|
|
104
|
+
resetConfig();
|
|
105
|
+
resetScope();
|
|
106
|
+
clearSignals();
|
|
107
|
+
delete (globalThis as { __DEV__?: boolean }).__DEV__;
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
it('in __DEV__ an error is enqueued asynchronously, never lost', async () => {
|
|
111
|
+
(globalThis as { __DEV__?: boolean }).__DEV__ = true;
|
|
112
|
+
const id = verbs.error(new Error('dev boom'));
|
|
113
|
+
expect(typeof id).toBe('string');
|
|
114
|
+
// Held out of the batch while Metro symbolication settles…
|
|
115
|
+
expect(__peekQueue().length).toBe(0);
|
|
116
|
+
// …and lands afterwards (no Metro in tests → original stack).
|
|
117
|
+
await new Promise((r) => setTimeout(r, 20));
|
|
118
|
+
expect(__peekQueue().length).toBe(1);
|
|
119
|
+
expect(__peekQueue()[0]?.payload.error?.message).toBe('dev boom');
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it('outside __DEV__ the error path stays fully synchronous', () => {
|
|
123
|
+
verbs.error(new Error('prod boom'));
|
|
124
|
+
expect(__peekQueue().length).toBe(1);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
it('a warn carrying error-in-data also takes the deferred path in dev', async () => {
|
|
128
|
+
(globalThis as { __DEV__?: boolean }).__DEV__ = true;
|
|
129
|
+
verbs.warn('pay.retry', { error: new TypeError('gateway 503') });
|
|
130
|
+
expect(__peekQueue().length).toBe(0);
|
|
131
|
+
await new Promise((r) => setTimeout(r, 20));
|
|
132
|
+
expect(__peekQueue().length).toBe(1);
|
|
133
|
+
});
|
|
134
|
+
});
|
package/src/transport.ts
CHANGED
|
@@ -19,7 +19,8 @@ const MAX_RETRY = 3;
|
|
|
19
19
|
const STORAGE_KEY = '@sentori/pending';
|
|
20
20
|
const MAX_PERSISTED = 1000;
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
// Pinned to package.json by a test — bump both together.
|
|
23
|
+
const SDK_VERSION = '5.1.3';
|
|
23
24
|
|
|
24
25
|
let _queue: WireEvent[] = [];
|
|
25
26
|
let _assertStats = new Map<string, AssertStat>();
|
|
@@ -306,4 +307,5 @@ export const __resetForTests = (): void => {
|
|
|
306
307
|
};
|
|
307
308
|
|
|
308
309
|
export const __peekQueue = (): readonly WireEvent[] => _queue;
|
|
310
|
+
export const __sdkVersion = (): string => SDK_VERSION;
|
|
309
311
|
export const __peekAssertStats = (): readonly AssertStat[] => [..._assertStats.values()];
|
package/src/verbs.ts
CHANGED
|
@@ -29,9 +29,12 @@ import type {
|
|
|
29
29
|
import { getConfig } from './config';
|
|
30
30
|
import { collectDevice } from './device';
|
|
31
31
|
import { onEventEmitted } from './emit-hooks';
|
|
32
|
+
import { symbolicateErrorViaMetro } from './handlers/dev-symbolicate';
|
|
32
33
|
import { currentContext, currentUserKey } from './scope';
|
|
33
34
|
import { countAssert, enqueue } from './transport';
|
|
34
35
|
|
|
36
|
+
declare const __DEV__: boolean | undefined;
|
|
37
|
+
|
|
35
38
|
/** Serialize any Error instances found in the data argument — the
|
|
36
39
|
* error-in-data convention (design.md §4): a caught-but-noteworthy
|
|
37
40
|
* exception needs no special API. One level deep is enough; nested
|
|
@@ -121,11 +124,48 @@ const emit = (kind: EventKind, opts: EmitOptions): string => {
|
|
|
121
124
|
}
|
|
122
125
|
}
|
|
123
126
|
|
|
124
|
-
|
|
127
|
+
// In dev there is no uploaded source map, so without local
|
|
128
|
+
// symbolication errors land as `entry.bundle:721724`. Hold the
|
|
129
|
+
// event out of the batch until Metro's /symbolicate answers
|
|
130
|
+
// (bounded at 2 s inside, never throws) — mutating it after
|
|
131
|
+
// enqueue would race the flush timer. Release builds and
|
|
132
|
+
// error-free events enqueue synchronously as before.
|
|
133
|
+
if (isDevRuntime() && hasErrorShape(payload)) {
|
|
134
|
+
void devSymbolicateThenEnqueue(event);
|
|
135
|
+
} else {
|
|
136
|
+
enqueue(event);
|
|
137
|
+
}
|
|
125
138
|
onEventEmitted(event);
|
|
126
139
|
return id;
|
|
127
140
|
};
|
|
128
141
|
|
|
142
|
+
const isDevRuntime = (): boolean =>
|
|
143
|
+
typeof __DEV__ !== 'undefined' && !!__DEV__;
|
|
144
|
+
|
|
145
|
+
const hasErrorShape = (payload: WirePayload): boolean => {
|
|
146
|
+
if (payload.error) return true;
|
|
147
|
+
return Object.values(payload.data ?? {}).some(
|
|
148
|
+
(v) => !!v && typeof v === 'object' && Array.isArray((v as SentoriError).stack),
|
|
149
|
+
);
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
const devSymbolicateThenEnqueue = async (event: WireEvent): Promise<void> => {
|
|
153
|
+
try {
|
|
154
|
+
const { error: err, data } = event.payload;
|
|
155
|
+
if (err) await symbolicateErrorViaMetro(err);
|
|
156
|
+
for (const v of Object.values(data ?? {})) {
|
|
157
|
+
// The error-in-data convention: serialized errors riding warn/
|
|
158
|
+
// trace data get the same treatment as the headline error.
|
|
159
|
+
if (!!v && typeof v === 'object' && Array.isArray((v as SentoriError).stack)) {
|
|
160
|
+
await symbolicateErrorViaMetro(v as SentoriError);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
} catch {
|
|
164
|
+
// Symbolication is garnish; delivery is the contract.
|
|
165
|
+
}
|
|
166
|
+
enqueue(event);
|
|
167
|
+
};
|
|
168
|
+
|
|
129
169
|
// ── the verbs ──────────────────────────────────────────────────────
|
|
130
170
|
|
|
131
171
|
export const error = safeFn('error', (err: unknown, data?: EventData): string => {
|