@cloudcare/cocos-sdk 0.1.0-alpha.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.
Files changed (161) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +31 -0
  3. package/THIRD_PARTY_NOTICES +5 -0
  4. package/bin/cli.cjs +127 -0
  5. package/creator2/package.json +4 -0
  6. package/creator3/package.json +5 -0
  7. package/dist/creator2/core/auto-tracking.d.ts +35 -0
  8. package/dist/creator2/core/auto-tracking.d.ts.map +1 -0
  9. package/dist/creator2/core/auto-tracking.js +337 -0
  10. package/dist/creator2/core/auto-tracking.js.map +1 -0
  11. package/dist/creator2/core/client.d.ts +74 -0
  12. package/dist/creator2/core/client.d.ts.map +1 -0
  13. package/dist/creator2/core/client.js +176 -0
  14. package/dist/creator2/core/client.js.map +1 -0
  15. package/dist/creator2/core/index.d.ts +3 -0
  16. package/dist/creator2/core/index.d.ts.map +1 -0
  17. package/dist/creator2/core/index.js +6 -0
  18. package/dist/creator2/core/index.js.map +1 -0
  19. package/dist/creator2/core/modules.d.ts +159 -0
  20. package/dist/creator2/core/modules.d.ts.map +1 -0
  21. package/dist/creator2/core/modules.js +319 -0
  22. package/dist/creator2/core/modules.js.map +1 -0
  23. package/dist/creator2/core/replay-budget.d.ts +28 -0
  24. package/dist/creator2/core/replay-budget.d.ts.map +1 -0
  25. package/dist/creator2/core/replay-budget.js +113 -0
  26. package/dist/creator2/core/replay-budget.js.map +1 -0
  27. package/dist/creator2/core/replay-diagnostics.d.ts +36 -0
  28. package/dist/creator2/core/replay-diagnostics.d.ts.map +1 -0
  29. package/dist/creator2/core/replay-diagnostics.js +40 -0
  30. package/dist/creator2/core/replay-diagnostics.js.map +1 -0
  31. package/dist/creator2/core/replay-encoding.d.ts +31 -0
  32. package/dist/creator2/core/replay-encoding.d.ts.map +1 -0
  33. package/dist/creator2/core/replay-encoding.js +63 -0
  34. package/dist/creator2/core/replay-encoding.js.map +1 -0
  35. package/dist/creator2/core/replay-pixels.d.ts +3 -0
  36. package/dist/creator2/core/replay-pixels.d.ts.map +1 -0
  37. package/dist/creator2/core/replay-pixels.js +16 -0
  38. package/dist/creator2/core/replay-pixels.js.map +1 -0
  39. package/dist/creator2/core/replay.d.ts +97 -0
  40. package/dist/creator2/core/replay.d.ts.map +1 -0
  41. package/dist/creator2/core/replay.js +578 -0
  42. package/dist/creator2/core/replay.js.map +1 -0
  43. package/dist/creator2/core/transport.d.ts +16 -0
  44. package/dist/creator2/core/transport.d.ts.map +1 -0
  45. package/dist/creator2/core/transport.js +33 -0
  46. package/dist/creator2/core/transport.js.map +1 -0
  47. package/dist/creator2/core/types.d.ts +260 -0
  48. package/dist/creator2/core/types.d.ts.map +1 -0
  49. package/dist/creator2/core/types.js +3 -0
  50. package/dist/creator2/core/types.js.map +1 -0
  51. package/dist/creator2/core/validation.d.ts +14 -0
  52. package/dist/creator2/core/validation.d.ts.map +1 -0
  53. package/dist/creator2/core/validation.js +81 -0
  54. package/dist/creator2/core/validation.js.map +1 -0
  55. package/dist/creator2/core/version.d.ts +9 -0
  56. package/dist/creator2/core/version.d.ts.map +1 -0
  57. package/dist/creator2/core/version.js +14 -0
  58. package/dist/creator2/core/version.js.map +1 -0
  59. package/dist/creator2/creator2/auto.d.ts +9 -0
  60. package/dist/creator2/creator2/auto.d.ts.map +1 -0
  61. package/dist/creator2/creator2/auto.js +65 -0
  62. package/dist/creator2/creator2/auto.js.map +1 -0
  63. package/dist/creator2/creator2/capture.d.ts +17 -0
  64. package/dist/creator2/creator2/capture.d.ts.map +1 -0
  65. package/dist/creator2/creator2/capture.js +162 -0
  66. package/dist/creator2/creator2/capture.js.map +1 -0
  67. package/dist/creator2/creator2/index.d.ts +12 -0
  68. package/dist/creator2/creator2/index.d.ts.map +1 -0
  69. package/dist/creator2/creator2/index.js +41 -0
  70. package/dist/creator2/creator2/index.js.map +1 -0
  71. package/dist/creator2/creator2/transport.d.ts +7 -0
  72. package/dist/creator2/creator2/transport.d.ts.map +1 -0
  73. package/dist/creator2/creator2/transport.js +34 -0
  74. package/dist/creator2/creator2/transport.js.map +1 -0
  75. package/dist/creator3/core/auto-tracking.d.ts +35 -0
  76. package/dist/creator3/core/auto-tracking.d.ts.map +1 -0
  77. package/dist/creator3/core/auto-tracking.js +247 -0
  78. package/dist/creator3/core/auto-tracking.js.map +1 -0
  79. package/dist/creator3/core/client.d.ts +74 -0
  80. package/dist/creator3/core/client.d.ts.map +1 -0
  81. package/dist/creator3/core/client.js +158 -0
  82. package/dist/creator3/core/client.js.map +1 -0
  83. package/dist/creator3/core/index.d.ts +3 -0
  84. package/dist/creator3/core/index.d.ts.map +1 -0
  85. package/dist/creator3/core/index.js +2 -0
  86. package/dist/creator3/core/index.js.map +1 -0
  87. package/dist/creator3/core/modules.d.ts +159 -0
  88. package/dist/creator3/core/modules.d.ts.map +1 -0
  89. package/dist/creator3/core/modules.js +293 -0
  90. package/dist/creator3/core/modules.js.map +1 -0
  91. package/dist/creator3/core/replay-budget.d.ts +28 -0
  92. package/dist/creator3/core/replay-budget.d.ts.map +1 -0
  93. package/dist/creator3/core/replay-budget.js +105 -0
  94. package/dist/creator3/core/replay-budget.js.map +1 -0
  95. package/dist/creator3/core/replay-diagnostics.d.ts +36 -0
  96. package/dist/creator3/core/replay-diagnostics.d.ts.map +1 -0
  97. package/dist/creator3/core/replay-diagnostics.js +36 -0
  98. package/dist/creator3/core/replay-diagnostics.js.map +1 -0
  99. package/dist/creator3/core/replay-encoding.d.ts +31 -0
  100. package/dist/creator3/core/replay-encoding.d.ts.map +1 -0
  101. package/dist/creator3/core/replay-encoding.js +62 -0
  102. package/dist/creator3/core/replay-encoding.js.map +1 -0
  103. package/dist/creator3/core/replay-pixels.d.ts +3 -0
  104. package/dist/creator3/core/replay-pixels.d.ts.map +1 -0
  105. package/dist/creator3/core/replay-pixels.js +13 -0
  106. package/dist/creator3/core/replay-pixels.js.map +1 -0
  107. package/dist/creator3/core/replay.d.ts +97 -0
  108. package/dist/creator3/core/replay.d.ts.map +1 -0
  109. package/dist/creator3/core/replay.js +520 -0
  110. package/dist/creator3/core/replay.js.map +1 -0
  111. package/dist/creator3/core/transport.d.ts +16 -0
  112. package/dist/creator3/core/transport.d.ts.map +1 -0
  113. package/dist/creator3/core/transport.js +27 -0
  114. package/dist/creator3/core/transport.js.map +1 -0
  115. package/dist/creator3/core/types.d.ts +260 -0
  116. package/dist/creator3/core/types.d.ts.map +1 -0
  117. package/dist/creator3/core/types.js +2 -0
  118. package/dist/creator3/core/types.js.map +1 -0
  119. package/dist/creator3/core/validation.d.ts +14 -0
  120. package/dist/creator3/core/validation.d.ts.map +1 -0
  121. package/dist/creator3/core/validation.js +75 -0
  122. package/dist/creator3/core/validation.js.map +1 -0
  123. package/dist/creator3/core/version.d.ts +9 -0
  124. package/dist/creator3/core/version.d.ts.map +1 -0
  125. package/dist/creator3/core/version.js +11 -0
  126. package/dist/creator3/core/version.js.map +1 -0
  127. package/dist/creator3/creator3/auto.d.ts +9 -0
  128. package/dist/creator3/creator3/auto.d.ts.map +1 -0
  129. package/dist/creator3/creator3/auto.js +45 -0
  130. package/dist/creator3/creator3/auto.js.map +1 -0
  131. package/dist/creator3/creator3/capture.d.ts +17 -0
  132. package/dist/creator3/creator3/capture.d.ts.map +1 -0
  133. package/dist/creator3/creator3/capture.js +117 -0
  134. package/dist/creator3/creator3/capture.js.map +1 -0
  135. package/dist/creator3/creator3/index.d.ts +12 -0
  136. package/dist/creator3/creator3/index.d.ts.map +1 -0
  137. package/dist/creator3/creator3/index.js +23 -0
  138. package/dist/creator3/creator3/index.js.map +1 -0
  139. package/dist/creator3/creator3/replay-render-cycle.d.ts +9 -0
  140. package/dist/creator3/creator3/replay-render-cycle.d.ts.map +1 -0
  141. package/dist/creator3/creator3/replay-render-cycle.js +12 -0
  142. package/dist/creator3/creator3/replay-render-cycle.js.map +1 -0
  143. package/dist/creator3/creator3/transport.d.ts +8 -0
  144. package/dist/creator3/creator3/transport.d.ts.map +1 -0
  145. package/dist/creator3/creator3/transport.js +24 -0
  146. package/dist/creator3/creator3/transport.js.map +1 -0
  147. package/dist/creator3/package.json +1 -0
  148. package/extensions/creator2/install-native.cjs +333 -0
  149. package/extensions/creator2/main.js +23 -0
  150. package/extensions/creator2/package.json +6 -0
  151. package/extensions/creator3/dist/builder.js +9 -0
  152. package/extensions/creator3/dist/hooks.js +70 -0
  153. package/extensions/creator3/dist/main.js +4 -0
  154. package/extensions/creator3/install-native.cjs +333 -0
  155. package/extensions/creator3/package.json +10 -0
  156. package/native/android/src/main/java/com/ft/sdk/cocos/FTCocosBridge.java +532 -0
  157. package/native/android/src/main/java/com/ft/sdk/cocos/FTCocosBridgeProvider.java +70 -0
  158. package/native/ios/FTCocosBridge.h +10 -0
  159. package/native/ios/FTCocosBridge.m +470 -0
  160. package/native/ios/FTCocosBridge.podspec +18 -0
  161. package/package.json +60 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay-pixels.js","sourceRoot":"","sources":["../../../../../src/core/replay-pixels.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,UAAU,YAAY,CAAC,KAAiB,EAAE,KAAa,EAAE,MAAc;IAC3E,MAAM,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;IACrC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;QAC3E,MAAM,SAAS,GAAG,GAAG,GAAG,OAAO,CAAC;QAChC,MAAM,YAAY,GAAG,MAAM,GAAG,OAAO,CAAC;QACtC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC;QACzD,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,YAAY,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC;QAClE,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,97 @@
1
+ import type { FTNativeTransport } from './transport.js';
2
+ import type { FTCapturedFrame, FTPrivacyRegion, FTSessionReplayConfig, FTStoredFrame } from './types.js';
3
+ export interface FTCanvasCapture {
4
+ getViewportSize?(): {
5
+ width: number;
6
+ height: number;
7
+ } | undefined;
8
+ capture(maxImageDimension: number): Promise<FTCapturedFrame | undefined>;
9
+ persist(frame: FTCapturedFrame, fingerprint: string): Promise<FTStoredFrame>;
10
+ disposeStoredFrame(frame: FTStoredFrame): void;
11
+ setPrivacy(node: unknown, mode: 'mask' | 'hide' | 'unmask'): void;
12
+ }
13
+ export interface FTReplayPointerEvent {
14
+ eventType: 'down' | 'up' | 'move';
15
+ pointerId: number;
16
+ normalizedX: number;
17
+ normalizedY: number;
18
+ timestamp: number;
19
+ }
20
+ export interface FTReplayPointerSource {
21
+ onReplayPointer(callback: (event: FTReplayPointerEvent) => void): () => void;
22
+ }
23
+ export interface FTReplaySaveImageV2Result {
24
+ resourceId: string;
25
+ byteSize: number;
26
+ width: number;
27
+ height: number;
28
+ mimeType?: `image/${string}`;
29
+ }
30
+ export interface FTReplayFrameSample {
31
+ width: number;
32
+ height: number;
33
+ luminance: Uint8Array;
34
+ }
35
+ /** Cocos canvas Session Replay controls. */
36
+ export declare class FTSessionReplay {
37
+ private readonly transport;
38
+ private readonly capture;
39
+ private readonly pointerSource?;
40
+ private timer;
41
+ private busy;
42
+ private running;
43
+ private mode;
44
+ private hybridReplayEnabled;
45
+ private captureGeneration;
46
+ private config;
47
+ private imagePolicy;
48
+ private budget;
49
+ private lastFingerprint;
50
+ private lastContextKey;
51
+ private lastPrivacyKey;
52
+ private lastFrameSample;
53
+ private lastImageSize;
54
+ private lastViewportSize;
55
+ private imagePolicyEnabled;
56
+ private supportsSaveImageV2;
57
+ private recordCounts;
58
+ private recordTouches;
59
+ private pendingPointerEvents;
60
+ private stopPointerTracking;
61
+ constructor(transport: FTNativeTransport, capture: FTCanvasCapture, pointerSource?: FTReplayPointerSource | undefined);
62
+ /**
63
+ * Enables native Session Replay and starts Cocos canvas capture for a
64
+ * standalone application.
65
+ *
66
+ * @param config - Replay sampling, capture, and touch-privacy settings.
67
+ */
68
+ start(config?: FTSessionReplayConfig): void;
69
+ private configureCapture;
70
+ /** Stops standalone Cocos canvas capture and native Session Replay. */
71
+ stop(): void;
72
+ /**
73
+ * Changes the Session Replay privacy treatment for a Cocos node.
74
+ *
75
+ * `mask` obscures the node, `hide` removes the region from the replay, and
76
+ * `unmask` clears an earlier override. The node must belong to the active
77
+ * Cocos scene.
78
+ *
79
+ * @param node - Cocos node whose rendered bounds receive the privacy rule.
80
+ * @param mode - Privacy treatment to apply.
81
+ */
82
+ setPrivacy(node: unknown, mode: 'mask' | 'hide' | 'unmask'): void;
83
+ private startCapture;
84
+ private stopCapture;
85
+ private schedule;
86
+ private readContext;
87
+ private saveImage;
88
+ private writePendingPointers;
89
+ private scaledPendingPointers;
90
+ private updateRecordCount;
91
+ }
92
+ export declare function normalizeSaveImageV2Result(value: unknown): FTReplaySaveImageV2Result;
93
+ export declare function sampleReplayFrame(rgba: Uint8Array, width: number, height: number, maximumSamples?: number): FTReplayFrameSample;
94
+ export declare function replayFramesLookSimilar(previous: FTReplayFrameSample | undefined, current: FTReplayFrameSample): boolean;
95
+ export declare function frameFingerprint(bytes: Uint8Array): string;
96
+ export declare function applyPrivacyRegions(rgba: Uint8Array, width: number, height: number, regions: FTPrivacyRegion[]): void;
97
+ //# sourceMappingURL=replay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../../../../src/core/replay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,520 @@
1
+ import { encodeReplayImageRecord, encodeReplayPointerRecords, } from './replay-encoding.js';
2
+ import { FTReplayBudget } from './replay-budget.js';
3
+ import { emitReplayDiagnostic, replayUtf8ByteLength } from './replay-diagnostics.js';
4
+ import { captureFps, replayImagePolicy, samplingRate, } from './validation.js';
5
+ const MAX_PENDING_POINTER_EVENTS = 512;
6
+ /** Cocos canvas Session Replay controls. */
7
+ export class FTSessionReplay {
8
+ constructor(transport, capture, pointerSource) {
9
+ this.transport = transport;
10
+ this.capture = capture;
11
+ this.pointerSource = pointerSource;
12
+ this.busy = false;
13
+ this.running = false;
14
+ this.mode = 'idle';
15
+ this.hybridReplayEnabled = false;
16
+ this.captureGeneration = 0;
17
+ this.config = { captureFps: 1 };
18
+ this.imagePolicy = replayImagePolicy({});
19
+ this.budget = new FTReplayBudget(this.imagePolicy);
20
+ this.imagePolicyEnabled = false;
21
+ this.recordCounts = new Map();
22
+ this.recordTouches = false;
23
+ this.pendingPointerEvents = [];
24
+ }
25
+ /**
26
+ * Enables native Session Replay and starts Cocos canvas capture for a
27
+ * standalone application.
28
+ *
29
+ * @param config - Replay sampling, capture, and touch-privacy settings.
30
+ */
31
+ start(config = {}) {
32
+ if (this.mode === 'hybrid') {
33
+ throw new Error('Hybrid Replay is managed by guanceSdk.enterCocos() and leaveCocos()');
34
+ }
35
+ if (this.mode === 'standalone')
36
+ return;
37
+ samplingRate(config.sampleRate, 'replay.sampleRate');
38
+ samplingRate(config.sessionOnErrorSampleRate, 'replay.sessionOnErrorSampleRate');
39
+ this.configureCapture(config);
40
+ this.transport.invoke('replay.configure', config);
41
+ this.mode = 'standalone';
42
+ this.startCapture();
43
+ }
44
+ /** @internal */
45
+ attachHybrid(config) {
46
+ if (this.mode === 'standalone') {
47
+ throw new Error('Standalone Replay and Hybrid Replay are mutually exclusive');
48
+ }
49
+ if (this.mode === 'hybrid')
50
+ return;
51
+ this.configureCapture(config || {});
52
+ this.hybridReplayEnabled = config !== undefined;
53
+ this.mode = 'hybrid';
54
+ }
55
+ /** @internal */
56
+ detachHybrid() {
57
+ if (this.mode !== 'hybrid')
58
+ return;
59
+ this.stopCapture();
60
+ this.hybridReplayEnabled = false;
61
+ this.mode = 'idle';
62
+ }
63
+ /** @internal */
64
+ enterHybrid() {
65
+ if (this.mode !== 'hybrid') {
66
+ throw new Error('Call guanceSdk.attach() before entering Hybrid Replay');
67
+ }
68
+ if (!this.hybridReplayEnabled || this.running)
69
+ return;
70
+ this.transport.invoke('hybrid.setExternalRecorderActive', { active: true });
71
+ this.startCapture();
72
+ }
73
+ /** @internal */
74
+ leaveHybrid() {
75
+ if (this.mode !== 'hybrid' || !this.hybridReplayEnabled)
76
+ return;
77
+ this.stopCapture();
78
+ this.transport.invoke('hybrid.setExternalRecorderActive', { active: false });
79
+ }
80
+ configureCapture(config) {
81
+ if (config.touchPrivacy !== undefined && config.touchPrivacy !== 'show' && config.touchPrivacy !== 'hide') {
82
+ throw new TypeError("touchPrivacy must be either 'show' or 'hide'");
83
+ }
84
+ this.config = { captureFps: captureFps(config.captureFps) };
85
+ this.imagePolicy = replayImagePolicy(config);
86
+ this.budget = new FTReplayBudget(this.imagePolicy);
87
+ // Lossy image MIME must be validated against the deployed player before
88
+ // becoming an implicit default. Supplying imagePolicy opts into V2 now.
89
+ this.imagePolicyEnabled = config.imagePolicy !== undefined;
90
+ this.recordTouches = config.touchPrivacy === 'show';
91
+ }
92
+ /** Stops standalone Cocos canvas capture and native Session Replay. */
93
+ stop() {
94
+ if (this.mode === 'hybrid') {
95
+ throw new Error('Hybrid Replay is managed by guanceSdk.enterCocos() and leaveCocos()');
96
+ }
97
+ if (this.mode === 'idle')
98
+ return;
99
+ this.stopCapture();
100
+ this.transport.invoke('replay.stop');
101
+ this.mode = 'idle';
102
+ }
103
+ /**
104
+ * Changes the Session Replay privacy treatment for a Cocos node.
105
+ *
106
+ * `mask` obscures the node, `hide` removes the region from the replay, and
107
+ * `unmask` clears an earlier override. The node must belong to the active
108
+ * Cocos scene.
109
+ *
110
+ * @param node - Cocos node whose rendered bounds receive the privacy rule.
111
+ * @param mode - Privacy treatment to apply.
112
+ */
113
+ setPrivacy(node, mode) {
114
+ this.capture.setPrivacy(node, mode);
115
+ }
116
+ /** @internal */
117
+ async captureNow() {
118
+ var _a, _b;
119
+ if (this.busy) {
120
+ emitReplayDiagnostic({ type: 'capture_skipped', timestamp: Date.now(), reason: 'busy' });
121
+ return false;
122
+ }
123
+ const generation = this.captureGeneration;
124
+ this.busy = true;
125
+ let stored;
126
+ let context;
127
+ let pointerSize = this.lastImageSize;
128
+ try {
129
+ context = this.readContext();
130
+ if (!context)
131
+ return false;
132
+ const contextKey = `${context.applicationId}:${context.sessionId}:${context.viewId}`;
133
+ const contextChanged = contextKey !== this.lastContextKey;
134
+ const viewportSize = (_b = (_a = this.capture).getViewportSize) === null || _b === void 0 ? void 0 : _b.call(_a);
135
+ const viewportChanged = this.lastViewportSize !== undefined
136
+ && viewportSize !== undefined
137
+ && (viewportSize.width !== this.lastViewportSize.width
138
+ || viewportSize.height !== this.lastViewportSize.height);
139
+ const priorityKey = contextChanged
140
+ ? contextKey
141
+ : viewportChanged && viewportSize
142
+ ? `${contextKey}:${viewportSize.width}x${viewportSize.height}`
143
+ : undefined;
144
+ const now = Date.now();
145
+ const decision = this.budget.decide(now, priorityKey);
146
+ emitReplayDiagnostic({
147
+ type: 'capture_attempt',
148
+ timestamp: now,
149
+ usedBytes: decision.usedBytes,
150
+ maxBytesPerMinute: this.imagePolicy.maxBytesPerMinute,
151
+ });
152
+ if (!decision.allowed) {
153
+ emitReplayDiagnostic({
154
+ type: 'capture_skipped',
155
+ timestamp: now,
156
+ reason: decision.reason || 'budget',
157
+ });
158
+ return pointerSize ? this.writePendingPointers(context, pointerSize.width, pointerSize.height) : false;
159
+ }
160
+ const frame = await this.capture.capture(decision.maxImageDimension);
161
+ if (generation !== this.captureGeneration)
162
+ return false;
163
+ if (!frame)
164
+ return false;
165
+ pointerSize = { width: frame.width, height: frame.height };
166
+ applyPrivacyRegions(frame.rgba, frame.width, frame.height, frame.privacyRegions || []);
167
+ const fingerprint = frameFingerprint(frame.rgba);
168
+ const privacyKey = privacyRegionsKey(frame.privacyRegions || []);
169
+ const sample = sampleReplayFrame(frame.rgba, frame.width, frame.height);
170
+ const comparable = contextKey === this.lastContextKey
171
+ && !viewportChanged
172
+ && privacyKey === this.lastPrivacyKey;
173
+ const duplicate = comparable && fingerprint === this.lastFingerprint;
174
+ const approximatelyStatic = comparable
175
+ && !duplicate
176
+ && replayFramesLookSimilar(this.lastFrameSample, sample);
177
+ if (duplicate || approximatelyStatic) {
178
+ emitReplayDiagnostic({
179
+ type: 'capture_skipped',
180
+ timestamp: now,
181
+ reason: duplicate ? 'dedupe' : 'approx_static',
182
+ });
183
+ return this.writePendingPointers(context, frame.width, frame.height);
184
+ }
185
+ stored = await this.capture.persist(frame, fingerprint);
186
+ if (generation !== this.captureGeneration)
187
+ return false;
188
+ const saved = this.saveImage(stored, decision.compressionQuality, decision.maxFrameBytes);
189
+ if (!saved) {
190
+ emitReplayDiagnostic({ type: 'capture_skipped', timestamp: now, reason: 'budget' });
191
+ return this.writePendingPointers(context, frame.width, frame.height);
192
+ }
193
+ const pendingPointers = this.scaledPendingPointers(saved.width, saved.height);
194
+ const encoded = encodeReplayImageRecord({
195
+ context,
196
+ resourceId: saved.resourceId,
197
+ width: saved.width,
198
+ height: saved.height,
199
+ ...(saved.mimeType ? { mimeType: saved.mimeType } : {}),
200
+ timestamp: stored.timestamp,
201
+ contextChanged,
202
+ pointerEvents: pendingPointers,
203
+ });
204
+ this.transport.invoke('replay.writeSegment', {
205
+ viewId: context.viewId,
206
+ segment: encoded.segment,
207
+ });
208
+ emitReplayDiagnostic({
209
+ type: 'segment_encoded',
210
+ timestamp: now,
211
+ byteSize: replayUtf8ByteLength(encoded.segment),
212
+ recordCount: encoded.recordCount,
213
+ pointerRecordCount: pendingPointers.length,
214
+ hasImage: true,
215
+ });
216
+ this.updateRecordCount(context.viewId, encoded.recordCount);
217
+ this.pendingPointerEvents.splice(0, pendingPointers.length);
218
+ this.budget.record(now, saved.byteSize, priorityKey);
219
+ emitReplayDiagnostic({
220
+ type: 'image_saved',
221
+ timestamp: now,
222
+ byteSize: saved.byteSize,
223
+ width: saved.width,
224
+ height: saved.height,
225
+ ...(saved.mimeType ? { mimeType: saved.mimeType } : {}),
226
+ priority: decision.priority,
227
+ byteSizeSource: saved.byteSizeSource,
228
+ });
229
+ this.lastFingerprint = fingerprint;
230
+ this.lastContextKey = contextKey;
231
+ this.lastPrivacyKey = privacyKey;
232
+ this.lastFrameSample = sample;
233
+ this.lastImageSize = { width: saved.width, height: saved.height };
234
+ this.lastViewportSize = viewportSize;
235
+ return true;
236
+ }
237
+ catch (error) {
238
+ emitReplayDiagnostic({ type: 'capture_skipped', timestamp: Date.now(), reason: 'error' });
239
+ console.error('[cocos-sdk] Session Replay frame dropped:', error);
240
+ if (context && pointerSize) {
241
+ try {
242
+ return this.writePendingPointers(context, pointerSize.width, pointerSize.height);
243
+ }
244
+ catch (pointerError) {
245
+ console.error('[cocos-sdk] Session Replay pointer segment dropped:', pointerError);
246
+ }
247
+ }
248
+ return false;
249
+ }
250
+ finally {
251
+ if (stored)
252
+ this.capture.disposeStoredFrame(stored);
253
+ this.busy = false;
254
+ }
255
+ }
256
+ startCapture() {
257
+ this.captureGeneration += 1;
258
+ this.running = true;
259
+ this.lastFingerprint = undefined;
260
+ this.lastContextKey = undefined;
261
+ this.lastPrivacyKey = undefined;
262
+ this.lastFrameSample = undefined;
263
+ this.lastImageSize = undefined;
264
+ this.lastViewportSize = undefined;
265
+ this.budget.reset();
266
+ this.recordCounts.clear();
267
+ this.pendingPointerEvents = [];
268
+ if (this.recordTouches && this.pointerSource) {
269
+ this.stopPointerTracking = this.pointerSource.onReplayPointer((event) => {
270
+ emitReplayDiagnostic({
271
+ type: 'pointer_received',
272
+ timestamp: event.timestamp,
273
+ eventType: event.eventType,
274
+ });
275
+ this.pendingPointerEvents.push(event);
276
+ if (this.pendingPointerEvents.length > MAX_PENDING_POINTER_EVENTS) {
277
+ this.pendingPointerEvents.splice(0, this.pendingPointerEvents.length - MAX_PENDING_POINTER_EVENTS);
278
+ }
279
+ });
280
+ }
281
+ this.schedule(0, this.captureGeneration);
282
+ }
283
+ stopCapture() {
284
+ var _a;
285
+ const wasRunning = this.running;
286
+ this.captureGeneration += 1;
287
+ this.running = false;
288
+ (_a = this.stopPointerTracking) === null || _a === void 0 ? void 0 : _a.call(this);
289
+ this.stopPointerTracking = undefined;
290
+ this.pendingPointerEvents = [];
291
+ if (this.timer !== undefined)
292
+ clearTimeout(this.timer);
293
+ this.timer = undefined;
294
+ if (wasRunning)
295
+ emitReplayDiagnostic({ type: 'replay_stopped', timestamp: Date.now() });
296
+ }
297
+ schedule(delay, generation) {
298
+ if (!this.running)
299
+ return;
300
+ this.timer = setTimeout(async () => {
301
+ if (!this.running || generation !== this.captureGeneration)
302
+ return;
303
+ try {
304
+ await this.captureNow();
305
+ }
306
+ catch (error) {
307
+ console.error('[cocos-sdk] Session Replay frame dropped:', error);
308
+ }
309
+ finally {
310
+ if (this.running && generation === this.captureGeneration) {
311
+ this.schedule(1000 / this.config.captureFps, generation);
312
+ }
313
+ }
314
+ }, delay);
315
+ }
316
+ readContext() {
317
+ const value = this.transport.invoke('replay.getContext');
318
+ return normalizeRumContext(value);
319
+ }
320
+ saveImage(stored, compressionQuality, maxFrameBytes) {
321
+ if (this.imagePolicyEnabled && this.supportsSaveImageV2 !== false) {
322
+ try {
323
+ const value = this.transport.invoke('replay.saveImageV2', {
324
+ path: stored.path,
325
+ width: stored.width,
326
+ height: stored.height,
327
+ quality: compressionQuality,
328
+ maxFrameBytes,
329
+ });
330
+ if (value !== undefined) {
331
+ this.supportsSaveImageV2 = true;
332
+ if (isRejectedSaveImageV2(value))
333
+ return undefined;
334
+ return { ...normalizeSaveImageV2Result(value), byteSizeSource: 'native' };
335
+ }
336
+ this.supportsSaveImageV2 = false;
337
+ }
338
+ catch (error) {
339
+ if (!isUnknownBridgeMethod(error))
340
+ throw error;
341
+ this.supportsSaveImageV2 = false;
342
+ }
343
+ }
344
+ const resourceId = this.transport.invoke('replay.saveImage', {
345
+ path: stored.path,
346
+ width: stored.width,
347
+ height: stored.height,
348
+ });
349
+ if (!resourceId)
350
+ return undefined;
351
+ return {
352
+ resourceId,
353
+ // V1 cannot report encoded size. A conservative frame-limit estimate
354
+ // still prevents configured captureFps from multiplying traffic freely.
355
+ byteSize: maxFrameBytes,
356
+ width: stored.width,
357
+ height: stored.height,
358
+ byteSizeSource: 'frame_limit_estimate',
359
+ ...(this.transport.platform === 'ios' ? { mimeType: 'image/png' } : {}),
360
+ };
361
+ }
362
+ writePendingPointers(context, width, height) {
363
+ const pointerEvents = this.scaledPendingPointers(width, height);
364
+ if (pointerEvents.length === 0)
365
+ return false;
366
+ const encoded = encodeReplayPointerRecords({ context, pointerEvents });
367
+ this.transport.invoke('replay.writeSegment', {
368
+ viewId: context.viewId,
369
+ segment: encoded.segment,
370
+ });
371
+ emitReplayDiagnostic({
372
+ type: 'segment_encoded',
373
+ timestamp: Date.now(),
374
+ byteSize: replayUtf8ByteLength(encoded.segment),
375
+ recordCount: encoded.recordCount,
376
+ pointerRecordCount: pointerEvents.length,
377
+ hasImage: false,
378
+ });
379
+ this.updateRecordCount(context.viewId, encoded.recordCount);
380
+ this.pendingPointerEvents.splice(0, pointerEvents.length);
381
+ return true;
382
+ }
383
+ scaledPendingPointers(width, height) {
384
+ return this.pendingPointerEvents.map((event) => ({
385
+ eventType: event.eventType,
386
+ pointerId: event.pointerId,
387
+ x: Math.round(clamp(event.normalizedX, 0, 1) * width),
388
+ y: Math.round(clamp(event.normalizedY, 0, 1) * height),
389
+ timestamp: event.timestamp,
390
+ }));
391
+ }
392
+ updateRecordCount(viewId, added) {
393
+ const count = (this.recordCounts.get(viewId) || 0) + added;
394
+ this.recordCounts.set(viewId, count);
395
+ this.transport.invoke('replay.setRecordCount', { viewId, count });
396
+ }
397
+ }
398
+ function normalizeRumContext(value) {
399
+ if (!value || typeof value !== 'object')
400
+ return undefined;
401
+ const context = value;
402
+ const applicationId = stringValue(context.applicationId, context.application_id);
403
+ const sessionId = stringValue(context.sessionId, context.session_id);
404
+ const viewId = stringValue(context.viewId, context.view_id);
405
+ if (!applicationId || !sessionId || !viewId)
406
+ return undefined;
407
+ const globalContext = context.globalContext;
408
+ return {
409
+ applicationId,
410
+ sessionId,
411
+ viewId,
412
+ ...(globalContext && typeof globalContext === 'object'
413
+ ? { globalContext: globalContext }
414
+ : {}),
415
+ };
416
+ }
417
+ function stringValue(...values) {
418
+ return values.find((value) => typeof value === 'string' && value.length > 0);
419
+ }
420
+ export function normalizeSaveImageV2Result(value) {
421
+ if (!value || typeof value !== 'object')
422
+ throw new TypeError('Invalid replay.saveImageV2 result');
423
+ const result = value;
424
+ const resourceId = stringValue(result.resourceId, result.resource_id);
425
+ const byteSize = numberValue(result.byteSize, result.byte_size);
426
+ const width = numberValue(result.width);
427
+ const height = numberValue(result.height);
428
+ const mimeType = stringValue(result.mimeType, result.mime_type);
429
+ if (!resourceId || !isPositiveInteger(byteSize) || !isPositiveInteger(width) || !isPositiveInteger(height)) {
430
+ throw new TypeError('Invalid replay.saveImageV2 result');
431
+ }
432
+ if (mimeType && !mimeType.startsWith('image/')) {
433
+ throw new TypeError('Invalid replay.saveImageV2 mimeType');
434
+ }
435
+ return {
436
+ resourceId,
437
+ byteSize,
438
+ width,
439
+ height,
440
+ ...(mimeType ? { mimeType: mimeType } : {}),
441
+ };
442
+ }
443
+ function isRejectedSaveImageV2(value) {
444
+ return typeof value === 'object' && value !== null && value.accepted === false;
445
+ }
446
+ function isUnknownBridgeMethod(error) {
447
+ return error instanceof Error && /unknown bridge method|unrecognized selector/i.test(error.message);
448
+ }
449
+ function numberValue(...values) {
450
+ return values.find((value) => typeof value === 'number' && Number.isFinite(value));
451
+ }
452
+ function isPositiveInteger(value) {
453
+ return value !== undefined && Number.isInteger(value) && value > 0;
454
+ }
455
+ export function sampleReplayFrame(rgba, width, height, maximumSamples = 4096) {
456
+ const pixelCount = width * height;
457
+ if (width < 1 || height < 1 || rgba.length < pixelCount * 4) {
458
+ throw new RangeError('Replay frame RGBA data does not match its dimensions');
459
+ }
460
+ const sampleCount = Math.min(maximumSamples, pixelCount);
461
+ const luminance = new Uint8Array(sampleCount);
462
+ for (let index = 0; index < sampleCount; index += 1) {
463
+ const pixel = Math.min(pixelCount - 1, Math.floor(index * pixelCount / sampleCount));
464
+ const offset = pixel * 4;
465
+ luminance[index] = Math.round((rgba[offset] * 54 + rgba[offset + 1] * 183 + rgba[offset + 2] * 19) / 256);
466
+ }
467
+ return { width, height, luminance };
468
+ }
469
+ export function replayFramesLookSimilar(previous, current) {
470
+ if (!previous
471
+ || previous.width !== current.width
472
+ || previous.height !== current.height
473
+ || previous.luminance.length !== current.luminance.length)
474
+ return false;
475
+ let totalDifference = 0;
476
+ let changedSamples = 0;
477
+ for (let index = 0; index < current.luminance.length; index += 1) {
478
+ const difference = Math.abs(current.luminance[index] - previous.luminance[index]);
479
+ totalDifference += difference;
480
+ if (difference >= 12)
481
+ changedSamples += 1;
482
+ }
483
+ const averageDifference = totalDifference / current.luminance.length;
484
+ const changedRatio = changedSamples / current.luminance.length;
485
+ return averageDifference <= 2.5 && changedRatio <= 0.01;
486
+ }
487
+ function privacyRegionsKey(regions) {
488
+ return regions.map((region) => (`${region.mode}:${region.x}:${region.y}:${region.width}:${region.height}`)).join('|');
489
+ }
490
+ export function frameFingerprint(bytes) {
491
+ let hash = 2166136261;
492
+ const stride = Math.max(1, Math.floor(bytes.length / 8192));
493
+ for (let index = 0; index < bytes.length; index += stride) {
494
+ hash ^= bytes[index] || 0;
495
+ hash = Math.imul(hash, 16777619);
496
+ }
497
+ return `${bytes.length.toString(16)}-${(hash >>> 0).toString(16)}`;
498
+ }
499
+ export function applyPrivacyRegions(rgba, width, height, regions) {
500
+ regions.forEach((region) => {
501
+ const startX = clamp(Math.floor(region.x), 0, width);
502
+ const startY = clamp(Math.floor(region.y), 0, height);
503
+ const endX = clamp(Math.ceil(region.x + region.width), 0, width);
504
+ const endY = clamp(Math.ceil(region.y + region.height), 0, height);
505
+ const color = region.mode === 'hide' ? 0 : 128;
506
+ for (let y = startY; y < endY; y += 1) {
507
+ for (let x = startX; x < endX; x += 1) {
508
+ const offset = (y * width + x) * 4;
509
+ rgba[offset] = color;
510
+ rgba[offset + 1] = color;
511
+ rgba[offset + 2] = color;
512
+ rgba[offset + 3] = 255;
513
+ }
514
+ }
515
+ });
516
+ }
517
+ function clamp(value, minimum, maximum) {
518
+ return Math.min(maximum, Math.max(minimum, value));
519
+ }
520
+ //# sourceMappingURL=replay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../../../../src/core/replay.ts"],"names":[],"mappings":"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"}