@mikeci/pos-analytics-replay 0.1.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/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/protocol.d.ts +36 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +58 -0
- package/dist/protocol.js.map +1 -0
- package/package.json +27 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACxF,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mikeci/pos-analytics-replay",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Session replay wireframe helpers for the Pos Analytics React Native SDK.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"publishConfig": {
|
|
18
|
+
"registry": "https://registry.npmjs.org/",
|
|
19
|
+
"access": "public"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"typescript": "^5.7.2"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc -p tsconfig.build.json"
|
|
26
|
+
}
|
|
27
|
+
}
|