@truewatchtech/cocos-sdk 0.1.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +51 -0
- package/THIRD_PARTY_NOTICES +5 -0
- package/bin/cli.cjs +130 -0
- package/creator2/package.json +4 -0
- package/creator3/package.json +5 -0
- package/dist/creator2/core/auto-tracking.d.ts +35 -0
- package/dist/creator2/core/auto-tracking.d.ts.map +1 -0
- package/dist/creator2/core/auto-tracking.js +337 -0
- package/dist/creator2/core/auto-tracking.js.map +1 -0
- package/dist/creator2/core/client.d.ts +74 -0
- package/dist/creator2/core/client.d.ts.map +1 -0
- package/dist/creator2/core/client.js +176 -0
- package/dist/creator2/core/client.js.map +1 -0
- package/dist/creator2/core/index.d.ts +3 -0
- package/dist/creator2/core/index.d.ts.map +1 -0
- package/dist/creator2/core/index.js +6 -0
- package/dist/creator2/core/index.js.map +1 -0
- package/dist/creator2/core/modules.d.ts +159 -0
- package/dist/creator2/core/modules.d.ts.map +1 -0
- package/dist/creator2/core/modules.js +319 -0
- package/dist/creator2/core/modules.js.map +1 -0
- package/dist/creator2/core/replay-budget.d.ts +28 -0
- package/dist/creator2/core/replay-budget.d.ts.map +1 -0
- package/dist/creator2/core/replay-budget.js +113 -0
- package/dist/creator2/core/replay-budget.js.map +1 -0
- package/dist/creator2/core/replay-diagnostics.d.ts +36 -0
- package/dist/creator2/core/replay-diagnostics.d.ts.map +1 -0
- package/dist/creator2/core/replay-diagnostics.js +40 -0
- package/dist/creator2/core/replay-diagnostics.js.map +1 -0
- package/dist/creator2/core/replay-encoding.d.ts +31 -0
- package/dist/creator2/core/replay-encoding.d.ts.map +1 -0
- package/dist/creator2/core/replay-encoding.js +63 -0
- package/dist/creator2/core/replay-encoding.js.map +1 -0
- package/dist/creator2/core/replay-pixels.d.ts +3 -0
- package/dist/creator2/core/replay-pixels.d.ts.map +1 -0
- package/dist/creator2/core/replay-pixels.js +16 -0
- package/dist/creator2/core/replay-pixels.js.map +1 -0
- package/dist/creator2/core/replay-privacy.d.ts +15 -0
- package/dist/creator2/core/replay-privacy.d.ts.map +1 -0
- package/dist/creator2/core/replay-privacy.js +36 -0
- package/dist/creator2/core/replay-privacy.js.map +1 -0
- package/dist/creator2/core/replay.d.ts +97 -0
- package/dist/creator2/core/replay.d.ts.map +1 -0
- package/dist/creator2/core/replay.js +578 -0
- package/dist/creator2/core/replay.js.map +1 -0
- package/dist/creator2/core/transport.d.ts +16 -0
- package/dist/creator2/core/transport.d.ts.map +1 -0
- package/dist/creator2/core/transport.js +33 -0
- package/dist/creator2/core/transport.js.map +1 -0
- package/dist/creator2/core/types.d.ts +260 -0
- package/dist/creator2/core/types.d.ts.map +1 -0
- package/dist/creator2/core/types.js +3 -0
- package/dist/creator2/core/types.js.map +1 -0
- package/dist/creator2/core/validation.d.ts +14 -0
- package/dist/creator2/core/validation.d.ts.map +1 -0
- package/dist/creator2/core/validation.js +81 -0
- package/dist/creator2/core/validation.js.map +1 -0
- package/dist/creator2/core/version.d.ts +9 -0
- package/dist/creator2/core/version.d.ts.map +1 -0
- package/dist/creator2/core/version.js +14 -0
- package/dist/creator2/core/version.js.map +1 -0
- package/dist/creator2/creator2/auto.d.ts +9 -0
- package/dist/creator2/creator2/auto.d.ts.map +1 -0
- package/dist/creator2/creator2/auto.js +65 -0
- package/dist/creator2/creator2/auto.js.map +1 -0
- package/dist/creator2/creator2/capture.d.ts +17 -0
- package/dist/creator2/creator2/capture.d.ts.map +1 -0
- package/dist/creator2/creator2/capture.js +175 -0
- package/dist/creator2/creator2/capture.js.map +1 -0
- package/dist/creator2/creator2/index.d.ts +12 -0
- package/dist/creator2/creator2/index.d.ts.map +1 -0
- package/dist/creator2/creator2/index.js +41 -0
- package/dist/creator2/creator2/index.js.map +1 -0
- package/dist/creator2/creator2/transport.d.ts +7 -0
- package/dist/creator2/creator2/transport.d.ts.map +1 -0
- package/dist/creator2/creator2/transport.js +34 -0
- package/dist/creator2/creator2/transport.js.map +1 -0
- package/dist/creator3/core/auto-tracking.d.ts +35 -0
- package/dist/creator3/core/auto-tracking.d.ts.map +1 -0
- package/dist/creator3/core/auto-tracking.js +247 -0
- package/dist/creator3/core/auto-tracking.js.map +1 -0
- package/dist/creator3/core/client.d.ts +74 -0
- package/dist/creator3/core/client.d.ts.map +1 -0
- package/dist/creator3/core/client.js +158 -0
- package/dist/creator3/core/client.js.map +1 -0
- package/dist/creator3/core/index.d.ts +3 -0
- package/dist/creator3/core/index.d.ts.map +1 -0
- package/dist/creator3/core/index.js +2 -0
- package/dist/creator3/core/index.js.map +1 -0
- package/dist/creator3/core/modules.d.ts +159 -0
- package/dist/creator3/core/modules.d.ts.map +1 -0
- package/dist/creator3/core/modules.js +293 -0
- package/dist/creator3/core/modules.js.map +1 -0
- package/dist/creator3/core/replay-budget.d.ts +28 -0
- package/dist/creator3/core/replay-budget.d.ts.map +1 -0
- package/dist/creator3/core/replay-budget.js +105 -0
- package/dist/creator3/core/replay-budget.js.map +1 -0
- package/dist/creator3/core/replay-diagnostics.d.ts +36 -0
- package/dist/creator3/core/replay-diagnostics.d.ts.map +1 -0
- package/dist/creator3/core/replay-diagnostics.js +36 -0
- package/dist/creator3/core/replay-diagnostics.js.map +1 -0
- package/dist/creator3/core/replay-encoding.d.ts +31 -0
- package/dist/creator3/core/replay-encoding.d.ts.map +1 -0
- package/dist/creator3/core/replay-encoding.js +62 -0
- package/dist/creator3/core/replay-encoding.js.map +1 -0
- package/dist/creator3/core/replay-pixels.d.ts +3 -0
- package/dist/creator3/core/replay-pixels.d.ts.map +1 -0
- package/dist/creator3/core/replay-pixels.js +13 -0
- package/dist/creator3/core/replay-pixels.js.map +1 -0
- package/dist/creator3/core/replay-privacy.d.ts +15 -0
- package/dist/creator3/core/replay-privacy.d.ts.map +1 -0
- package/dist/creator3/core/replay-privacy.js +33 -0
- package/dist/creator3/core/replay-privacy.js.map +1 -0
- package/dist/creator3/core/replay.d.ts +97 -0
- package/dist/creator3/core/replay.d.ts.map +1 -0
- package/dist/creator3/core/replay.js +520 -0
- package/dist/creator3/core/replay.js.map +1 -0
- package/dist/creator3/core/transport.d.ts +16 -0
- package/dist/creator3/core/transport.d.ts.map +1 -0
- package/dist/creator3/core/transport.js +27 -0
- package/dist/creator3/core/transport.js.map +1 -0
- package/dist/creator3/core/types.d.ts +260 -0
- package/dist/creator3/core/types.d.ts.map +1 -0
- package/dist/creator3/core/types.js +2 -0
- package/dist/creator3/core/types.js.map +1 -0
- package/dist/creator3/core/validation.d.ts +14 -0
- package/dist/creator3/core/validation.d.ts.map +1 -0
- package/dist/creator3/core/validation.js +75 -0
- package/dist/creator3/core/validation.js.map +1 -0
- package/dist/creator3/core/version.d.ts +9 -0
- package/dist/creator3/core/version.d.ts.map +1 -0
- package/dist/creator3/core/version.js +11 -0
- package/dist/creator3/core/version.js.map +1 -0
- package/dist/creator3/creator3/auto.d.ts +9 -0
- package/dist/creator3/creator3/auto.d.ts.map +1 -0
- package/dist/creator3/creator3/auto.js +73 -0
- package/dist/creator3/creator3/auto.js.map +1 -0
- package/dist/creator3/creator3/capture.d.ts +17 -0
- package/dist/creator3/creator3/capture.d.ts.map +1 -0
- package/dist/creator3/creator3/capture.js +119 -0
- package/dist/creator3/creator3/capture.js.map +1 -0
- package/dist/creator3/creator3/index.d.ts +12 -0
- package/dist/creator3/creator3/index.d.ts.map +1 -0
- package/dist/creator3/creator3/index.js +23 -0
- package/dist/creator3/creator3/index.js.map +1 -0
- package/dist/creator3/creator3/replay-render-cycle.d.ts +9 -0
- package/dist/creator3/creator3/replay-render-cycle.d.ts.map +1 -0
- package/dist/creator3/creator3/replay-render-cycle.js +12 -0
- package/dist/creator3/creator3/replay-render-cycle.js.map +1 -0
- package/dist/creator3/creator3/transport.d.ts +8 -0
- package/dist/creator3/creator3/transport.d.ts.map +1 -0
- package/dist/creator3/creator3/transport.js +24 -0
- package/dist/creator3/creator3/transport.js.map +1 -0
- package/dist/creator3/package.json +1 -0
- package/extensions/creator2/install-native.cjs +333 -0
- package/extensions/creator2/main.js +23 -0
- package/extensions/creator2/package.json +6 -0
- package/extensions/creator3/dist/builder.js +9 -0
- package/extensions/creator3/dist/hooks.js +70 -0
- package/extensions/creator3/dist/main.js +4 -0
- package/extensions/creator3/install-native.cjs +333 -0
- package/extensions/creator3/package.json +10 -0
- package/native/android/src/main/java/com/ft/sdk/cocos/FTCocosBridge.java +532 -0
- package/native/android/src/main/java/com/ft/sdk/cocos/FTCocosBridgeProvider.java +70 -0
- package/native/ios/FTCocosBridge.h +10 -0
- package/native/ios/FTCocosBridge.m +470 -0
- package/native/ios/FTCocosBridge.podspec +18 -0
- package/package.json +60 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
13
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
14
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
15
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
16
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
17
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
18
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
19
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
20
|
+
});
|
|
21
|
+
};
|
|
22
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
23
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
24
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
25
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
26
|
+
function step(op) {
|
|
27
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
28
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
29
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
30
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
31
|
+
switch (op[0]) {
|
|
32
|
+
case 0: case 1: t = op; break;
|
|
33
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
34
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
35
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
36
|
+
default:
|
|
37
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
38
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
39
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
40
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
41
|
+
if (t[2]) _.ops.pop();
|
|
42
|
+
_.trys.pop(); continue;
|
|
43
|
+
}
|
|
44
|
+
op = body.call(thisArg, _);
|
|
45
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
46
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
50
|
+
exports.FTCreator2CanvasCapture = void 0;
|
|
51
|
+
var replay_js_1 = require("../core/replay.js");
|
|
52
|
+
var replay_pixels_js_1 = require("../core/replay-pixels.js");
|
|
53
|
+
var replay_privacy_js_1 = require("../core/replay-privacy.js");
|
|
54
|
+
var FTCreator2CanvasCapture = /** @class */ (function () {
|
|
55
|
+
function FTCreator2CanvasCapture() {
|
|
56
|
+
this.privacy = new Map();
|
|
57
|
+
}
|
|
58
|
+
FTCreator2CanvasCapture.prototype.setCamera = function (camera) {
|
|
59
|
+
this.camera = camera;
|
|
60
|
+
};
|
|
61
|
+
FTCreator2CanvasCapture.prototype.setPrivacy = function (node, mode) {
|
|
62
|
+
if (mode === 'unmask')
|
|
63
|
+
this.privacy.delete(node);
|
|
64
|
+
else
|
|
65
|
+
this.privacy.set(node, mode);
|
|
66
|
+
};
|
|
67
|
+
FTCreator2CanvasCapture.prototype.getViewportSize = function () {
|
|
68
|
+
var _a, _b;
|
|
69
|
+
var visible = ((_b = (_a = cc.view).getVisibleSizeInPixel) === null || _b === void 0 ? void 0 : _b.call(_a)) || cc.view.getVisibleSize();
|
|
70
|
+
return visible ? { width: visible.width, height: visible.height } : undefined;
|
|
71
|
+
};
|
|
72
|
+
FTCreator2CanvasCapture.prototype.capture = function (maxImageDimension) {
|
|
73
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
74
|
+
var scene, camera, visible, scale, width, height, texture, previous, previousClearFlags, pixels, privacyRegions;
|
|
75
|
+
var _a, _b;
|
|
76
|
+
return __generator(this, function (_c) {
|
|
77
|
+
switch (_c.label) {
|
|
78
|
+
case 0:
|
|
79
|
+
scene = cc.director.getScene();
|
|
80
|
+
camera = this.camera || ((_a = scene === null || scene === void 0 ? void 0 : scene.getComponentInChildren) === null || _a === void 0 ? void 0 : _a.call(scene, cc.Camera));
|
|
81
|
+
if (!camera)
|
|
82
|
+
return [2 /*return*/, undefined];
|
|
83
|
+
visible = this.getViewportSize();
|
|
84
|
+
if (!visible)
|
|
85
|
+
return [2 /*return*/, undefined];
|
|
86
|
+
scale = Math.min(1, maxImageDimension / Math.max(visible.width, visible.height));
|
|
87
|
+
width = Math.max(1, Math.round(visible.width * scale));
|
|
88
|
+
height = Math.max(1, Math.round(visible.height * scale));
|
|
89
|
+
texture = new cc.RenderTexture();
|
|
90
|
+
texture.initWithSize(width, height, (_b = cc.gfx) === null || _b === void 0 ? void 0 : _b.RB_FMT_D24S8);
|
|
91
|
+
previous = camera.targetTexture;
|
|
92
|
+
previousClearFlags = camera.clearFlags;
|
|
93
|
+
privacyRegions = [];
|
|
94
|
+
_c.label = 1;
|
|
95
|
+
case 1:
|
|
96
|
+
_c.trys.push([1, , 3, 4]);
|
|
97
|
+
// Creator 2 cameras clear only depth and stencil by default. A fresh
|
|
98
|
+
// RenderTexture can therefore expose stale GPU color data anywhere the
|
|
99
|
+
// scene does not draw, which appears as overlapping strips in replay.
|
|
100
|
+
camera.clearFlags = previousClearFlags | cc.Camera.ClearFlags.COLOR;
|
|
101
|
+
camera.targetTexture = texture;
|
|
102
|
+
return [4 /*yield*/, new Promise(function (resolve) { return cc.director.once(cc.Director.EVENT_AFTER_DRAW, resolve); })];
|
|
103
|
+
case 2:
|
|
104
|
+
_c.sent();
|
|
105
|
+
pixels = texture.readPixels();
|
|
106
|
+
if (pixels)
|
|
107
|
+
privacyRegions = this.collectPrivacyRegions(camera, width, height, visible.width, visible.height);
|
|
108
|
+
return [3 /*break*/, 4];
|
|
109
|
+
case 3:
|
|
110
|
+
camera.targetTexture = previous;
|
|
111
|
+
camera.clearFlags = previousClearFlags;
|
|
112
|
+
texture.destroy();
|
|
113
|
+
return [7 /*endfinally*/];
|
|
114
|
+
case 4:
|
|
115
|
+
if (!pixels)
|
|
116
|
+
return [2 /*return*/, undefined];
|
|
117
|
+
// Creator 2 native rendering uses OpenGL, including on iOS. RenderTexture
|
|
118
|
+
// pixels therefore use a bottom-left origin and must be normalized before
|
|
119
|
+
// PNG encoding and top-left-based privacy-region masking.
|
|
120
|
+
(0, replay_pixels_js_1.flipRgbaRows)(pixels, width, height);
|
|
121
|
+
return [2 /*return*/, {
|
|
122
|
+
rgba: pixels,
|
|
123
|
+
width: width,
|
|
124
|
+
height: height,
|
|
125
|
+
timestamp: Date.now(),
|
|
126
|
+
privacyRegions: privacyRegions,
|
|
127
|
+
}];
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
};
|
|
132
|
+
FTCreator2CanvasCapture.prototype.persist = function (frame_1) {
|
|
133
|
+
return __awaiter(this, arguments, void 0, function (frame, fingerprint) {
|
|
134
|
+
var path;
|
|
135
|
+
if (fingerprint === void 0) { fingerprint = (0, replay_js_1.frameFingerprint)(frame.rgba); }
|
|
136
|
+
return __generator(this, function (_a) {
|
|
137
|
+
path = "".concat(jsb.fileUtils.getWritablePath(), "cocos-sdk-replay-").concat(fingerprint, ".rgba");
|
|
138
|
+
if (!jsb.fileUtils.writeDataToFile(frame.rgba, path)) {
|
|
139
|
+
throw new Error("Unable to persist replay frame: ".concat(path));
|
|
140
|
+
}
|
|
141
|
+
return [2 /*return*/, { path: path, width: frame.width, height: frame.height, timestamp: frame.timestamp, fingerprint: fingerprint }];
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
};
|
|
145
|
+
FTCreator2CanvasCapture.prototype.disposeStoredFrame = function (frame) {
|
|
146
|
+
if (jsb.fileUtils.isFileExist(frame.path))
|
|
147
|
+
jsb.fileUtils.removeFile(frame.path);
|
|
148
|
+
};
|
|
149
|
+
FTCreator2CanvasCapture.prototype.collectPrivacyRegions = function (camera, width, height, sourceWidth, sourceHeight) {
|
|
150
|
+
var _a, _b, _c, _d, _e;
|
|
151
|
+
var nodes = new Map(this.privacy);
|
|
152
|
+
(_c = (_b = (_a = cc.director.getScene()) === null || _a === void 0 ? void 0 : _a.getComponentsInChildren) === null || _b === void 0 ? void 0 : _b.call(_a, cc.EditBox)) === null || _c === void 0 ? void 0 : _c.forEach(function (editBox) {
|
|
153
|
+
if (!nodes.has(editBox.node))
|
|
154
|
+
nodes.set(editBox.node, 'mask');
|
|
155
|
+
});
|
|
156
|
+
var screenWidth = ((_d = cc.visibleRect) === null || _d === void 0 ? void 0 : _d.width) || sourceWidth;
|
|
157
|
+
var screenHeight = ((_e = cc.visibleRect) === null || _e === void 0 ? void 0 : _e.height) || sourceHeight;
|
|
158
|
+
var regions = [];
|
|
159
|
+
nodes.forEach(function (mode, node) {
|
|
160
|
+
var _a, _b, _c;
|
|
161
|
+
var bounds = (_a = node === null || node === void 0 ? void 0 : node.getBoundingBoxToWorld) === null || _a === void 0 ? void 0 : _a.call(node);
|
|
162
|
+
if (!bounds)
|
|
163
|
+
return;
|
|
164
|
+
var worldZ = (_c = (_b = node.getWorldPosition) === null || _b === void 0 ? void 0 : _b.call(node, cc.v3(0, 0, 0)).z) !== null && _c !== void 0 ? _c : 0;
|
|
165
|
+
var projected = (0, replay_privacy_js_1.projectPrivacyBounds)(bounds, width, height, screenWidth, screenHeight, function (x, y) { var _a; return (_a = camera.getWorldToScreenPoint) === null || _a === void 0 ? void 0 : _a.call(camera, cc.v3(x, y, worldZ)); });
|
|
166
|
+
if (!projected)
|
|
167
|
+
throw new Error('Unable to project Replay privacy bounds');
|
|
168
|
+
regions.push(__assign(__assign({}, projected), { mode: mode === 'hide' ? 'hide' : 'mask' }));
|
|
169
|
+
});
|
|
170
|
+
return regions;
|
|
171
|
+
};
|
|
172
|
+
return FTCreator2CanvasCapture;
|
|
173
|
+
}());
|
|
174
|
+
exports.FTCreator2CanvasCapture = FTCreator2CanvasCapture;
|
|
175
|
+
//# sourceMappingURL=capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../../../src/creator2/capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { FTCocosSDK } from '../core/client.js';
|
|
2
|
+
/** Shared SDK entry point for Cocos Creator 2.4 applications. */
|
|
3
|
+
export declare const truewatchSdk: FTCocosSDK;
|
|
4
|
+
/**
|
|
5
|
+
* Selects the Cocos Creator 2 camera used to capture Session Replay frames.
|
|
6
|
+
* Call this after the camera is available and before starting Replay.
|
|
7
|
+
*
|
|
8
|
+
* @param camera - Active `cc.Camera` instance.
|
|
9
|
+
*/
|
|
10
|
+
export declare function setReplayCamera(camera: unknown): void;
|
|
11
|
+
export * from '../core/index.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/creator2/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAgB/C,iEAAiE;AACjE,eAAO,MAAM,YAAY,YAA0D,CAAC;AAEpF;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAErD;AAED,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.truewatchSdk = void 0;
|
|
18
|
+
exports.setReplayCamera = setReplayCamera;
|
|
19
|
+
var auto_tracking_js_1 = require("../core/auto-tracking.js");
|
|
20
|
+
var client_js_1 = require("../core/client.js");
|
|
21
|
+
var modules_js_1 = require("../core/modules.js");
|
|
22
|
+
var auto_js_1 = require("./auto.js");
|
|
23
|
+
var capture_js_1 = require("./capture.js");
|
|
24
|
+
var transport_js_1 = require("./transport.js");
|
|
25
|
+
var transport = new transport_js_1.FTCreator2Transport();
|
|
26
|
+
var capture = new capture_js_1.FTCreator2CanvasCapture();
|
|
27
|
+
var hooks = new auto_js_1.FTCreator2TrackingHooks();
|
|
28
|
+
var autoTracking = new auto_tracking_js_1.FTDefaultAutoTracking(new modules_js_1.FTRUM(transport), new modules_js_1.FTLogger(transport), new modules_js_1.FTTrace(transport), hooks);
|
|
29
|
+
/** Shared SDK entry point for Cocos Creator 2.4 applications. */
|
|
30
|
+
exports.truewatchSdk = new client_js_1.FTCocosSDK(transport, capture, autoTracking, hooks);
|
|
31
|
+
/**
|
|
32
|
+
* Selects the Cocos Creator 2 camera used to capture Session Replay frames.
|
|
33
|
+
* Call this after the camera is available and before starting Replay.
|
|
34
|
+
*
|
|
35
|
+
* @param camera - Active `cc.Camera` instance.
|
|
36
|
+
*/
|
|
37
|
+
function setReplayCamera(camera) {
|
|
38
|
+
capture.setCamera(camera);
|
|
39
|
+
}
|
|
40
|
+
__exportStar(require("../core/index.js"), exports);
|
|
41
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/creator2/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA0BA,0CAEC;AA5BD,6DAAiE;AACjE,+CAA+C;AAC/C,iDAA8D;AAC9D,qCAAoD;AACpD,2CAAuD;AACvD,+CAAqD;AAErD,IAAM,SAAS,GAAG,IAAI,kCAAmB,EAAE,CAAC;AAC5C,IAAM,OAAO,GAAG,IAAI,oCAAuB,EAAE,CAAC;AAC9C,IAAM,KAAK,GAAG,IAAI,iCAAuB,EAAE,CAAC;AAC5C,IAAM,YAAY,GAAG,IAAI,wCAAqB,CAC5C,IAAI,kBAAK,CAAC,SAAS,CAAC,EACpB,IAAI,qBAAQ,CAAC,SAAS,CAAC,EACvB,IAAI,oBAAO,CAAC,SAAS,CAAC,EACtB,KAAK,CACN,CAAC;AAEF,iEAAiE;AACpD,QAAA,YAAY,GAAG,IAAI,sBAAU,CAAC,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;AAEpF;;;;;GAKG;AACH,SAAgB,eAAe,CAAC,MAAe;IAC7C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED,mDAAiC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type FTNativeTransport } from '../core/transport.js';
|
|
2
|
+
import type { FTValue } from '../core/types.js';
|
|
3
|
+
export declare class FTCreator2Transport implements FTNativeTransport {
|
|
4
|
+
readonly platform: 'android' | 'ios' | 'unsupported';
|
|
5
|
+
invoke<T = FTValue>(method: string, payload?: unknown): T | undefined;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../../../src/creator2/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,qBAAa,mBAAoB,YAAW,iBAAiB;IAC3D,QAAQ,CAAC,QAAQ,EAAE,SAAS,GAAG,KAAK,GAAG,aAAa,CAA6B;IAEjF,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,CAAC,GAAG,SAAS;CActE"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FTCreator2Transport = void 0;
|
|
4
|
+
var transport_js_1 = require("../core/transport.js");
|
|
5
|
+
var FTCreator2Transport = /** @class */ (function () {
|
|
6
|
+
function FTCreator2Transport() {
|
|
7
|
+
this.platform = resolveCreator2Platform();
|
|
8
|
+
}
|
|
9
|
+
FTCreator2Transport.prototype.invoke = function (method, payload) {
|
|
10
|
+
if (this.platform === 'unsupported')
|
|
11
|
+
return undefined;
|
|
12
|
+
var json = payload === undefined ? '{}' : JSON.stringify(payload);
|
|
13
|
+
var raw = this.platform === 'android'
|
|
14
|
+
? jsb.reflection.callStaticMethod('com/ft/sdk/cocos/FTCocosBridge', 'invoke', '(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;', method, json)
|
|
15
|
+
: jsb.reflection.callStaticMethod('FTCocosBridge', 'invoke:payload:', method, json);
|
|
16
|
+
return (0, transport_js_1.parseTransportResponse)(raw);
|
|
17
|
+
};
|
|
18
|
+
return FTCreator2Transport;
|
|
19
|
+
}());
|
|
20
|
+
exports.FTCreator2Transport = FTCreator2Transport;
|
|
21
|
+
function resolveCreator2Platform() {
|
|
22
|
+
var _a, _b;
|
|
23
|
+
var isNative = (typeof CC_JSB !== 'undefined' && CC_JSB) || typeof jsb !== 'undefined';
|
|
24
|
+
if (!isNative)
|
|
25
|
+
return 'unsupported';
|
|
26
|
+
if ((typeof CC_ANDROID !== 'undefined' && CC_ANDROID)
|
|
27
|
+
|| (typeof cc !== 'undefined' && ((_a = cc.sys) === null || _a === void 0 ? void 0 : _a.os) === cc.sys.OS_ANDROID))
|
|
28
|
+
return 'android';
|
|
29
|
+
if ((typeof CC_IOS !== 'undefined' && CC_IOS)
|
|
30
|
+
|| (typeof cc !== 'undefined' && ((_b = cc.sys) === null || _b === void 0 ? void 0 : _b.os) === cc.sys.OS_IOS))
|
|
31
|
+
return 'ios';
|
|
32
|
+
return 'unsupported';
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../../src/creator2/transport.ts"],"names":[],"mappings":";;;AAAA,qDAAsF;AAGtF;IAAA;QACW,aAAQ,GAAsC,uBAAuB,EAAE,CAAC;IAgBnF,CAAC;IAdC,oCAAM,GAAN,UAAoB,MAAc,EAAE,OAAiB;QACnD,IAAI,IAAI,CAAC,QAAQ,KAAK,aAAa;YAAE,OAAO,SAAS,CAAC;QACtD,IAAM,IAAI,GAAG,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QACpE,IAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,KAAK,SAAS;YACrC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAC7B,gCAAgC,EAChC,QAAQ,EACR,0DAA0D,EAC1D,MAAM,EACN,IAAI,CACL;YACH,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,gBAAgB,CAAC,eAAe,EAAE,iBAAiB,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;QACtF,OAAO,IAAA,qCAAsB,EAAI,GAAG,CAAC,CAAC;IACxC,CAAC;IACH,0BAAC;AAAD,CAAC,AAjBD,IAiBC;AAjBY,kDAAmB;AAmBhC,SAAS,uBAAuB;;IAC9B,IAAM,QAAQ,GAAG,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,KAAK,WAAW,CAAC;IACzF,IAAI,CAAC,QAAQ;QAAE,OAAO,aAAa,CAAC;IACpC,IACE,CAAC,OAAO,UAAU,KAAK,WAAW,IAAI,UAAU,CAAC;WAC9C,CAAC,OAAO,EAAE,KAAK,WAAW,IAAI,CAAA,MAAA,EAAE,CAAC,GAAG,0CAAE,EAAE,MAAK,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC;QAClE,OAAO,SAAS,CAAC;IACnB,IACE,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC;WACtC,CAAC,OAAO,EAAE,KAAK,WAAW,IAAI,CAAA,MAAA,EAAE,CAAC,GAAG,0CAAE,EAAE,MAAK,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC;QAC9D,OAAO,KAAK,CAAC;IACf,OAAO,aAAa,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { FTLogger, FTRUM, FTTrace } from './modules.js';
|
|
2
|
+
import type { FTAutoTrackingController } from './client.js';
|
|
3
|
+
import type { FTAutoTrackingConfig, FTAttributes } from './types.js';
|
|
4
|
+
export interface FTEngineTrackingHooks {
|
|
5
|
+
onSceneChanged(callback: (name: string) => void, includeCurrent?: boolean): () => void;
|
|
6
|
+
onAction(callback: (name: string, attributes?: FTAttributes) => void): () => void;
|
|
7
|
+
}
|
|
8
|
+
interface FTGlobalWithFetch {
|
|
9
|
+
fetch?: typeof fetch;
|
|
10
|
+
XMLHttpRequest?: typeof XMLHttpRequest;
|
|
11
|
+
console?: Console;
|
|
12
|
+
addEventListener?: typeof globalThis.addEventListener;
|
|
13
|
+
removeEventListener?: typeof globalThis.removeEventListener;
|
|
14
|
+
}
|
|
15
|
+
export declare class FTDefaultAutoTracking implements FTAutoTrackingController {
|
|
16
|
+
private readonly rum;
|
|
17
|
+
private readonly logger;
|
|
18
|
+
private readonly trace;
|
|
19
|
+
private readonly hooks;
|
|
20
|
+
private readonly target;
|
|
21
|
+
private stops;
|
|
22
|
+
private activeView;
|
|
23
|
+
constructor(rum: FTRUM, logger: FTLogger, trace: FTTrace, hooks: FTEngineTrackingHooks, target?: FTGlobalWithFetch);
|
|
24
|
+
start(config: FTAutoTrackingConfig, viewName?: string): void;
|
|
25
|
+
stop(): void;
|
|
26
|
+
private installSceneTracking;
|
|
27
|
+
private switchView;
|
|
28
|
+
private installActionTracking;
|
|
29
|
+
private installErrorTracking;
|
|
30
|
+
private installConsoleTracking;
|
|
31
|
+
private installFetchTracking;
|
|
32
|
+
private installXhrTracking;
|
|
33
|
+
}
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=auto-tracking.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-tracking.d.ts","sourceRoot":"","sources":["../../../../../src/core/auto-tracking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,IAAI,CAAC;IACvF,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,YAAY,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACnF;AAED,UAAU,iBAAiB;IACzB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,cAAc,CAAC;IACvC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,UAAU,CAAC,gBAAgB,CAAC;IACtD,mBAAmB,CAAC,EAAE,OAAO,UAAU,CAAC,mBAAmB,CAAC;CAC7D;AAED,qBAAa,qBAAsB,YAAW,wBAAwB;IAKlE,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IARzB,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,UAAU,CAAqB;gBAGpB,GAAG,EAAE,KAAK,EACV,MAAM,EAAE,QAAQ,EAChB,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,qBAAqB,EAC5B,MAAM,GAAE,iBAA8B;IAGzD,KAAK,CAAC,MAAM,EAAE,oBAAoB,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAa5D,IAAI,IAAI,IAAI;IAQZ,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,qBAAqB;IAM7B,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,sBAAsB;IA2B9B,OAAO,CAAC,oBAAoB;IAwC5B,OAAO,CAAC,kBAAkB;CAuD3B"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
export class FTDefaultAutoTracking {
|
|
2
|
+
constructor(rum, logger, trace, hooks, target = globalThis) {
|
|
3
|
+
this.rum = rum;
|
|
4
|
+
this.logger = logger;
|
|
5
|
+
this.trace = trace;
|
|
6
|
+
this.hooks = hooks;
|
|
7
|
+
this.target = target;
|
|
8
|
+
this.stops = [];
|
|
9
|
+
}
|
|
10
|
+
start(config, viewName) {
|
|
11
|
+
this.stop();
|
|
12
|
+
if (viewName)
|
|
13
|
+
this.switchView(viewName);
|
|
14
|
+
if (config.scenes)
|
|
15
|
+
this.installSceneTracking(viewName === undefined);
|
|
16
|
+
if (config.actions)
|
|
17
|
+
this.installActionTracking();
|
|
18
|
+
if (config.errors)
|
|
19
|
+
this.installErrorTracking();
|
|
20
|
+
if (config.console)
|
|
21
|
+
this.installConsoleTracking();
|
|
22
|
+
if (config.network) {
|
|
23
|
+
this.installFetchTracking();
|
|
24
|
+
this.installXhrTracking();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
stop() {
|
|
28
|
+
this.stops.splice(0).reverse().forEach((stop) => stop());
|
|
29
|
+
if (this.activeView) {
|
|
30
|
+
this.rum.stopView();
|
|
31
|
+
this.activeView = undefined;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
installSceneTracking(includeCurrent) {
|
|
35
|
+
this.stops.push(this.hooks.onSceneChanged((name) => {
|
|
36
|
+
this.switchView(name);
|
|
37
|
+
}, includeCurrent));
|
|
38
|
+
}
|
|
39
|
+
switchView(name) {
|
|
40
|
+
if (this.activeView)
|
|
41
|
+
this.rum.stopView();
|
|
42
|
+
this.activeView = name;
|
|
43
|
+
this.rum.startView(name);
|
|
44
|
+
}
|
|
45
|
+
installActionTracking() {
|
|
46
|
+
this.stops.push(this.hooks.onAction((name, attributes) => this.rum.startAction(name, 'click', attributes)));
|
|
47
|
+
}
|
|
48
|
+
installErrorTracking() {
|
|
49
|
+
if (!this.target.addEventListener || !this.target.removeEventListener)
|
|
50
|
+
return;
|
|
51
|
+
const errorListener = (event) => {
|
|
52
|
+
var _a;
|
|
53
|
+
const errorEvent = event;
|
|
54
|
+
this.rum.addError(errorEvent.message || 'Uncaught JavaScript error', ((_a = errorEvent.error) === null || _a === void 0 ? void 0 : _a.stack) || `${errorEvent.filename || ''}:${errorEvent.lineno || 0}`);
|
|
55
|
+
};
|
|
56
|
+
const rejectionListener = (event) => {
|
|
57
|
+
const reason = event.reason;
|
|
58
|
+
this.rum.addError(reason instanceof Error ? reason.message : String(reason), reason instanceof Error ? reason.stack || '' : '', 'unhandled_promise_rejection');
|
|
59
|
+
};
|
|
60
|
+
this.target.addEventListener('error', errorListener);
|
|
61
|
+
this.target.addEventListener('unhandledrejection', rejectionListener);
|
|
62
|
+
this.stops.push(() => {
|
|
63
|
+
var _a, _b, _c, _d;
|
|
64
|
+
(_b = (_a = this.target).removeEventListener) === null || _b === void 0 ? void 0 : _b.call(_a, 'error', errorListener);
|
|
65
|
+
(_d = (_c = this.target).removeEventListener) === null || _d === void 0 ? void 0 : _d.call(_c, 'unhandledrejection', rejectionListener);
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
installConsoleTracking() {
|
|
69
|
+
const consoleObject = this.target.console;
|
|
70
|
+
if (!consoleObject)
|
|
71
|
+
return;
|
|
72
|
+
const methods = [
|
|
73
|
+
'log',
|
|
74
|
+
'info',
|
|
75
|
+
'warn',
|
|
76
|
+
'error',
|
|
77
|
+
];
|
|
78
|
+
const originals = new Map();
|
|
79
|
+
methods.forEach((method) => {
|
|
80
|
+
const original = consoleObject[method].bind(consoleObject);
|
|
81
|
+
originals.set(method, original);
|
|
82
|
+
consoleObject[method] = ((...args) => {
|
|
83
|
+
original(...args);
|
|
84
|
+
const level = method === 'warn' ? 'warning' : method === 'error' ? 'error' : 'info';
|
|
85
|
+
this.logger.log(args.map(stringifyLogValue).join(' '), level);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
this.stops.push(() => {
|
|
89
|
+
methods.forEach((method) => {
|
|
90
|
+
const original = originals.get(method);
|
|
91
|
+
if (original)
|
|
92
|
+
consoleObject[method] = original;
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
installFetchTracking() {
|
|
97
|
+
const original = this.target.fetch;
|
|
98
|
+
if (!original)
|
|
99
|
+
return;
|
|
100
|
+
const tracked = (async (input, init) => {
|
|
101
|
+
const inputObject = typeof input === 'object' ? input : undefined;
|
|
102
|
+
const url = typeof input === 'string' ? input : (inputObject === null || inputObject === void 0 ? void 0 : inputObject.url) || String(input);
|
|
103
|
+
const method = (init === null || init === void 0 ? void 0 : init.method) || (inputObject === null || inputObject === void 0 ? void 0 : inputObject.method) || 'GET';
|
|
104
|
+
const key = resourceKey();
|
|
105
|
+
const headers = createHeaders((init === null || init === void 0 ? void 0 : init.headers) || (inputObject === null || inputObject === void 0 ? void 0 : inputObject.headers));
|
|
106
|
+
forEachOwn(this.trace.getHeaders(url, key), (name, value) => setHeader(headers, name, value));
|
|
107
|
+
this.rum.startResource(key);
|
|
108
|
+
const start = nowNs();
|
|
109
|
+
try {
|
|
110
|
+
const response = await original(input, { ...init, headers });
|
|
111
|
+
const end = nowNs();
|
|
112
|
+
this.rum.stopResource(key);
|
|
113
|
+
this.rum.addResource(key, {
|
|
114
|
+
url,
|
|
115
|
+
httpMethod: method,
|
|
116
|
+
requestHeaders: headersToObject(headers),
|
|
117
|
+
responseHeaders: headersToObject(response.headers),
|
|
118
|
+
statusCode: response.status,
|
|
119
|
+
}, { fetchStartTime: start, responseStartTime: end, responseEndTime: end });
|
|
120
|
+
return response;
|
|
121
|
+
}
|
|
122
|
+
catch (error) {
|
|
123
|
+
this.rum.stopResource(key);
|
|
124
|
+
this.rum.addError(String(error), error instanceof Error ? error.stack || '' : '', 'network_error');
|
|
125
|
+
throw error;
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
this.target.fetch = tracked;
|
|
129
|
+
this.stops.push(() => {
|
|
130
|
+
this.target.fetch = original;
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
installXhrTracking() {
|
|
134
|
+
const Xhr = this.target.XMLHttpRequest;
|
|
135
|
+
if (!Xhr)
|
|
136
|
+
return;
|
|
137
|
+
const open = Xhr.prototype.open;
|
|
138
|
+
const send = Xhr.prototype.send;
|
|
139
|
+
const setRequestHeader = Xhr.prototype.setRequestHeader;
|
|
140
|
+
const metadata = new WeakMap();
|
|
141
|
+
const rum = this.rum;
|
|
142
|
+
const trace = this.trace;
|
|
143
|
+
Xhr.prototype.open = function trackedOpen(method, url, ...rest) {
|
|
144
|
+
metadata.set(this, { key: resourceKey(), method, url: String(url), headers: {} });
|
|
145
|
+
open.call(this, method, url, ...rest);
|
|
146
|
+
};
|
|
147
|
+
Xhr.prototype.setRequestHeader = function trackedHeader(name, value) {
|
|
148
|
+
const data = metadata.get(this);
|
|
149
|
+
if (data)
|
|
150
|
+
data.headers[name] = value;
|
|
151
|
+
setRequestHeader.call(this, name, value);
|
|
152
|
+
};
|
|
153
|
+
Xhr.prototype.send = function trackedSend(body) {
|
|
154
|
+
const data = metadata.get(this);
|
|
155
|
+
if (!data)
|
|
156
|
+
return send.call(this, body);
|
|
157
|
+
forEachOwn(trace.getHeaders(data.url, data.key), (name, value) => {
|
|
158
|
+
data.headers[name] = value;
|
|
159
|
+
setRequestHeader.call(this, name, value);
|
|
160
|
+
});
|
|
161
|
+
const started = nowNs();
|
|
162
|
+
rum.startResource(data.key);
|
|
163
|
+
this.addEventListener('loadend', () => {
|
|
164
|
+
const ended = nowNs();
|
|
165
|
+
rum.stopResource(data.key);
|
|
166
|
+
rum.addResource(data.key, {
|
|
167
|
+
url: data.url,
|
|
168
|
+
httpMethod: data.method,
|
|
169
|
+
requestHeaders: data.headers,
|
|
170
|
+
responseHeaders: parseXhrHeaders(this.getAllResponseHeaders()),
|
|
171
|
+
statusCode: this.status,
|
|
172
|
+
}, { fetchStartTime: started, responseStartTime: ended, responseEndTime: ended });
|
|
173
|
+
}, { once: true });
|
|
174
|
+
send.call(this, body);
|
|
175
|
+
};
|
|
176
|
+
this.stops.push(() => {
|
|
177
|
+
Xhr.prototype.open = open;
|
|
178
|
+
Xhr.prototype.send = send;
|
|
179
|
+
Xhr.prototype.setRequestHeader = setRequestHeader;
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function nowNs() {
|
|
184
|
+
return Date.now() * 1000000;
|
|
185
|
+
}
|
|
186
|
+
let resourceSequence = 0;
|
|
187
|
+
function resourceKey() {
|
|
188
|
+
resourceSequence = (resourceSequence + 1) % Number.MAX_SAFE_INTEGER;
|
|
189
|
+
return `cocos-${Date.now().toString(36)}-${resourceSequence.toString(36)}`;
|
|
190
|
+
}
|
|
191
|
+
function createHeaders(source) {
|
|
192
|
+
const HeadersConstructor = globalThis.Headers;
|
|
193
|
+
if (HeadersConstructor)
|
|
194
|
+
return new HeadersConstructor(source);
|
|
195
|
+
const result = {};
|
|
196
|
+
if (Array.isArray(source)) {
|
|
197
|
+
source.forEach(([name, value]) => { result[name] = String(value); });
|
|
198
|
+
}
|
|
199
|
+
else if (source && typeof source.forEach === 'function') {
|
|
200
|
+
source.forEach((value, name) => { result[name] = value; });
|
|
201
|
+
}
|
|
202
|
+
else if (source) {
|
|
203
|
+
forEachOwn(source, (name, value) => { result[name] = String(value); });
|
|
204
|
+
}
|
|
205
|
+
return result;
|
|
206
|
+
}
|
|
207
|
+
function setHeader(headers, name, value) {
|
|
208
|
+
if (typeof headers.set === 'function')
|
|
209
|
+
headers.set(name, value);
|
|
210
|
+
else
|
|
211
|
+
headers[name] = value;
|
|
212
|
+
}
|
|
213
|
+
function headersToObject(headers) {
|
|
214
|
+
const result = {};
|
|
215
|
+
if (typeof headers.forEach === 'function') {
|
|
216
|
+
headers.forEach((value, key) => { result[key] = value; });
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
forEachOwn(headers, (key, value) => { result[key] = value; });
|
|
220
|
+
}
|
|
221
|
+
return result;
|
|
222
|
+
}
|
|
223
|
+
function forEachOwn(value, callback) {
|
|
224
|
+
Object.keys(value).forEach((key) => callback(key, value[key]));
|
|
225
|
+
}
|
|
226
|
+
function parseXhrHeaders(raw) {
|
|
227
|
+
const result = {};
|
|
228
|
+
raw.trim().split(/[\r\n]+/).forEach((line) => {
|
|
229
|
+
const index = line.indexOf(':');
|
|
230
|
+
if (index > 0)
|
|
231
|
+
result[line.slice(0, index).trim()] = line.slice(index + 1).trim();
|
|
232
|
+
});
|
|
233
|
+
return result;
|
|
234
|
+
}
|
|
235
|
+
function stringifyLogValue(value) {
|
|
236
|
+
if (typeof value === 'string')
|
|
237
|
+
return value;
|
|
238
|
+
if (value instanceof Error)
|
|
239
|
+
return `${value.message}\n${value.stack || ''}`;
|
|
240
|
+
try {
|
|
241
|
+
return JSON.stringify(value);
|
|
242
|
+
}
|
|
243
|
+
catch (_a) {
|
|
244
|
+
return String(value);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=auto-tracking.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-tracking.js","sourceRoot":"","sources":["../../../../../src/core/auto-tracking.ts"],"names":[],"mappings":"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"}
|