@mikeci/pos-analytics-replay 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/README.md +35 -70
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/recorder.d.ts +2 -0
- package/dist/recorder.d.ts.map +1 -1
- package/dist/recorder.js +4 -0
- package/dist/recorder.js.map +1 -1
- package/dist/uploader.d.ts +123 -0
- package/dist/uploader.d.ts.map +1 -0
- package/dist/uploader.js +329 -0
- package/dist/uploader.js.map +1 -0
- package/package.json +2 -2
- package/dist/protocol.d.ts +0 -36
- package/dist/protocol.d.ts.map +0 -1
- package/dist/protocol.js +0 -58
- package/dist/protocol.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
- Cần `@mikeci/pos-replay-protocol` ^0.2.1 (thêm `applyRecord`, `cloneScene`; kiểm tra kích thước chunk nhanh hơn).
|
|
6
|
+
- **BREAKING:** gỡ API wireframe cũ (`maskTree`, `applyFrames`, `buildChunk`, `shouldMask`, `maskText`, kiểu `WireNode`/`WireframeFrame`) và mã chụp native `WireframeCapture` (Swift/Kotlin). Collector không còn nhận `POST /v1/replay` (trả `410`). Dùng `ReplayRecorder` + `ReplayUploader`; mask do `maskNode` của `@mikeci/pos-replay-protocol`.
|
|
7
|
+
- Thêm `ReplayUploader`: hàng đợi chunk bền vững trên AsyncStorage (mỗi chunk một khóa, tránh giới hạn 2 MB mỗi dòng trên Android), gửi theo thứ tự tới `POST /v1/replay/chunks`, retry có backoff và tôn trọng `Retry-After`, bỏ chunk server không bao giờ nhận (4xx), dừng và xóa hàng đợi khi server báo `replay_disabled`, báo `POST /v1/replay/end`, và lưu `GET /v1/sdk/config` để mở app offline vẫn biết có được ghi hay không.
|
|
8
|
+
- `uploader.attach(recorder)` tự `tick()`, chuyển chunk từ recorder sang hàng đợi và gửi định kỳ; `background()` / `stop()` đóng chunk và gửi ngay.
|
|
9
|
+
- `ReplayRecorder.settled()` chờ các lần đóng chunk chạy ngầm xong.
|
|
10
|
+
|
|
11
|
+
## 0.2.1
|
|
12
|
+
|
|
13
|
+
- Phát hành lại 0.2.0. Bản 0.2.0 bị npm giữ ở trạng thái staged và không cài được.
|
|
14
|
+
|
|
3
15
|
## 0.2.0
|
|
4
16
|
|
|
5
17
|
- Ghi patch, lifecycle gap, privacy boundary và viewport thật thay vì khung 390×844 cố định.
|
package/README.md
CHANGED
|
@@ -1,92 +1,57 @@
|
|
|
1
1
|
# @mikeci/pos-analytics-replay
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Session replay cho app React Native: ghi cây component (không quay video, không gửi bitmap), che dữ liệu nhạy cảm, lưu hàng đợi trên máy và gửi lên collector theo protocol V2 (`POST /v1/replay/chunks`).
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
npm install @mikeci/pos-analytics-replay
|
|
7
7
|
```
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
> **Đã gỡ định dạng wireframe cũ.** `maskTree`, `applyFrames`, `buildChunk`, `shouldMask`, `maskText` và mã chụp native `WireframeCapture` (Swift/Kotlin) không còn. Collector trả `410 replay_legacy_removed` cho `POST /v1/replay`. App đang dùng định dạng cũ cần chuyển sang `ReplayRecorder` + `ReplayUploader` bên dưới.
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
`maskTree` đi qua cả cây. Node bị mask có `masked: true` và `text` thành `••••`. Node không có text giữ nguyên. Node đã đặt `masked: true` cũng bị che, kể cả khi type không nằm trong danh sách trên.
|
|
14
|
-
|
|
15
|
-
```ts
|
|
16
|
-
import { maskTree, shouldMask } from "@mikeci/pos-analytics-replay";
|
|
17
|
-
|
|
18
|
-
shouldMask("TextInput");
|
|
19
|
-
shouldMask("Text", { analyticsMask: true });
|
|
20
|
-
shouldMask("View");
|
|
21
|
-
|
|
22
|
-
const [field] = maskTree([
|
|
23
|
-
{ id: "phone", type: "TextInput", x: 0, y: 0, w: 200, h: 40, text: "0901234567" },
|
|
24
|
-
]);
|
|
25
|
-
field?.text;
|
|
26
|
-
// "••••"
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
`maskText` chỉ đổi một chuỗi. Chuỗi rỗng hoặc `undefined` được trả lại nguyên.
|
|
30
|
-
|
|
31
|
-
## Ghép frame
|
|
32
|
-
|
|
33
|
-
Mỗi frame là một snapshot hoặc một diff.
|
|
34
|
-
|
|
35
|
-
| Field | Ý nghĩa |
|
|
36
|
-
| --- | --- |
|
|
37
|
-
| `seq` | Số thứ tự frame |
|
|
38
|
-
| `ts` | Thời điểm ISO |
|
|
39
|
-
| `full` | `true` thì thay toàn bộ cây hiện tại |
|
|
40
|
-
| `nodes` | Node thêm hoặc cập nhật |
|
|
41
|
-
| `removed` | Id cần xóa khỏi cây hiện tại |
|
|
42
|
-
|
|
43
|
-
`applyFrames` áp dụng lần lượt, mask từng frame, rồi trả về các node gốc theo thứ tự xuất hiện. Frame `full: true` xóa trạng thái trước đó. Cùng một id được cập nhật tại chỗ và không đổi vị trí trong danh sách.
|
|
44
|
-
|
|
45
|
-
```ts
|
|
46
|
-
import { applyFrames } from "@mikeci/pos-analytics-replay";
|
|
11
|
+
## Recorder
|
|
47
12
|
|
|
48
|
-
|
|
49
|
-
{
|
|
50
|
-
seq: 1,
|
|
51
|
-
ts: "2026-09-25T00:00:00.000Z",
|
|
52
|
-
full: true,
|
|
53
|
-
nodes: [
|
|
54
|
-
{ id: "root", type: "View", x: 0, y: 0, w: 100, h: 40 },
|
|
55
|
-
{ id: "title", type: "Text", x: 0, y: 40, w: 80, h: 20, text: "Home" },
|
|
56
|
-
],
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
seq: 2,
|
|
60
|
-
ts: "2026-09-25T00:00:01.000Z",
|
|
61
|
-
full: false,
|
|
62
|
-
removed: ["title"],
|
|
63
|
-
nodes: [{ id: "next", type: "Text", x: 0, y: 40, w: 80, h: 20, text: "Next" }],
|
|
64
|
-
},
|
|
65
|
-
]);
|
|
66
|
-
```
|
|
13
|
+
`ReplayRecorder` ghi snapshot, patch và tap/scroll theo protocol mới. Hàng đợi replay tách khỏi hàng đợi event. Input và component nhạy cảm được mask trước khi vào chunk. `ReplayScreen`, `ReplayView`, `ReplayButton`, `ReplayText` và `ReplayInput` đăng ký node. Sampling và kill switch lấy từ `GET /v1/sdk/config`.
|
|
67
14
|
|
|
68
|
-
Kết quả là `root` rồi `next`.
|
|
69
15
|
|
|
70
|
-
##
|
|
16
|
+
## Gửi replay lên collector
|
|
71
17
|
|
|
72
|
-
`
|
|
18
|
+
`ReplayUploader` lưu chunk xuống máy và gửi lên collector. Hàng đợi nằm trong AsyncStorage nên không mất khi app bị kill hoặc mất mạng.
|
|
73
19
|
|
|
74
20
|
```ts
|
|
75
|
-
import
|
|
21
|
+
import AsyncStorage from "@react-native-async-storage/async-storage";
|
|
22
|
+
import { ReplayRecorder, ReplayUploader, recorderOptionsFromConfig } from "@mikeci/pos-analytics-replay";
|
|
76
23
|
|
|
77
|
-
const
|
|
24
|
+
const uploader = new ReplayUploader({
|
|
25
|
+
endpoint: "https://ingest.example.com",
|
|
78
26
|
appId: "veso24h",
|
|
27
|
+
writeKey: CLIENT_WRITE_KEY,
|
|
79
28
|
environment: "production",
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
ts: "2026-09-25T00:00:00.000Z",
|
|
83
|
-
frame,
|
|
29
|
+
storage: AsyncStorage,
|
|
30
|
+
// compress: async (json) => pako.gzip(json), // tùy chọn: gửi gzip để tiết kiệm dữ liệu di động
|
|
84
31
|
});
|
|
85
|
-
```
|
|
86
32
|
|
|
87
|
-
|
|
33
|
+
// Chưa có mạng và chưa có cấu hình đã lưu thì trả enabled=false: không ghi, event vẫn gửi bình thường.
|
|
34
|
+
const config = await uploader.loadConfig();
|
|
35
|
+
const recorder = new ReplayRecorder({
|
|
36
|
+
replayId,
|
|
37
|
+
sessionId,
|
|
38
|
+
viewport,
|
|
39
|
+
...recorderOptionsFromConfig(config),
|
|
40
|
+
});
|
|
41
|
+
const replay = uploader.attach(recorder); // tự tick() mỗi 150 ms, gửi mỗi 5 giây
|
|
88
42
|
|
|
89
|
-
|
|
43
|
+
// AppState: 'background' -> await replay.background(); 'active' -> replay.foreground();
|
|
44
|
+
// Rời session: await replay.stop(); // gửi nốt hàng đợi và POST /v1/replay/end
|
|
45
|
+
```
|
|
90
46
|
|
|
91
|
-
|
|
47
|
+
Cách hoạt động:
|
|
48
|
+
|
|
49
|
+
| Tình huống | Hành vi |
|
|
50
|
+
| --- | --- |
|
|
51
|
+
| Mất mạng, `429`, `5xx` | Giữ chunk, thử lại theo backoff 5s → 15s → 30s → 1p → 5p (có jitter), dùng `Retry-After` nếu server gửi. Dừng ở chunk lỗi để giữ thứ tự. Quá `maxAttempts` (8) thì bỏ chunk |
|
|
52
|
+
| `400`, `401`, `409`, `413` | Bỏ chunk đó và gửi tiếp chunk sau (gửi lại cũng không thành công) |
|
|
53
|
+
| `403 replay_disabled` | Xóa hàng đợi, đặt `uploader.isDisabled = true`, không ghi thêm |
|
|
54
|
+
| Hàng đợi quá `maxChunks` (30) hoặc `maxBytes` (2 MB) | Bỏ chunk cũ nhất |
|
|
55
|
+
| Lỗi ghi storage | Bỏ chunk, không ném lỗi ra app |
|
|
92
56
|
|
|
57
|
+
Chunk đã gửi lại thì collector trả `duplicate: true` nên gửi lặp không tạo bản sao. Collector cũng mask lần hai dữ liệu cá nhân; SDK vẫn phải mask trước khi gửi.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export type { ReplayChunk, ReplayNode, ReplayNodeType, ReplayViewport } from "@mikeci/pos-replay-protocol";
|
|
2
|
-
export { applyFrames, buildChunk, maskText, maskTree, shouldMask } from "./protocol.js";
|
|
3
|
-
export type { WireframeFrame, WireNode } from "./protocol.js";
|
|
4
2
|
export { ReplayRecorder, backoffMs } from "./recorder.js";
|
|
5
3
|
export { ReplayButton, ReplayInput, ReplayNodeView, ReplayProvider, ReplayScreen, ReplayText, ReplayView } from "./components.js";
|
|
4
|
+
export { ReplayUploader, recorderOptionsFromConfig, uploadBackoffMs } from "./uploader.js";
|
|
5
|
+
export type { AttachedReplay, ReplayConfig, ReplayStorage, ReplayUploaderOptions } from "./uploader.js";
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC3G,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC3G,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClI,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC3F,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { applyFrames, buildChunk, maskText, maskTree, shouldMask } from "./protocol.js";
|
|
2
1
|
export { ReplayRecorder, backoffMs } from "./recorder.js";
|
|
3
2
|
export { ReplayButton, ReplayInput, ReplayNodeView, ReplayProvider, ReplayScreen, ReplayText, ReplayView } from "./components.js";
|
|
3
|
+
export { ReplayUploader, recorderOptionsFromConfig, uploadBackoffMs } from "./uploader.js";
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClI,OAAO,EAAE,cAAc,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/recorder.d.ts
CHANGED
|
@@ -89,6 +89,8 @@ export declare class ReplayRecorder {
|
|
|
89
89
|
private fail;
|
|
90
90
|
rotate(force: boolean): Promise<ReplayChunk | null>;
|
|
91
91
|
private enqueue;
|
|
92
|
+
/** Chờ các lần đóng chunk đang chạy ngầm (`background`, `accountChanged`, `prepareScreen`) xong và vào `queue`. */
|
|
93
|
+
settled(): Promise<void>;
|
|
92
94
|
stats(): {
|
|
93
95
|
dropped: number;
|
|
94
96
|
queued: number;
|
package/dist/recorder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"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"}
|
package/dist/recorder.js
CHANGED
|
@@ -332,6 +332,10 @@ export class ReplayRecorder {
|
|
|
332
332
|
this.nodeBudget = this.maxNodes;
|
|
333
333
|
return encoded;
|
|
334
334
|
}
|
|
335
|
+
/** Chờ các lần đóng chunk đang chạy ngầm (`background`, `accountChanged`, `prepareScreen`) xong và vào `queue`. */
|
|
336
|
+
settled() {
|
|
337
|
+
return this.rotating;
|
|
338
|
+
}
|
|
335
339
|
stats() {
|
|
336
340
|
return { dropped: this.dropped, queued: this.queue.length, segmentId: this.segmentId, chunkSequence: this.chunkSequence };
|
|
337
341
|
}
|
package/dist/recorder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recorder.js","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recorder.js","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import type { ReplayChunk } from "@mikeci/pos-replay-protocol";
|
|
2
|
+
import type { ReplayRecorder } from "./recorder.js";
|
|
3
|
+
/** Cùng hình dạng với `@react-native-async-storage/async-storage` và `KeyValueStorage` của SDK analytics. */
|
|
4
|
+
export interface ReplayStorage {
|
|
5
|
+
getItem(key: string): Promise<string | null>;
|
|
6
|
+
setItem(key: string, value: string): Promise<void>;
|
|
7
|
+
removeItem(key: string): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export interface ReplayConfig {
|
|
10
|
+
replayEnabled: boolean;
|
|
11
|
+
replaySampleRate: number;
|
|
12
|
+
killSwitch: boolean;
|
|
13
|
+
limits?: {
|
|
14
|
+
maxChunkBytes?: number;
|
|
15
|
+
maxNodes?: number;
|
|
16
|
+
patchWindowMs?: number;
|
|
17
|
+
chunkWindowMs?: number;
|
|
18
|
+
maxScrollHz?: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface ReplayUploaderOptions {
|
|
22
|
+
endpoint: string;
|
|
23
|
+
appId: string;
|
|
24
|
+
writeKey: string;
|
|
25
|
+
environment?: string;
|
|
26
|
+
/** Thường là AsyncStorage. Mỗi chunk lưu ở một khóa riêng để không vượt giới hạn 2 MB mỗi dòng của AsyncStorage trên Android. */
|
|
27
|
+
storage: ReplayStorage;
|
|
28
|
+
storagePrefix?: string;
|
|
29
|
+
fetch?: typeof fetch;
|
|
30
|
+
now?: () => number;
|
|
31
|
+
random?: () => number;
|
|
32
|
+
/** Nén gzip nếu app có thư viện nén; có hàm này thì body gửi đi kèm `Content-Encoding: gzip`. */
|
|
33
|
+
compress?: (json: string) => Promise<Uint8Array>;
|
|
34
|
+
timeoutMs?: number;
|
|
35
|
+
/** Số chunk tối đa giữ trên máy. Vượt thì bỏ chunk cũ nhất. */
|
|
36
|
+
maxChunks?: number;
|
|
37
|
+
/** Tổng byte tối đa của các chunk đang chờ (mặc định 2 MB, chừa chỗ cho hàng đợi event dùng chung AsyncStorage). */
|
|
38
|
+
maxBytes?: number;
|
|
39
|
+
maxAttempts?: number;
|
|
40
|
+
configTtlMs?: number;
|
|
41
|
+
}
|
|
42
|
+
interface FlushResult {
|
|
43
|
+
sent: number;
|
|
44
|
+
dropped: number;
|
|
45
|
+
pending: number;
|
|
46
|
+
}
|
|
47
|
+
export declare function uploadBackoffMs(attempt: number, random?: () => number): number;
|
|
48
|
+
/** Tham số cho `new ReplayRecorder(...)` lấy từ `GET /v1/sdk/config`. */
|
|
49
|
+
export declare function recorderOptionsFromConfig(config: ReplayConfig | null): {
|
|
50
|
+
enabled: boolean;
|
|
51
|
+
sampleRate: number;
|
|
52
|
+
maxNodes?: number;
|
|
53
|
+
maxChunkBytes?: number;
|
|
54
|
+
patchWindowMs?: number;
|
|
55
|
+
chunkWindowMs?: number;
|
|
56
|
+
maxScrollHz?: number;
|
|
57
|
+
};
|
|
58
|
+
export interface AttachedReplay {
|
|
59
|
+
/** Gọi khi app vào background: đóng chunk hiện tại, lưu xuống máy và thử gửi. */
|
|
60
|
+
background(): Promise<void>;
|
|
61
|
+
foreground(): void;
|
|
62
|
+
/** Đóng chunk, lưu và gửi ngay những gì đang chờ. */
|
|
63
|
+
flushNow(): Promise<FlushResult>;
|
|
64
|
+
/** Kết thúc phiên ghi: rotate lần cuối, gửi nốt hàng đợi, báo `POST /v1/replay/end`, dừng timer. */
|
|
65
|
+
stop(): Promise<void>;
|
|
66
|
+
}
|
|
67
|
+
export declare class ReplayUploader {
|
|
68
|
+
private readonly options;
|
|
69
|
+
private readonly fetchImpl;
|
|
70
|
+
private readonly now;
|
|
71
|
+
private readonly random;
|
|
72
|
+
private readonly prefix;
|
|
73
|
+
private items;
|
|
74
|
+
private loaded;
|
|
75
|
+
private chain;
|
|
76
|
+
private flushing;
|
|
77
|
+
private disabled;
|
|
78
|
+
constructor(options: ReplayUploaderOptions);
|
|
79
|
+
/** `true` sau khi server báo tắt replay (403 replay_disabled): ngừng nhận và gửi chunk. */
|
|
80
|
+
get isDisabled(): boolean;
|
|
81
|
+
private exclusive;
|
|
82
|
+
private get indexKey();
|
|
83
|
+
private load;
|
|
84
|
+
private persistIndex;
|
|
85
|
+
/** Lưu một chunk xuống máy. Không ném lỗi: replay không được làm hỏng luồng của app. */
|
|
86
|
+
enqueue(chunk: ReplayChunk): Promise<void>;
|
|
87
|
+
/** Chuyển các chunk recorder đã đóng sang hàng đợi bền vững. */
|
|
88
|
+
drain(recorder: ReplayRecorder): Promise<number>;
|
|
89
|
+
private evict;
|
|
90
|
+
pending(): Promise<{
|
|
91
|
+
chunks: number;
|
|
92
|
+
bytes: number;
|
|
93
|
+
}>;
|
|
94
|
+
/** Gửi các chunk đến hạn theo thứ tự. Dừng ở lỗi tạm thời đầu tiên để giữ thứ tự. Các lần gọi đồng thời dùng chung một lượt gửi. */
|
|
95
|
+
flush(): Promise<FlushResult>;
|
|
96
|
+
private post;
|
|
97
|
+
private flushOnce;
|
|
98
|
+
private removeFirst;
|
|
99
|
+
private retryLater;
|
|
100
|
+
private purge;
|
|
101
|
+
/** Báo kết thúc một segment. Best effort: lỗi mạng chỉ bị bỏ qua. */
|
|
102
|
+
end(info: {
|
|
103
|
+
sessionId: string;
|
|
104
|
+
replayId: string;
|
|
105
|
+
segmentId: string;
|
|
106
|
+
}): Promise<boolean>;
|
|
107
|
+
/**
|
|
108
|
+
* Lấy cấu hình replay (bật/tắt, tỉ lệ mẫu, kill switch, giới hạn). Lưu bản gần nhất trong storage để
|
|
109
|
+
* lần mở app khi offline vẫn dùng được; hết hạn hoặc không có bản lưu thì trả `null` (không ghi replay).
|
|
110
|
+
*/
|
|
111
|
+
loadConfig(): Promise<ReplayConfig | null>;
|
|
112
|
+
/**
|
|
113
|
+
* Nối recorder với uploader: định kỳ `tick()`, chuyển chunk đã đóng xuống storage và gửi.
|
|
114
|
+
* Mặc định tick 150 ms (theo `patchWindowMs`), gửi mỗi 5 giây.
|
|
115
|
+
*/
|
|
116
|
+
attach(recorder: ReplayRecorder, options?: {
|
|
117
|
+
tickMs?: number;
|
|
118
|
+
flushMs?: number;
|
|
119
|
+
segmentId?: () => string;
|
|
120
|
+
}): AttachedReplay;
|
|
121
|
+
}
|
|
122
|
+
export {};
|
|
123
|
+
//# sourceMappingURL=uploader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../src/uploader.ts"],"names":[],"mappings":"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"}
|
package/dist/uploader.js
ADDED
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
const BACKOFF_STEPS_MS = [5_000, 15_000, 30_000, 60_000, 300_000];
|
|
2
|
+
export function uploadBackoffMs(attempt, random = Math.random) {
|
|
3
|
+
const base = BACKOFF_STEPS_MS[Math.min(Math.max(attempt, 0), BACKOFF_STEPS_MS.length - 1)] ?? 300_000;
|
|
4
|
+
return Math.max(0, Math.round(base + base * 0.2 * (random() * 2 - 1)));
|
|
5
|
+
}
|
|
6
|
+
/** Tham số cho `new ReplayRecorder(...)` lấy từ `GET /v1/sdk/config`. */
|
|
7
|
+
export function recorderOptionsFromConfig(config) {
|
|
8
|
+
if (!config || !config.replayEnabled || config.killSwitch)
|
|
9
|
+
return { enabled: false, sampleRate: 0 };
|
|
10
|
+
const limits = config.limits ?? {};
|
|
11
|
+
return {
|
|
12
|
+
enabled: true,
|
|
13
|
+
sampleRate: config.replaySampleRate,
|
|
14
|
+
...(limits.maxNodes ? { maxNodes: limits.maxNodes } : {}),
|
|
15
|
+
...(limits.maxChunkBytes ? { maxChunkBytes: limits.maxChunkBytes } : {}),
|
|
16
|
+
...(limits.patchWindowMs ? { patchWindowMs: limits.patchWindowMs } : {}),
|
|
17
|
+
...(limits.chunkWindowMs ? { chunkWindowMs: limits.chunkWindowMs } : {}),
|
|
18
|
+
...(limits.maxScrollHz ? { maxScrollHz: limits.maxScrollHz } : {}),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export class ReplayUploader {
|
|
22
|
+
options;
|
|
23
|
+
fetchImpl;
|
|
24
|
+
now;
|
|
25
|
+
random;
|
|
26
|
+
prefix;
|
|
27
|
+
items = [];
|
|
28
|
+
loaded = false;
|
|
29
|
+
chain = Promise.resolve();
|
|
30
|
+
flushing = null;
|
|
31
|
+
disabled = false;
|
|
32
|
+
constructor(options) {
|
|
33
|
+
this.options = options;
|
|
34
|
+
this.fetchImpl = options.fetch ?? fetch;
|
|
35
|
+
this.now = options.now ?? (() => Date.now());
|
|
36
|
+
this.random = options.random ?? Math.random;
|
|
37
|
+
this.prefix = options.storagePrefix ?? "lottery_replay";
|
|
38
|
+
}
|
|
39
|
+
/** `true` sau khi server báo tắt replay (403 replay_disabled): ngừng nhận và gửi chunk. */
|
|
40
|
+
get isDisabled() {
|
|
41
|
+
return this.disabled;
|
|
42
|
+
}
|
|
43
|
+
exclusive(work) {
|
|
44
|
+
const run = this.chain.then(work, work);
|
|
45
|
+
this.chain = run.then(() => undefined, () => undefined);
|
|
46
|
+
return run;
|
|
47
|
+
}
|
|
48
|
+
get indexKey() {
|
|
49
|
+
return `${this.prefix}:index`;
|
|
50
|
+
}
|
|
51
|
+
async load() {
|
|
52
|
+
if (this.loaded)
|
|
53
|
+
return;
|
|
54
|
+
try {
|
|
55
|
+
const raw = await this.options.storage.getItem(this.indexKey);
|
|
56
|
+
const parsed = raw ? JSON.parse(raw) : [];
|
|
57
|
+
this.items = Array.isArray(parsed) ? parsed : [];
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
this.items = [];
|
|
61
|
+
}
|
|
62
|
+
this.loaded = true;
|
|
63
|
+
}
|
|
64
|
+
async persistIndex() {
|
|
65
|
+
await this.options.storage.setItem(this.indexKey, JSON.stringify(this.items));
|
|
66
|
+
}
|
|
67
|
+
/** Lưu một chunk xuống máy. Không ném lỗi: replay không được làm hỏng luồng của app. */
|
|
68
|
+
enqueue(chunk) {
|
|
69
|
+
if (this.disabled)
|
|
70
|
+
return Promise.resolve();
|
|
71
|
+
return this.exclusive(async () => {
|
|
72
|
+
try {
|
|
73
|
+
await this.load();
|
|
74
|
+
const body = JSON.stringify(chunk);
|
|
75
|
+
const key = `${this.prefix}:chunk:${chunk.chunkId}`;
|
|
76
|
+
if (this.items.some((item) => item.chunkId === chunk.chunkId))
|
|
77
|
+
return;
|
|
78
|
+
await this.options.storage.setItem(key, body);
|
|
79
|
+
this.items.push({ chunkId: chunk.chunkId, key, bytes: body.length, attempts: 0, nextAttemptAt: 0 });
|
|
80
|
+
await this.evict();
|
|
81
|
+
await this.persistIndex();
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
// Hết bộ nhớ hoặc storage lỗi: bỏ chunk này.
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/** Chuyển các chunk recorder đã đóng sang hàng đợi bền vững. */
|
|
89
|
+
async drain(recorder) {
|
|
90
|
+
const chunks = recorder.queue.splice(0, recorder.queue.length);
|
|
91
|
+
for (const chunk of chunks)
|
|
92
|
+
await this.enqueue(chunk);
|
|
93
|
+
return chunks.length;
|
|
94
|
+
}
|
|
95
|
+
async evict() {
|
|
96
|
+
const maxChunks = this.options.maxChunks ?? 30;
|
|
97
|
+
const maxBytes = this.options.maxBytes ?? 2 * 1024 * 1024;
|
|
98
|
+
const total = () => this.items.reduce((sum, item) => sum + item.bytes, 0);
|
|
99
|
+
while (this.items.length > 1 && (this.items.length > maxChunks || total() > maxBytes)) {
|
|
100
|
+
const oldest = this.items.shift();
|
|
101
|
+
if (oldest)
|
|
102
|
+
await this.options.storage.removeItem(oldest.key).catch(() => undefined);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
async pending() {
|
|
106
|
+
return this.exclusive(async () => {
|
|
107
|
+
await this.load();
|
|
108
|
+
return { chunks: this.items.length, bytes: this.items.reduce((sum, item) => sum + item.bytes, 0) };
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
/** Gửi các chunk đến hạn theo thứ tự. Dừng ở lỗi tạm thời đầu tiên để giữ thứ tự. Các lần gọi đồng thời dùng chung một lượt gửi. */
|
|
112
|
+
flush() {
|
|
113
|
+
if (!this.flushing) {
|
|
114
|
+
this.flushing = this.exclusive(() => this.flushOnce()).finally(() => {
|
|
115
|
+
this.flushing = null;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return this.flushing;
|
|
119
|
+
}
|
|
120
|
+
async post(path, body) {
|
|
121
|
+
const json = JSON.stringify(body);
|
|
122
|
+
const headers = { "content-type": "application/json", "x-write-key": this.options.writeKey };
|
|
123
|
+
let payload = json;
|
|
124
|
+
if (this.options.compress) {
|
|
125
|
+
try {
|
|
126
|
+
payload = await this.options.compress(json);
|
|
127
|
+
headers["content-encoding"] = "gzip";
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
payload = json;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const controller = new AbortController();
|
|
134
|
+
const timer = setTimeout(() => controller.abort(), this.options.timeoutMs ?? 10_000);
|
|
135
|
+
try {
|
|
136
|
+
return await this.fetchImpl(`${this.options.endpoint.replace(/\/$/, "")}${path}`, {
|
|
137
|
+
method: "POST",
|
|
138
|
+
headers,
|
|
139
|
+
body: payload,
|
|
140
|
+
signal: controller.signal,
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
finally {
|
|
144
|
+
clearTimeout(timer);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
async flushOnce() {
|
|
148
|
+
await this.load();
|
|
149
|
+
let sent = 0;
|
|
150
|
+
let dropped = 0;
|
|
151
|
+
const maxAttempts = this.options.maxAttempts ?? 8;
|
|
152
|
+
while (!this.disabled) {
|
|
153
|
+
const item = this.items[0];
|
|
154
|
+
if (!item || item.nextAttemptAt > this.now())
|
|
155
|
+
break;
|
|
156
|
+
const raw = await this.options.storage.getItem(item.key).catch(() => null);
|
|
157
|
+
if (!raw) {
|
|
158
|
+
await this.removeFirst();
|
|
159
|
+
dropped += 1;
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
const chunk = JSON.parse(raw);
|
|
163
|
+
let response;
|
|
164
|
+
try {
|
|
165
|
+
response = await this.post("/v1/replay/chunks", {
|
|
166
|
+
app_id: this.options.appId,
|
|
167
|
+
environment: this.options.environment ?? "production",
|
|
168
|
+
checksum: chunk.checksum,
|
|
169
|
+
chunk,
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
catch {
|
|
173
|
+
await this.retryLater(item, undefined, maxAttempts);
|
|
174
|
+
break;
|
|
175
|
+
}
|
|
176
|
+
if (response.ok) {
|
|
177
|
+
await this.removeFirst();
|
|
178
|
+
sent += 1;
|
|
179
|
+
continue;
|
|
180
|
+
}
|
|
181
|
+
if (response.status === 429 || response.status >= 500) {
|
|
182
|
+
const retryAfter = Number(response.headers.get("retry-after"));
|
|
183
|
+
await this.retryLater(item, Number.isFinite(retryAfter) && retryAfter >= 0 ? retryAfter * 1000 : undefined, maxAttempts);
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
// 4xx còn lại: gửi lại cũng không thành công (chunk sai, key sai, trùng khác nội dung...).
|
|
187
|
+
let code = "";
|
|
188
|
+
try {
|
|
189
|
+
code = String((await response.json()).error ?? "");
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
code = "";
|
|
193
|
+
}
|
|
194
|
+
if (response.status === 403 && code === "replay_disabled") {
|
|
195
|
+
await this.purge();
|
|
196
|
+
this.disabled = true;
|
|
197
|
+
dropped += 1;
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
await this.removeFirst();
|
|
201
|
+
dropped += 1;
|
|
202
|
+
}
|
|
203
|
+
return { sent, dropped, pending: this.items.length };
|
|
204
|
+
}
|
|
205
|
+
async removeFirst() {
|
|
206
|
+
const item = this.items.shift();
|
|
207
|
+
if (item)
|
|
208
|
+
await this.options.storage.removeItem(item.key).catch(() => undefined);
|
|
209
|
+
await this.persistIndex().catch(() => undefined);
|
|
210
|
+
}
|
|
211
|
+
async retryLater(item, delayMs, maxAttempts) {
|
|
212
|
+
item.attempts += 1;
|
|
213
|
+
if (item.attempts >= maxAttempts) {
|
|
214
|
+
await this.removeFirst();
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
item.nextAttemptAt = this.now() + (delayMs ?? uploadBackoffMs(item.attempts - 1, this.random));
|
|
218
|
+
await this.persistIndex().catch(() => undefined);
|
|
219
|
+
}
|
|
220
|
+
async purge() {
|
|
221
|
+
const keys = this.items.map((item) => item.key);
|
|
222
|
+
this.items = [];
|
|
223
|
+
for (const key of keys)
|
|
224
|
+
await this.options.storage.removeItem(key).catch(() => undefined);
|
|
225
|
+
await this.options.storage.removeItem(this.indexKey).catch(() => undefined);
|
|
226
|
+
}
|
|
227
|
+
/** Báo kết thúc một segment. Best effort: lỗi mạng chỉ bị bỏ qua. */
|
|
228
|
+
async end(info) {
|
|
229
|
+
if (this.disabled)
|
|
230
|
+
return false;
|
|
231
|
+
try {
|
|
232
|
+
const response = await this.post("/v1/replay/end", {
|
|
233
|
+
app_id: this.options.appId,
|
|
234
|
+
environment: this.options.environment ?? "production",
|
|
235
|
+
session_id: info.sessionId,
|
|
236
|
+
replay_id: info.replayId,
|
|
237
|
+
segment_id: info.segmentId,
|
|
238
|
+
});
|
|
239
|
+
return response.ok;
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
return false;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Lấy cấu hình replay (bật/tắt, tỉ lệ mẫu, kill switch, giới hạn). Lưu bản gần nhất trong storage để
|
|
247
|
+
* lần mở app khi offline vẫn dùng được; hết hạn hoặc không có bản lưu thì trả `null` (không ghi replay).
|
|
248
|
+
*/
|
|
249
|
+
async loadConfig() {
|
|
250
|
+
const key = `${this.prefix}:config`;
|
|
251
|
+
const ttl = this.options.configTtlMs ?? 60 * 60_000;
|
|
252
|
+
try {
|
|
253
|
+
const response = await this.fetchImpl(`${this.options.endpoint.replace(/\/$/, "")}/v1/sdk/config?app_id=${encodeURIComponent(this.options.appId)}`, { headers: { "x-write-key": this.options.writeKey } });
|
|
254
|
+
if (response.ok) {
|
|
255
|
+
const config = (await response.json());
|
|
256
|
+
await this.options.storage.setItem(key, JSON.stringify({ at: this.now(), config })).catch(() => undefined);
|
|
257
|
+
if (config.killSwitch || !config.replayEnabled) {
|
|
258
|
+
await this.exclusive(async () => {
|
|
259
|
+
await this.load();
|
|
260
|
+
await this.purge();
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
return config;
|
|
264
|
+
}
|
|
265
|
+
if (response.status === 401 || response.status === 403)
|
|
266
|
+
return null;
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
// Offline: dùng bản đã lưu.
|
|
270
|
+
}
|
|
271
|
+
try {
|
|
272
|
+
const raw = await this.options.storage.getItem(key);
|
|
273
|
+
const saved = raw ? JSON.parse(raw) : null;
|
|
274
|
+
return saved && this.now() - saved.at <= ttl ? saved.config : null;
|
|
275
|
+
}
|
|
276
|
+
catch {
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Nối recorder với uploader: định kỳ `tick()`, chuyển chunk đã đóng xuống storage và gửi.
|
|
282
|
+
* Mặc định tick 150 ms (theo `patchWindowMs`), gửi mỗi 5 giây.
|
|
283
|
+
*/
|
|
284
|
+
attach(recorder, options = {}) {
|
|
285
|
+
const tickMs = options.tickMs ?? 150;
|
|
286
|
+
const flushMs = options.flushMs ?? 5_000;
|
|
287
|
+
let stopped = false;
|
|
288
|
+
let lastFlush = this.now();
|
|
289
|
+
const tickTimer = setInterval(() => {
|
|
290
|
+
if (stopped)
|
|
291
|
+
return;
|
|
292
|
+
void recorder
|
|
293
|
+
.tick()
|
|
294
|
+
.then(() => this.drain(recorder))
|
|
295
|
+
.then(() => {
|
|
296
|
+
if (this.now() - lastFlush < flushMs)
|
|
297
|
+
return undefined;
|
|
298
|
+
lastFlush = this.now();
|
|
299
|
+
return this.flush();
|
|
300
|
+
})
|
|
301
|
+
.catch(() => undefined);
|
|
302
|
+
}, tickMs);
|
|
303
|
+
const settle = async () => {
|
|
304
|
+
await recorder.rotate(true).catch(() => null);
|
|
305
|
+
await recorder.settled();
|
|
306
|
+
await this.drain(recorder);
|
|
307
|
+
return this.flush();
|
|
308
|
+
};
|
|
309
|
+
return {
|
|
310
|
+
background: async () => {
|
|
311
|
+
recorder.background();
|
|
312
|
+
await settle();
|
|
313
|
+
},
|
|
314
|
+
foreground: () => recorder.foreground(),
|
|
315
|
+
flushNow: settle,
|
|
316
|
+
stop: async () => {
|
|
317
|
+
if (stopped)
|
|
318
|
+
return;
|
|
319
|
+
stopped = true;
|
|
320
|
+
clearInterval(tickTimer);
|
|
321
|
+
await settle();
|
|
322
|
+
const stats = recorder.stats();
|
|
323
|
+
await this.end({ sessionId: recorder.sessionId, replayId: recorder.replayId, segmentId: options.segmentId?.() ?? stats.segmentId });
|
|
324
|
+
recorder.stopped = true;
|
|
325
|
+
},
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
//# sourceMappingURL=uploader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploader.js","sourceRoot":"","sources":["../src/uploader.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mikeci/pos-analytics-replay",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Session replay wireframe helpers for the Pos Analytics React Native SDK.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
"access": "public"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@mikeci/pos-replay-protocol": "0.2.
|
|
24
|
+
"@mikeci/pos-replay-protocol": "0.2.1"
|
|
25
25
|
},
|
|
26
26
|
"peerDependencies": {
|
|
27
27
|
"react": ">=19.0.0"
|
package/dist/protocol.d.ts
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
export interface WireNode {
|
|
2
|
-
id: string;
|
|
3
|
-
type: string;
|
|
4
|
-
x: number;
|
|
5
|
-
y: number;
|
|
6
|
-
w: number;
|
|
7
|
-
h: number;
|
|
8
|
-
text?: string;
|
|
9
|
-
masked?: boolean;
|
|
10
|
-
background?: string;
|
|
11
|
-
border?: string;
|
|
12
|
-
children?: WireNode[];
|
|
13
|
-
}
|
|
14
|
-
export interface WireframeFrame {
|
|
15
|
-
seq: number;
|
|
16
|
-
ts: string;
|
|
17
|
-
full: boolean;
|
|
18
|
-
nodes: WireNode[];
|
|
19
|
-
removed?: string[];
|
|
20
|
-
}
|
|
21
|
-
export declare function shouldMask(type: string, hints?: {
|
|
22
|
-
secure?: boolean;
|
|
23
|
-
analyticsMask?: boolean;
|
|
24
|
-
}): boolean;
|
|
25
|
-
export declare function maskText(text: string | undefined, masked: boolean): string | undefined;
|
|
26
|
-
export declare function maskTree(nodes: WireNode[]): WireNode[];
|
|
27
|
-
export declare function applyFrames(frames: WireframeFrame[]): WireNode[];
|
|
28
|
-
export declare function buildChunk(input: {
|
|
29
|
-
appId: string;
|
|
30
|
-
environment: string;
|
|
31
|
-
sessionId: string;
|
|
32
|
-
seq: number;
|
|
33
|
-
ts: string;
|
|
34
|
-
frame: WireframeFrame;
|
|
35
|
-
}): string;
|
|
36
|
-
//# sourceMappingURL=protocol.d.ts.map
|
package/dist/protocol.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAID,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAG3G;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAGtF;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAUtD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,GAAG,QAAQ,EAAE,CAsBhE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GAAG,MAAM,CASnJ"}
|
package/dist/protocol.js
DELETED
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
const MASKED = "••••";
|
|
2
|
-
export function shouldMask(type, hints = {}) {
|
|
3
|
-
if (hints.analyticsMask || hints.secure)
|
|
4
|
-
return true;
|
|
5
|
-
return type === "TextInput" || type === "UITextField" || type === "EditText";
|
|
6
|
-
}
|
|
7
|
-
export function maskText(text, masked) {
|
|
8
|
-
if (!text)
|
|
9
|
-
return text;
|
|
10
|
-
return masked ? MASKED : text;
|
|
11
|
-
}
|
|
12
|
-
export function maskTree(nodes) {
|
|
13
|
-
return nodes.map((node) => {
|
|
14
|
-
const masked = node.masked || shouldMask(node.type);
|
|
15
|
-
return {
|
|
16
|
-
...node,
|
|
17
|
-
masked,
|
|
18
|
-
text: maskText(node.text, masked),
|
|
19
|
-
children: node.children ? maskTree(node.children) : undefined,
|
|
20
|
-
};
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
export function applyFrames(frames) {
|
|
24
|
-
const byId = new Map();
|
|
25
|
-
const order = [];
|
|
26
|
-
for (const frame of frames) {
|
|
27
|
-
if (frame.full) {
|
|
28
|
-
byId.clear();
|
|
29
|
-
order.length = 0;
|
|
30
|
-
}
|
|
31
|
-
for (const id of frame.removed ?? []) {
|
|
32
|
-
byId.delete(id);
|
|
33
|
-
const index = order.indexOf(id);
|
|
34
|
-
if (index >= 0)
|
|
35
|
-
order.splice(index, 1);
|
|
36
|
-
}
|
|
37
|
-
for (const node of maskTree(frame.nodes)) {
|
|
38
|
-
if (!byId.has(node.id))
|
|
39
|
-
order.push(node.id);
|
|
40
|
-
byId.set(node.id, node);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return order.flatMap((id) => {
|
|
44
|
-
const node = byId.get(id);
|
|
45
|
-
return node ? [node] : [];
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
export function buildChunk(input) {
|
|
49
|
-
return JSON.stringify({
|
|
50
|
-
app_id: input.appId,
|
|
51
|
-
environment: input.environment,
|
|
52
|
-
session_id: input.sessionId,
|
|
53
|
-
seq: input.seq,
|
|
54
|
-
ts: input.ts,
|
|
55
|
-
payload: input.frame,
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
//# sourceMappingURL=protocol.js.map
|
package/dist/protocol.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|