@goliapkg/sentori-react-native 6.4.1 → 7.0.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/README.md +25 -1
- package/android/src/main/java-core/com/sentori/SentoriConfig.kt +1 -1
- package/android/src/main/java-core/com/sentori/SentoriNativeSignals.kt +1 -2
- package/android/src/main/java-core/com/sentori/SentoriPush.kt +40 -13
- package/android/src/main/java-core/com/sentori/SentoriScope.kt +17 -1
- package/android/src/main/java-core/com/sentori/SentoriTransport.kt +30 -4
- package/android/src/test/java-core/com/sentori/SentoriPushTest.kt +1 -1
- package/android/src/test/java-core/com/sentori/SentoriTransportTest.kt +82 -0
- package/ios/core/SentoriHangWatchdog.swift +3 -3
- package/ios/core/SentoriThreadSampler.swift +3 -3
- package/lib/handlers/network.js +2 -2
- package/lib/handlers/network.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/init.js +2 -2
- package/lib/init.js.map +1 -1
- package/lib/long-task-monitor.js +1 -1
- package/lib/long-task-monitor.js.map +1 -1
- package/lib/mobile-vitals.js +2 -2
- package/lib/mobile-vitals.js.map +1 -1
- package/lib/push.d.ts +1 -1
- package/lib/push.d.ts.map +1 -1
- package/lib/push.js +47 -15
- package/lib/push.js.map +1 -1
- package/lib/rage-tap.js +2 -2
- package/lib/rage-tap.js.map +1 -1
- package/lib/scope.d.ts.map +1 -1
- package/lib/scope.js +18 -1
- package/lib/scope.js.map +1 -1
- package/lib/transport.js +2 -2
- package/lib/transport.js.map +1 -1
- package/lib/verbs.js +3 -3
- package/lib/verbs.js.map +1 -1
- package/package.json +2 -2
- package/src/__tests__/iron-rule.test.ts +79 -1
- package/src/__tests__/push.test.ts +46 -8
- package/src/handlers/network.ts +2 -2
- package/src/index.ts +1 -1
- package/src/init.ts +2 -2
- package/src/long-task-monitor.ts +1 -1
- package/src/mobile-vitals.ts +2 -2
- package/src/push.ts +51 -15
- package/src/rage-tap.tsx +2 -2
- package/src/scope.ts +19 -1
- package/src/transport.ts +2 -2
- package/src/verbs.ts +3 -3
- package/ios/PRIVACY_AND_REVIEW.md +0 -122
package/README.md
CHANGED
|
@@ -5,7 +5,12 @@ self-hosted crash + warning monitor for mobile apps. JS layer +
|
|
|
5
5
|
iOS Swift + Android Kotlin native, distributed as an Expo module
|
|
6
6
|
(works on bare RN too).
|
|
7
7
|
|
|
8
|
-
Eight
|
|
8
|
+
Eight methods on `sentori` are the whole reporting API — `init`,
|
|
9
|
+
`user`, `context`, and the five kinds `error` / `warn` / `trace` /
|
|
10
|
+
`assert` / `probe`. The package also exports `ErrorBoundary`,
|
|
11
|
+
`launch`, `pushSignal`, `registerMaskQuery`, `useTraceNavigation`,
|
|
12
|
+
`RageTapCapture` and `triggerNativeCrash`, which are wiring rather
|
|
13
|
+
than reporting.
|
|
9
14
|
|
|
10
15
|
Upgrading from 4.x? See [MIGRATION.md](./MIGRATION.md).
|
|
11
16
|
|
|
@@ -56,6 +61,25 @@ sentori.assert('total-positive', ok) // what should hold (never halts)
|
|
|
56
61
|
sentori.probe('BUG-123', data) // did that bug come back
|
|
57
62
|
```
|
|
58
63
|
|
|
64
|
+
### `init()` options
|
|
65
|
+
|
|
66
|
+
Every field of `InitConfig`, checked against the type by
|
|
67
|
+
`scripts/check-sdk-doc-options.mjs` — a new option cannot ship
|
|
68
|
+
undocumented.
|
|
69
|
+
|
|
70
|
+
| Option | Type | Required | Default |
|
|
71
|
+
|---|---|---|---|
|
|
72
|
+
| `token` | `string` | yes | — |
|
|
73
|
+
| `ingestUrl` | `string` | yes | — |
|
|
74
|
+
| `release` | `string` | no | `''` — set it, or stacks cannot symbolicate |
|
|
75
|
+
| `environment` | `string` | no | `''` |
|
|
76
|
+
| `detect` | `{ rageTap?, longFreeze?, slowColdStart?, slowApi? }` | no | rageTap / longFreeze / slowColdStart on, `slowApi` off |
|
|
77
|
+
| `replaySeconds` | `number` | no | 60 |
|
|
78
|
+
| `replayScreens` | `boolean` | no | `false` — opt-in; frames may hold user content |
|
|
79
|
+
| `backendHealthUrl` | `string` | no | — |
|
|
80
|
+
| `logLevel` | `'debug' \| 'error' \| 'info' \| 'silent' \| 'warn'` | no | `'warn'` |
|
|
81
|
+
| `beforeSend` | `(event) => event \| null` | no | — return `null` to drop |
|
|
82
|
+
|
|
59
83
|
Auto-wired (no configuration):
|
|
60
84
|
|
|
61
85
|
- JS `error` / `unhandledrejection` global hooks
|
|
@@ -9,8 +9,7 @@ package com.sentori
|
|
|
9
9
|
* Pure-Kotlin heuristics to tag a Throwable as "originated in native
|
|
10
10
|
* code" so the dashboard can show NDK crashes separately from JVM
|
|
11
11
|
* crashes. Real breakpad/crashpad integration (with minidump +
|
|
12
|
-
* dump_syms symbolicator) is
|
|
13
|
-
* `docs/design/v1-roadmap.md` #7.
|
|
12
|
+
* dump_syms symbolicator) is not implemented.
|
|
14
13
|
*/
|
|
15
14
|
object SentoriNativeOrigin {
|
|
16
15
|
|
|
@@ -261,9 +261,31 @@ object SentoriPush {
|
|
|
261
261
|
}
|
|
262
262
|
.apply()
|
|
263
263
|
// From here on, signing in or out updates the row by itself.
|
|
264
|
+
// Installing this replays a sign-in that happened while the
|
|
265
|
+
// registration was in flight — it announced to nobody, and
|
|
266
|
+
// [SentoriScope] holds it until someone is listening.
|
|
264
267
|
SentoriScope.setIdentityListener { identityChanged(appContext) }
|
|
265
268
|
}
|
|
266
269
|
|
|
270
|
+
/**
|
|
271
|
+
* One string standing for "who this device belongs to", used only
|
|
272
|
+
* to answer "has it changed since the last request".
|
|
273
|
+
*
|
|
274
|
+
* Keys sorted so that two maps holding the same pairs cannot
|
|
275
|
+
* compare unequal on iteration order alone — that would report a
|
|
276
|
+
* change that did not happen and send a registration per call of a
|
|
277
|
+
* verb a host may call on every screen, which is the cost this
|
|
278
|
+
* comparison exists to avoid. Matches `identityString` in the
|
|
279
|
+
* Swift SDK.
|
|
280
|
+
*/
|
|
281
|
+
private fun identityString(userKey: String?, traits: Map<String, Any?>?): String {
|
|
282
|
+
val rendered =
|
|
283
|
+
(traits ?: emptyMap()).entries
|
|
284
|
+
.sortedBy { it.key }
|
|
285
|
+
.joinToString("\u0001") { "${it.key}=${it.value}" }
|
|
286
|
+
return "${userKey ?: "-"}\u0000$rendered"
|
|
287
|
+
}
|
|
288
|
+
|
|
267
289
|
/**
|
|
268
290
|
* Send the registration again because the person changed.
|
|
269
291
|
*
|
|
@@ -287,7 +309,7 @@ object SentoriPush {
|
|
|
287
309
|
|
|
288
310
|
// `Sentori.user` is a verb an app may call on every screen,
|
|
289
311
|
// and one request per call is not free to a host.
|
|
290
|
-
val identity =
|
|
312
|
+
val identity = identityString(SentoriScope.userKey, SentoriScope.traits)
|
|
291
313
|
if (identity == lastSentIdentity) return@execute
|
|
292
314
|
lastSentIdentity = identity
|
|
293
315
|
|
|
@@ -454,7 +476,7 @@ object SentoriPush {
|
|
|
454
476
|
val ok =
|
|
455
477
|
try {
|
|
456
478
|
conn =
|
|
457
|
-
URL("${config.ingestUrl}/v1/push/
|
|
479
|
+
URL("${config.ingestUrl}/v1/push/devices/$handle").openConnection()
|
|
458
480
|
as HttpURLConnection
|
|
459
481
|
conn.requestMethod = "DELETE"
|
|
460
482
|
conn.setRequestProperty("Authorization", "Bearer ${config.token}")
|
|
@@ -509,20 +531,31 @@ object SentoriPush {
|
|
|
509
531
|
// No `env`: FCM is one host, with no sandbox and
|
|
510
532
|
// production split for a token to be wrong about.
|
|
511
533
|
)
|
|
534
|
+
// Read once. The body and the record of what the body carried
|
|
535
|
+
// have to describe the same person, and two reads of a value
|
|
536
|
+
// the host can change from any thread do not.
|
|
537
|
+
val userKey = SentoriScope.userKey
|
|
538
|
+
val traits = SentoriScope.traits
|
|
512
539
|
// The same identity hash every event carries, so the dashboard
|
|
513
540
|
// can address this device by the person who hit an issue.
|
|
514
541
|
// Absent until the host calls `Sentori.user`.
|
|
515
|
-
|
|
542
|
+
userKey?.let { body["userKey"] = it }
|
|
516
543
|
// Attributes of the person rather than of the device, kept
|
|
517
544
|
// apart so a build channel called "pro" cannot answer a send
|
|
518
545
|
// aimed at the pro plan. Null leaves the row's traits alone;
|
|
519
546
|
// an empty map clears them, which is what signing out sends.
|
|
520
|
-
|
|
547
|
+
traits?.let { body["traits"] = it }
|
|
548
|
+
// What this request puts on the wire, recorded before it goes.
|
|
549
|
+
// [identityChanged] reads it back to decide whether the person
|
|
550
|
+
// has changed since — including while this very request was in
|
|
551
|
+
// flight, which is the window a host hits by calling
|
|
552
|
+
// `Sentori.user` right after starting push registration.
|
|
553
|
+
lastSentIdentity = identityString(userKey, traits)
|
|
521
554
|
|
|
522
555
|
var conn: HttpURLConnection? = null
|
|
523
556
|
return try {
|
|
524
557
|
conn =
|
|
525
|
-
URL("${config.ingestUrl}/v1/push/
|
|
558
|
+
URL("${config.ingestUrl}/v1/push/devices").openConnection() as HttpURLConnection
|
|
526
559
|
conn.requestMethod = "POST"
|
|
527
560
|
conn.setRequestProperty("Content-Type", "application/json")
|
|
528
561
|
conn.setRequestProperty("Authorization", "Bearer ${config.token}")
|
|
@@ -542,15 +575,9 @@ object SentoriPush {
|
|
|
542
575
|
// The handle is the `device_tokens` row id, a bare
|
|
543
576
|
// uuid. The RN SDK parsed it as an `ipt_*` string no
|
|
544
577
|
// server has ever returned.
|
|
545
|
-
//
|
|
546
|
-
// server shipped under. Reading the new one first and
|
|
547
|
-
// falling back matters in one direction that is easy
|
|
548
|
-
// to miss: a self-hosted deployment upgrades on its
|
|
549
|
-
// own schedule, so an SDK newer than its server is an
|
|
550
|
-
// ordinary state, and an SDK that only knew the new
|
|
551
|
-
// name would fail every registration against it.
|
|
578
|
+
// The address, by its one name.
|
|
552
579
|
val json = JSONObject(text)
|
|
553
|
-
val handle = json.optString("spToken")
|
|
580
|
+
val handle = json.optString("spToken")
|
|
554
581
|
if (handle.isNullOrEmpty()) {
|
|
555
582
|
Result.Failure(Failure.SERVER_REJECTED, "server returned no device token id")
|
|
556
583
|
} else {
|
|
@@ -29,10 +29,24 @@ object SentoriScope {
|
|
|
29
29
|
*/
|
|
30
30
|
@Volatile private var onIdentityChange: (() -> Unit)? = null
|
|
31
31
|
|
|
32
|
+
/** An identity change announced with no listener installed. */
|
|
33
|
+
@Volatile private var missedAnnounce = false
|
|
34
|
+
|
|
32
35
|
/** Register interest in identity changes. Only push does. */
|
|
33
36
|
@JvmStatic
|
|
34
37
|
fun setIdentityListener(listener: (() -> Unit)?) {
|
|
35
38
|
onIdentityChange = listener
|
|
39
|
+
// A change announced while nobody was listening was dropped,
|
|
40
|
+
// and nothing announces it again. Push installs this listener
|
|
41
|
+
// only once a registration has landed, so a host that signs
|
|
42
|
+
// someone in while that request is in flight reached nobody.
|
|
43
|
+
//
|
|
44
|
+
// A flag, not a queue: identity is a current value rather than
|
|
45
|
+
// a stream, so replaying the latest is the whole of it.
|
|
46
|
+
if (listener != null && missedAnnounce) {
|
|
47
|
+
missedAnnounce = false
|
|
48
|
+
runCatching { listener.invoke() }
|
|
49
|
+
}
|
|
36
50
|
}
|
|
37
51
|
|
|
38
52
|
/**
|
|
@@ -63,7 +77,8 @@ object SentoriScope {
|
|
|
63
77
|
}
|
|
64
78
|
// Outside the lock: a listener that registers a device must
|
|
65
79
|
// not be holding this while it makes a request.
|
|
66
|
-
|
|
80
|
+
val listener = onIdentityChange
|
|
81
|
+
if (listener == null) missedAnnounce = true else runCatching { listener.invoke() }
|
|
67
82
|
}
|
|
68
83
|
|
|
69
84
|
/** Merge keys into the ambient context. Later calls win per key. */
|
|
@@ -103,5 +118,6 @@ object SentoriScope {
|
|
|
103
118
|
_context.clear()
|
|
104
119
|
}
|
|
105
120
|
onIdentityChange = null
|
|
121
|
+
missedAnnounce = false
|
|
106
122
|
}
|
|
107
123
|
}
|
|
@@ -364,20 +364,44 @@ object SentoriTransport {
|
|
|
364
364
|
return File(dir, "pending-events.json")
|
|
365
365
|
}
|
|
366
366
|
|
|
367
|
+
/**
|
|
368
|
+
* The spill is the last place a failed batch can go, so every way it
|
|
369
|
+
* can fail counts the batch instead of returning.
|
|
370
|
+
*
|
|
371
|
+
* Both used to be silent: no spill directory — which is the
|
|
372
|
+
* documented in-memory-only mode, where every failed send loses its
|
|
373
|
+
* batch — and a write that throws, a full disk being the ordinary
|
|
374
|
+
* cause. The events had already left the queue, so they existed
|
|
375
|
+
* nowhere, and `dropped` stayed put: the next envelope reported the
|
|
376
|
+
* gap as quiet. A full disk still must not become the host's
|
|
377
|
+
* problem, and now it is not silent either.
|
|
378
|
+
*/
|
|
367
379
|
private fun persist(events: List<Map<String, Any?>>) {
|
|
368
|
-
val file = spillFile() ?: return
|
|
380
|
+
val file = spillFile() ?: return countDropped(events.size)
|
|
369
381
|
try {
|
|
370
382
|
val all = readPersisted().toMutableList()
|
|
371
383
|
all.addAll(events)
|
|
372
384
|
// Newest wins: the file has to stop growing on a device
|
|
373
|
-
// that is offline for a week.
|
|
374
|
-
|
|
385
|
+
// that is offline for a week. What goes counts, the same as
|
|
386
|
+
// the in-memory cap.
|
|
387
|
+
var trimmed = 0
|
|
388
|
+
while (all.size > MAX_PERSISTED) {
|
|
389
|
+
all.removeAt(0)
|
|
390
|
+
trimmed += 1
|
|
391
|
+
}
|
|
375
392
|
file.writeText(toJson(all).toString())
|
|
393
|
+
countDropped(trimmed)
|
|
376
394
|
} catch (_: Throwable) {
|
|
377
|
-
|
|
395
|
+
countDropped(events.size)
|
|
378
396
|
}
|
|
379
397
|
}
|
|
380
398
|
|
|
399
|
+
/** Count a loss so the next envelope carries it as `droppedEvents`. */
|
|
400
|
+
private fun countDropped(n: Int) {
|
|
401
|
+
if (n <= 0) return
|
|
402
|
+
synchronized(lock) { dropped += n }
|
|
403
|
+
}
|
|
404
|
+
|
|
381
405
|
private fun readPersisted(): List<Map<String, Any?>> {
|
|
382
406
|
val file = spillFile() ?: return emptyList()
|
|
383
407
|
if (!file.exists()) return emptyList()
|
|
@@ -465,6 +489,8 @@ object SentoriTransport {
|
|
|
465
489
|
*/
|
|
466
490
|
internal fun peekDelivered(): Int = synchronized(lock) { delivered }
|
|
467
491
|
|
|
492
|
+
internal fun peekDropped(): Int = synchronized(lock) { dropped }
|
|
493
|
+
|
|
468
494
|
/**
|
|
469
495
|
* How many blocks are still waiting on events. Without this a test
|
|
470
496
|
* cannot tell "discarded because the server refused it" from "has
|
|
@@ -525,7 +525,7 @@ class SentoriPushTest {
|
|
|
525
525
|
}
|
|
526
526
|
bodies.add(String(body, 0, read, Charsets.UTF_8))
|
|
527
527
|
val payload =
|
|
528
|
-
"""{"spToken":"019ff000-0000-7000-8000-000000000001","
|
|
528
|
+
"""{"spToken":"019ff000-0000-7000-8000-000000000001","isNew":false}"""
|
|
529
529
|
c.getOutputStream().write(
|
|
530
530
|
("HTTP/1.1 202 Accepted\r\nContent-Type: application/json\r\n" +
|
|
531
531
|
"Content-Length: ${payload.toByteArray().size}\r\n" +
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
// GENERATED MIRROR — do not edit.
|
|
2
|
+
// Source of truth: sdk/native/android/src/test/java/com/sentori/SentoriTransportTest.kt
|
|
3
|
+
// Run `node scripts/sync-native-core.mjs` after editing it.
|
|
4
|
+
package com.sentori
|
|
5
|
+
|
|
6
|
+
import org.junit.After
|
|
7
|
+
import org.junit.Assert.assertEquals
|
|
8
|
+
import org.junit.Assert.assertTrue
|
|
9
|
+
import org.junit.Before
|
|
10
|
+
import org.junit.Test
|
|
11
|
+
import org.junit.runner.RunWith
|
|
12
|
+
import org.robolectric.RobolectricTestRunner
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* The spill is the last place a failed batch can go. When it cannot be
|
|
16
|
+
* written the events are gone, and the only honest record of that is the
|
|
17
|
+
* counter the next envelope carries — the same one the in-memory cap
|
|
18
|
+
* uses.
|
|
19
|
+
*
|
|
20
|
+
* Deliberately the same assertion as
|
|
21
|
+
* `testASpillThatCannotBeWrittenIsCountedRatherThanLost` in
|
|
22
|
+
* `SentoriTransportTests.swift`: the two platforms disagreeing about
|
|
23
|
+
* what a dropped event is would show up as a dashboard that counts one
|
|
24
|
+
* fleet and not the other.
|
|
25
|
+
*/
|
|
26
|
+
@RunWith(RobolectricTestRunner::class)
|
|
27
|
+
class SentoriTransportTest {
|
|
28
|
+
|
|
29
|
+
@Before
|
|
30
|
+
fun setUp() {
|
|
31
|
+
SentoriTransport.resetForTests()
|
|
32
|
+
SentoriConfig.resetForTests()
|
|
33
|
+
SentoriScope.clear()
|
|
34
|
+
SentoriSignalRing.clear()
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@After
|
|
38
|
+
fun tearDown() {
|
|
39
|
+
SentoriTransport.resetForTests()
|
|
40
|
+
SentoriConfig.resetForTests()
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
private fun waitUntil(what: String, timeoutMs: Long = 10_000, condition: () -> Boolean) {
|
|
44
|
+
val deadline = System.currentTimeMillis() + timeoutMs
|
|
45
|
+
while (!condition() && System.currentTimeMillis() < deadline) Thread.sleep(50)
|
|
46
|
+
assertTrue(
|
|
47
|
+
"$what — not after ${timeoutMs / 1000}s; persisted: " +
|
|
48
|
+
"${SentoriTransport.peekPersisted().size}, " +
|
|
49
|
+
"queued: ${SentoriTransport.peekQueue().size}, " +
|
|
50
|
+
"dropped: ${SentoriTransport.peekDropped()}",
|
|
51
|
+
condition(),
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@Test
|
|
56
|
+
fun aSpillThatCannotBeWrittenIsCountedRatherThanLost() {
|
|
57
|
+
SentoriConfig.set(
|
|
58
|
+
SentoriConfig(
|
|
59
|
+
token = "st_test",
|
|
60
|
+
ingestUrl = "http://127.0.0.1:9",
|
|
61
|
+
release = "app@1.0.0",
|
|
62
|
+
environment = "test",
|
|
63
|
+
),
|
|
64
|
+
)
|
|
65
|
+
// Force the failure rather than arranging for it, and start
|
|
66
|
+
// without a spill directory: that is the in-memory-only mode,
|
|
67
|
+
// where a failed batch has nowhere to go.
|
|
68
|
+
SentoriTransport.forcedOutcomeForTests = 2 // failed
|
|
69
|
+
SentoriTransport.start(null)
|
|
70
|
+
repeat(3) { SentoriTransport.enqueue(mapOf("kind" to "error", "seq" to it)) }
|
|
71
|
+
SentoriTransport.flush()
|
|
72
|
+
|
|
73
|
+
waitUntil("the batch the spill could not take is counted") {
|
|
74
|
+
SentoriTransport.peekDropped() == 3
|
|
75
|
+
}
|
|
76
|
+
assertEquals(
|
|
77
|
+
"and nothing was written, which is the premise",
|
|
78
|
+
0,
|
|
79
|
+
SentoriTransport.peekPersisted().size,
|
|
80
|
+
)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
@@ -108,9 +108,9 @@ import Foundation
|
|
|
108
108
|
let release = (cfg["release"] as? String) ?? "unknown"
|
|
109
109
|
let environment = (cfg["environment"] as? String) ?? "prod"
|
|
110
110
|
|
|
111
|
-
//
|
|
112
|
-
//
|
|
113
|
-
// vm_read_overwrite
|
|
111
|
+
// Try the Mach-based main-thread sampler first. It walks
|
|
112
|
+
// main's frame pointer chain via thread_get_state +
|
|
113
|
+
// vm_read_overwrite. Returns [] on
|
|
114
114
|
// non-arm64 platforms or if installMainThreadHandle was never
|
|
115
115
|
// called from main; we then fall back to this thread's own
|
|
116
116
|
// stack — biased toward dispatch machinery but better than
|
|
@@ -5,10 +5,10 @@ import Foundation
|
|
|
5
5
|
|
|
6
6
|
/// Captures the main thread's program-counter chain for hang reporting.
|
|
7
7
|
///
|
|
8
|
-
///
|
|
8
|
+
/// Used by `SentoriHangWatchdog` to fill an `anr` event's
|
|
9
9
|
/// `frames[].instructionAddress`. Server-side symbolicates against the
|
|
10
|
-
/// uploaded dSYM
|
|
11
|
-
///
|
|
10
|
+
/// uploaded dSYM. Only public, documented Mach APIs are used, and no
|
|
11
|
+
/// frame is read from any thread but main.
|
|
12
12
|
///
|
|
13
13
|
/// arm64-only. On non-arm64 (Intel Mac simulators) `captureMainThreadFrames`
|
|
14
14
|
/// returns an empty array; the watchdog falls back to its previous
|
package/lib/handlers/network.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Network instrumentation — v1 role: feed the signal ring (`http`
|
|
2
|
-
// signals) and detect the slow_api warn scenario (
|
|
3
|
-
//
|
|
2
|
+
// signals) and detect the slow_api warn scenario (category C:
|
|
3
|
+
// 「转圈不完」server-side flavour). The span/breadcrumb
|
|
4
4
|
// machinery this file used to drive is gone with the APM vocabulary.
|
|
5
5
|
//
|
|
6
6
|
// Mini-spec (slow_api): a completed request slower than 3 s emits
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/handlers/network.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/handlers/network.ts"],"names":[],"mappings":"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"}
|
package/lib/index.js
CHANGED
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,uEAAuE;AACvE,oEAAoE;AACpE,8CAA8C;AAC9C,EAAE;AACF,gEAAgE;AAChE,oEAAoE;AACpE,qEAAqE;AACrE,8DAA8D;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAShC,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,2DAA2D;IAC3D,IAAI,EAAE,CAAC,MAAkB,EAAQ,EAAE;QACjC,IAAI,CAAC,MAAM,CAAC,CAAC;IACf,CAAC;IACD;;4CAEwC;IACxC,IAAI,EAAE,CAAC,CAAc,EAAQ,EAAE;QAC7B,OAAO,CAAC,CAAC,CAAC,CAAC;IACb,CAAC;IACD;8CAC0C;IAC1C,OAAO,EAAE,CAAC,KAA8B,EAAQ,EAAE;QAChD,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED;sEACkE;IAClE,KAAK,EAAE,CAAC,GAAY,EAAE,IAAgB,EAAU,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;IACzE,kDAAkD;IAClD,IAAI,EAAE,CAAC,IAAY,EAAE,IAAgB,EAAU,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;IACxE;6DACyD;IACzD,KAAK,EAAE,CAAC,IAAY,EAAE,IAAgB,EAAE,IAAmB,EAAU,EAAE,CACrE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC/B;;mDAE+C;IAC/C,MAAM,EAAE,CAAC,IAAY,EAAE,EAAW,EAAE,IAAgB,EAAU,EAAE,CAC9D,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC;IAC9B;;qCAEiC;IACjC,KAAK,EAAE,CAAC,GAAW,EAAE,IAAgB,EAAU,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC;CACzE,CAAC;AAEF,eAAe,OAAO,CAAC;AAEvB,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,6DAA6D;AAC7D,oEAAoE;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,kEAAkE;AAClE,qEAAqE;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAA0B,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAoB1E,mDAAmD;AACnD,OAAO,EACL,WAAW,EAEX,WAAW,EAEX,eAAe,GAChB,MAAM,wBAAwB,CAAC;AAEhC,mEAAmE;AACnE,+DAA+D;AAC/D,oEAAoE;AACpE,6DAA6D;AAC7D,EAAE;AACF,+CAA+C;AAC/C,mEAAmE;AACnE,iEAAiE;AACjE,wDAAwD;AACxD,yDAAyD;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,qEAAqE;AACrE,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC"}
|
package/lib/init.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// sentori.init(config) — the single configuration entry point
|
|
2
|
-
//
|
|
2
|
+
// Synchronous, never throws; a bad config degrades
|
|
3
3
|
// every verb to a no-op with one console.warn, never a crash
|
|
4
4
|
// (failure-isolation iron rule).
|
|
5
5
|
import { safeFn, setLogLevel } from '@goliapkg/sentori-core';
|
|
@@ -55,7 +55,7 @@ export const init = safeFn('init', (config) => {
|
|
|
55
55
|
installPromiseHandler();
|
|
56
56
|
installNetworkHandler();
|
|
57
57
|
installLifecycleHandler();
|
|
58
|
-
// Warn-scenario detectors
|
|
58
|
+
// Warn-scenario detectors, the minimum set. rage_tap
|
|
59
59
|
// rides the RageTapCapture component; the rest start here.
|
|
60
60
|
if (config.detect?.longFreeze !== false)
|
|
61
61
|
startLongTaskMonitor();
|
package/lib/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"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"}
|
package/lib/long-task-monitor.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"long-task-monitor.js","sourceRoot":"","sources":["../src/long-task-monitor.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"long-task-monitor.js","sourceRoot":"","sources":["../src/long-task-monitor.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,qCAAqC;AACrC,EAAE;AACF,kEAAkE;AAClE,8DAA8D;AAC9D,8DAA8D;AAC9D,oEAAoE;AACpE,gEAAgE;AAChE,6BAA6B;AAC7B,EAAE;AACF,gEAAgE;AAChE,oEAAoE;AACpE,8DAA8D;AAC9D,uCAAuC;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAC5B,MAAM,mBAAmB,GAAG,GAAG,CAAC,CAAC,8BAA8B;AAC/D,MAAM,iBAAiB,GAAG,KAAK,CAAC,CAAC,4BAA4B;AAC7D,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,IAAI,MAAM,GAA0C,IAAI,CAAC;AACzD,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,IAAI,gBAAgB,GAAG,CAAC,CAAC;AACzB,IAAI,gBAAgB,GAAG,CAAC,CAAC;AAEzB,MAAM,UAAU,oBAAoB;IAClC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO;IAC5B,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,gBAAgB,GAAG,SAAS,CAAC;IAC7B,gBAAgB,GAAG,CAAC,CAAC;IACrB,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAC5C,MAA4C,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,aAAa,CAAC,MAAM,CAAC,CAAC;QACtB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,IAAI;IACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,GAAG,GAAG,SAAS,CAAC;IAChC,SAAS,GAAG,GAAG,CAAC;IAChB,MAAM,GAAG,GAAG,OAAO,GAAG,gBAAgB,CAAC;IACvC,IAAI,GAAG,IAAI,mBAAmB;QAAE,OAAO;IAEvC,UAAU,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACrD,IAAI,GAAG,IAAI,iBAAiB;QAAE,OAAO;IAErC,IAAI,GAAG,GAAG,gBAAgB,IAAI,MAAM,EAAE,CAAC;QACrC,gBAAgB,GAAG,GAAG,CAAC;QACvB,gBAAgB,GAAG,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,gBAAgB,IAAI,iBAAiB;QAAE,OAAO;IAClD,gBAAgB,IAAI,CAAC,CAAC;IAEtB,YAAY,CACV,aAAa,EACb,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,EAC3B,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAC7C,CAAC;AACJ,CAAC;AAED,iBAAiB;AACjB,MAAM,UAAU,8BAA8B;IAC5C,mBAAmB,EAAE,CAAC;IACtB,SAAS,GAAG,CAAC,CAAC;IACd,gBAAgB,GAAG,CAAC,CAAC;IACrB,gBAAgB,GAAG,CAAC,CAAC;AACvB,CAAC"}
|
package/lib/mobile-vitals.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// slow_cold_start — detected warn scenario (
|
|
2
|
-
//
|
|
1
|
+
// slow_cold_start — detected warn scenario (category C:
|
|
2
|
+
// 「启动过慢」).
|
|
3
3
|
//
|
|
4
4
|
// Mini-spec: the native side measures launch → JS-ready (iOS
|
|
5
5
|
// mach_absolute_time / Android Process.getStartElapsedRealtime);
|
package/lib/mobile-vitals.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mobile-vitals.js","sourceRoot":"","sources":["../src/mobile-vitals.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"mobile-vitals.js","sourceRoot":"","sources":["../src/mobile-vitals.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,WAAW;AACX,EAAE;AACF,6DAA6D;AAC7D,iEAAiE;AACjE,gEAAgE;AAChE,oEAAoE;AACpE,iEAAiE;AACjE,EAAE;AACF,oEAAoE;AACpE,6DAA6D;AAC7D,kEAAkE;AAClE,kEAAkE;AAClE,kEAAkE;AAClE,kEAAkE;AAClE,iDAAiD;AACjD,EAAE;AACF,+DAA+D;AAC/D,UAAU;AAEV,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAEjC,IAAI,YAAY,GAAkB,IAAI,CAAC;AACvC,IAAI,mBAAmB,GAAG,KAAK,CAAC;AAChC,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAE/B,gEAAgE;AAChE,MAAM,UAAU,cAAc;IAC5B,IAAI,kBAAkB;QAAE,OAAO,YAAY,CAAC;IAC5C,kBAAkB,GAAG,IAAI,CAAC;IAC1B,IAAI,CAAC;QACH,YAAY,GAAG,oBAAoB,EAAE,CAAC;QACtC,mBAAmB,GAAG,2BAA2B,EAAE,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;6CAC6C;AAC7C,MAAM,UAAU,oBAAoB;IAClC,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,cAAc,CAAC,aAAsB;IACnD,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IAC5B,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO;IACxB,MAAM,SAAS,GAAG,oBAAoB,EAAE,CAAC;IACzC,UAAU,CAAC,WAAW,EAAE;QACtB,KAAK,EAAE,YAAY;QACnB,EAAE;QACF,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC1C,CAAC,CAAC;IACH,IAAI,aAAa,IAAI,CAAC,SAAS,IAAI,EAAE,GAAG,kBAAkB,EAAE,CAAC;QAC3D,YAAY,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC5F,CAAC;AACH,CAAC;AAED,iBAAiB;AACjB,MAAM,UAAU,2BAA2B;IACzC,kBAAkB,GAAG,KAAK,CAAC;IAC3B,YAAY,GAAG,IAAI,CAAC;IACpB,mBAAmB,GAAG,KAAK,CAAC;AAC9B,CAAC"}
|
package/lib/push.d.ts
CHANGED
|
@@ -80,7 +80,7 @@ export type PushNotificationPayload = {
|
|
|
80
80
|
*/
|
|
81
81
|
export declare function register(opts?: PushRegisterOptions): Promise<PushRegisterResult>;
|
|
82
82
|
/**
|
|
83
|
-
* Revoke the cached handle (DELETE /v1/push/
|
|
83
|
+
* Revoke the cached handle (DELETE /v1/push/devices/{ipt}) +
|
|
84
84
|
* unregister locally. Idempotent — repeat calls are no-ops.
|
|
85
85
|
*/
|
|
86
86
|
export declare function unregister(): Promise<void>;
|
package/lib/push.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"AAqCA,OAAO,EAEL,aAAa,EAEb,qBAAqB,EAEtB,MAAM,aAAa,CAAA;AAsCpB,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;;;;mEAM+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC;kDAC8C;IAC9C,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAA;IACtD,sDAAsD;IACtD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/B;iEAC6D;IAC7D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B;;yBAEqB;IACrB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;IAC9B;;;kBAGc;IACd,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,mBAAmB,GAC3B,iBAAiB,GACjB,cAAc,GACd,mBAAmB,GACnB,iBAAiB,GACjB,eAAe,CAAA;AAEnB;;;;mCAImC;AACnC,MAAM,MAAM,kBAAkB,GAC1B;IACE,EAAE,EAAE,IAAI,CAAA;IACR;;oDAEgD;IAChD,GAAG,EAAE,MAAM,CAAA;CACZ,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAA;AAE/D,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../src/push.ts"],"names":[],"mappings":"AAqCA,OAAO,EAEL,aAAa,EAEb,qBAAqB,EAEtB,MAAM,aAAa,CAAA;AAsCpB,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;;;;mEAM+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC;kDAC8C;IAC9C,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,uBAAuB,KAAK,IAAI,CAAA;IACtD,sDAAsD;IACtD,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IAC/B;iEAC6D;IAC7D,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAC/B;;yBAEqB;IACrB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;IAC9B;;;kBAGc;IACd,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,mBAAmB,GAC3B,iBAAiB,GACjB,cAAc,GACd,mBAAmB,GACnB,iBAAiB,GACjB,eAAe,CAAA;AAEnB;;;;mCAImC;AACnC,MAAM,MAAM,kBAAkB,GAC1B;IACE,EAAE,EAAE,IAAI,CAAA;IACR;;oDAEgD;IAChD,GAAG,EAAE,MAAM,CAAA;CACZ,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAA;AAE/D,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,QAAQ,CAAC,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAmD1F;AAuED;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBhD;AAED;4DAC4D;AAC5D,wBAAgB,YAAY,IAAI,IAAI,GAAG,MAAM,CAE5C;AAED,sDAAsD;AACtD,OAAO,EAAE,aAAa,IAAI,SAAS,EAAE,qBAAqB,IAAI,iBAAiB,EAAE,CAAA;AAySjF;oEACoE;AACpE,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAEhE;AA4HD;;+DAE+D;AAC/D,wBAAgB,eAAe,IAAI,IAAI,CAWtC;AAID;qCACqC;AACrC,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,CAEnF"}
|