@cloudcare/cocos-sdk 0.1.1-alpha.2 → 0.1.1-alpha.4

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 (95) hide show
  1. package/dist/creator2/core/auto-tracking.d.ts +3 -1
  2. package/dist/creator2/core/auto-tracking.d.ts.map +1 -1
  3. package/dist/creator2/core/auto-tracking.js +360 -164
  4. package/dist/creator2/core/auto-tracking.js.map +1 -1
  5. package/dist/creator2/core/client.d.ts.map +1 -1
  6. package/dist/creator2/core/client.js +1 -3
  7. package/dist/creator2/core/client.js.map +1 -1
  8. package/dist/creator2/core/modules.d.ts.map +1 -1
  9. package/dist/creator2/core/modules.js +2 -2
  10. package/dist/creator2/core/modules.js.map +1 -1
  11. package/dist/creator2/core/observation.d.ts +25 -0
  12. package/dist/creator2/core/observation.d.ts.map +1 -0
  13. package/dist/creator2/core/observation.js +93 -0
  14. package/dist/creator2/core/observation.js.map +1 -0
  15. package/dist/creator2/core/platform-runtime.d.ts +2 -1
  16. package/dist/creator2/core/platform-runtime.d.ts.map +1 -1
  17. package/dist/creator2/core/platform-runtime.js.map +1 -1
  18. package/dist/creator2/core/types.d.ts +9 -0
  19. package/dist/creator2/core/types.d.ts.map +1 -1
  20. package/dist/creator2/core/types.js.map +1 -1
  21. package/dist/creator2/core/validation.d.ts +1 -0
  22. package/dist/creator2/core/validation.d.ts.map +1 -1
  23. package/dist/creator2/core/validation.js +13 -0
  24. package/dist/creator2/core/validation.js.map +1 -1
  25. package/dist/creator2/core/version.d.ts +1 -3
  26. package/dist/creator2/core/version.d.ts.map +1 -1
  27. package/dist/creator2/core/version.js +2 -4
  28. package/dist/creator2/core/version.js.map +1 -1
  29. package/dist/creator2/creator2/auto.js +14 -5
  30. package/dist/creator2/creator2/auto.js.map +1 -1
  31. package/dist/creator2/native/bootstrap.js +3 -2
  32. package/dist/creator2/native/bootstrap.js.map +1 -1
  33. package/dist/creator2/native/error-bootstrap.d.ts +2 -0
  34. package/dist/creator2/native/error-bootstrap.d.ts.map +1 -0
  35. package/dist/creator2/native/error-bootstrap.js +7 -0
  36. package/dist/creator2/native/error-bootstrap.js.map +1 -0
  37. package/dist/creator2/native/jsb-errors.d.ts +21 -0
  38. package/dist/creator2/native/jsb-errors.d.ts.map +1 -0
  39. package/dist/creator2/native/jsb-errors.js +91 -0
  40. package/dist/creator2/native/jsb-errors.js.map +1 -0
  41. package/dist/creator2/web/runtime.d.ts.map +1 -1
  42. package/dist/creator2/web/runtime.js +0 -1
  43. package/dist/creator2/web/runtime.js.map +1 -1
  44. package/dist/creator3/core/auto-tracking.d.ts +3 -1
  45. package/dist/creator3/core/auto-tracking.d.ts.map +1 -1
  46. package/dist/creator3/core/auto-tracking.js +327 -91
  47. package/dist/creator3/core/auto-tracking.js.map +1 -1
  48. package/dist/creator3/core/client.d.ts.map +1 -1
  49. package/dist/creator3/core/client.js +1 -3
  50. package/dist/creator3/core/client.js.map +1 -1
  51. package/dist/creator3/core/modules.d.ts.map +1 -1
  52. package/dist/creator3/core/modules.js +4 -9
  53. package/dist/creator3/core/modules.js.map +1 -1
  54. package/dist/creator3/core/observation.d.ts +25 -0
  55. package/dist/creator3/core/observation.d.ts.map +1 -0
  56. package/dist/creator3/core/observation.js +84 -0
  57. package/dist/creator3/core/observation.js.map +1 -0
  58. package/dist/creator3/core/platform-runtime.d.ts +2 -1
  59. package/dist/creator3/core/platform-runtime.d.ts.map +1 -1
  60. package/dist/creator3/core/platform-runtime.js.map +1 -1
  61. package/dist/creator3/core/types.d.ts +9 -0
  62. package/dist/creator3/core/types.d.ts.map +1 -1
  63. package/dist/creator3/core/validation.d.ts +1 -0
  64. package/dist/creator3/core/validation.d.ts.map +1 -1
  65. package/dist/creator3/core/validation.js +11 -0
  66. package/dist/creator3/core/validation.js.map +1 -1
  67. package/dist/creator3/core/version.d.ts +1 -3
  68. package/dist/creator3/core/version.d.ts.map +1 -1
  69. package/dist/creator3/core/version.js +1 -3
  70. package/dist/creator3/core/version.js.map +1 -1
  71. package/dist/creator3/creator3/index.js +2 -2
  72. package/dist/creator3/creator3/index.js.map +1 -1
  73. package/dist/creator3/native/bootstrap.js +2 -2
  74. package/dist/creator3/native/bootstrap.js.map +1 -1
  75. package/dist/creator3/native/error-bootstrap.d.ts +2 -0
  76. package/dist/creator3/native/error-bootstrap.d.ts.map +1 -0
  77. package/dist/creator3/native/error-bootstrap.js +5 -0
  78. package/dist/creator3/native/error-bootstrap.js.map +1 -0
  79. package/dist/creator3/native/jsb-errors.d.ts +21 -0
  80. package/dist/creator3/native/jsb-errors.d.ts.map +1 -0
  81. package/dist/creator3/native/jsb-errors.js +82 -0
  82. package/dist/creator3/native/jsb-errors.js.map +1 -0
  83. package/dist/creator3/web/runtime.d.ts.map +1 -1
  84. package/dist/creator3/web/runtime.js +1 -2
  85. package/dist/creator3/web/runtime.js.map +1 -1
  86. package/extensions/creator2/install-native.cjs +19 -1
  87. package/extensions/creator3/install-native.cjs +19 -1
  88. package/native/android/src/main/java/com/ft/sdk/cocos/FTCocosBridge.java +7 -10
  89. package/native/ios/FTCocosBridge.m +6 -4
  90. package/native/ios/FTCocosBridge.podspec +1 -1
  91. package/native/jsb-errors.js +266 -0
  92. package/package.json +1 -1
  93. package/runtime/native.js +511 -243
  94. package/web/bootstrap.js +17 -6
  95. package/web/bootstrap.js.map +2 -2
package/runtime/native.js CHANGED
@@ -11,128 +11,110 @@
11
11
  };
12
12
  };
13
13
 
14
- // packages/cocos/dist/creator2/core/auto-tracking.js
15
- var require_auto_tracking = __commonJS({
16
- "packages/cocos/dist/creator2/core/auto-tracking.js": function(exports) {
14
+ // packages/cocos/dist/creator2/core/observation.js
15
+ var require_observation = __commonJS({
16
+ "packages/cocos/dist/creator2/core/observation.js": function(exports) {
17
17
  "use strict";
18
- var __assign = exports && exports.__assign || function() {
19
- __assign = Object.assign || function(t) {
20
- for (var s, i = 1, n = arguments.length; i < n; i++) {
21
- s = arguments[i];
22
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
23
- t[p] = s[p];
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.FTObservationQueue = void 0;
20
+ exports.observationState = observationState;
21
+ function observationState(target) {
22
+ return target.__FT_COCOS_OBSERVATION_STATE__ || (target.__FT_COCOS_OBSERVATION_STATE__ = { reporting: 0 });
23
+ }
24
+ var FTObservationQueue = (
25
+ /** @class */
26
+ (function() {
27
+ function FTObservationQueue2(target) {
28
+ this.target = target;
29
+ this.pending = [];
30
+ this.size = 0;
31
+ this.generation = 0;
32
+ this.dropped = 0;
33
+ this.state = observationState(target);
24
34
  }
25
- return t;
26
- };
27
- return __assign.apply(this, arguments);
28
- };
29
- var __awaiter = exports && exports.__awaiter || function(thisArg, _arguments, P, generator) {
30
- function adopt(value) {
31
- return value instanceof P ? value : new P(function(resolve) {
32
- resolve(value);
33
- });
34
- }
35
- return new (P || (P = Promise))(function(resolve, reject) {
36
- function fulfilled(value) {
37
- try {
38
- step(generator.next(value));
39
- } catch (e) {
40
- reject(e);
35
+ FTObservationQueue2.prototype.enqueue = function(run, size) {
36
+ var _this = this;
37
+ if (size === void 0) {
38
+ size = 0;
41
39
  }
42
- }
43
- function rejected(value) {
40
+ if (this.state.reporting)
41
+ return false;
42
+ if (this.pending.length >= 128 || this.size + size > 1024 * 1024) {
43
+ this.dropped++;
44
+ return false;
45
+ }
46
+ this.pending.push({ run: run, size: size });
47
+ this.size += size;
48
+ if (this.timer !== void 0)
49
+ return true;
50
+ var generation = this.generation;
44
51
  try {
45
- step(generator["throw"](value));
46
- } catch (e) {
47
- reject(e);
52
+ var schedule = this.target.setTimeout || (typeof setTimeout === "function" ? setTimeout : void 0);
53
+ var cancel = this.target.clearTimeout || (typeof clearTimeout === "function" ? clearTimeout : void 0);
54
+ if (!schedule) {
55
+ this.dropped += this.pending.length;
56
+ this.pending = [];
57
+ this.size = 0;
58
+ return false;
59
+ }
60
+ this.cancel = cancel === null || cancel === void 0 ? void 0 : cancel.bind(this.target);
61
+ this.timer = schedule.call(this.target, function() {
62
+ _this.timer = void 0;
63
+ if (generation !== _this.generation)
64
+ return;
65
+ var batch = _this.pending;
66
+ _this.pending = [];
67
+ _this.size = 0;
68
+ _this.state.reporting++;
69
+ try {
70
+ for (var _i = 0, batch_1 = batch; _i < batch_1.length; _i++) {
71
+ var task = batch_1[_i];
72
+ if (generation !== _this.generation)
73
+ break;
74
+ try {
75
+ task.run();
76
+ } catch (_a) {
77
+ }
78
+ }
79
+ } finally {
80
+ _this.state.reporting--;
81
+ }
82
+ }, 0);
83
+ return true;
84
+ } catch (_a) {
85
+ this.dropped += this.pending.length;
86
+ this.pending = [];
87
+ this.size = 0;
88
+ return false;
48
89
  }
49
- }
50
- function step(result) {
51
- result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);
52
- }
53
- step((generator = generator.apply(thisArg, _arguments || [])).next());
54
- });
55
- };
56
- var __generator = exports && exports.__generator || function(thisArg, body) {
57
- var _ = { label: 0, sent: function() {
58
- if (t[0] & 1) throw t[1];
59
- return t[1];
60
- }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
61
- return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
62
- return this;
63
- }), g;
64
- function verb(n) {
65
- return function(v) {
66
- return step([n, v]);
67
90
  };
68
- }
69
- function step(op) {
70
- if (f) throw new TypeError("Generator is already executing.");
71
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
72
- 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;
73
- if (y = 0, t) op = [op[0] & 2, t.value];
74
- switch (op[0]) {
75
- case 0:
76
- case 1:
77
- t = op;
78
- break;
79
- case 4:
80
- _.label++;
81
- return { value: op[1], done: false };
82
- case 5:
83
- _.label++;
84
- y = op[1];
85
- op = [0];
86
- continue;
87
- case 7:
88
- op = _.ops.pop();
89
- _.trys.pop();
90
- continue;
91
- default:
92
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
93
- _ = 0;
94
- continue;
95
- }
96
- if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
97
- _.label = op[1];
98
- break;
99
- }
100
- if (op[0] === 6 && _.label < t[1]) {
101
- _.label = t[1];
102
- t = op;
103
- break;
104
- }
105
- if (t && _.label < t[2]) {
106
- _.label = t[2];
107
- _.ops.push(op);
108
- break;
109
- }
110
- if (t[2]) _.ops.pop();
111
- _.trys.pop();
112
- continue;
91
+ FTObservationQueue2.prototype.stop = function() {
92
+ var _a;
93
+ this.generation++;
94
+ this.pending = [];
95
+ this.size = 0;
96
+ if (this.timer !== void 0) {
97
+ try {
98
+ (_a = this.cancel) === null || _a === void 0 ? void 0 : _a.call(this, this.timer);
99
+ } catch (_b) {
100
+ }
101
+ this.timer = void 0;
113
102
  }
114
- op = body.call(thisArg, _);
115
- } catch (e) {
116
- op = [6, e];
117
- y = 0;
118
- } finally {
119
- f = t = 0;
120
- }
121
- if (op[0] & 5) throw op[1];
122
- return { value: op[0] ? op[1] : void 0, done: true };
123
- }
124
- };
125
- var __spreadArray = exports && exports.__spreadArray || function(to, from, pack) {
126
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
127
- if (ar || !(i in from)) {
128
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
129
- ar[i] = from[i];
130
- }
131
- }
132
- return to.concat(ar || Array.prototype.slice.call(from));
133
- };
103
+ };
104
+ return FTObservationQueue2;
105
+ })()
106
+ );
107
+ exports.FTObservationQueue = FTObservationQueue;
108
+ }
109
+ });
110
+
111
+ // packages/cocos/dist/creator2/core/auto-tracking.js
112
+ var require_auto_tracking = __commonJS({
113
+ "packages/cocos/dist/creator2/core/auto-tracking.js": function(exports) {
114
+ "use strict";
134
115
  Object.defineProperty(exports, "__esModule", { value: true });
135
116
  exports.FTDefaultAutoTracking = void 0;
117
+ var observation_js_1 = require_observation();
136
118
  var FTDefaultAutoTracking = (
137
119
  /** @class */
138
120
  (function() {
@@ -147,6 +129,7 @@
147
129
  this.target = target;
148
130
  this.stops = [];
149
131
  this.networkStops = [];
132
+ this.observations = new observation_js_1.FTObservationQueue(target);
150
133
  }
151
134
  FTDefaultAutoTracking2.prototype.start = function(config, viewName, scope) {
152
135
  if (scope === void 0) {
@@ -195,6 +178,7 @@
195
178
  if (scope !== "page")
196
179
  this.networkStops.splice(0).reverse().forEach(cleanup);
197
180
  if (scope !== "network") {
181
+ this.observations.stop();
198
182
  this.stops.splice(0).reverse().forEach(cleanup);
199
183
  if (this.activeView) {
200
184
  cleanup(function() {
@@ -226,12 +210,33 @@
226
210
  };
227
211
  FTDefaultAutoTracking2.prototype.installErrorTracking = function() {
228
212
  var _this = this;
213
+ var _a;
214
+ var nativeErrors = this.target.__FT_COCOS_JSB_ERRORS__;
215
+ if ((nativeErrors === null || nativeErrors === void 0 ? void 0 : nativeErrors.protocol) === 2) {
216
+ this.stops.push(nativeErrors.subscribe(function(location, message, stack) {
217
+ var _a2;
218
+ if (message === "handlerAddedAfterPromiseRejected" || message === "rejectAfterPromiseResolved" || message === "resolveAfterPromiseResolved")
219
+ return;
220
+ var rejection = message === "unhandledRejectedPromise";
221
+ var reason = rejection ? (_a2 = stack.split(/\r?\n/, 1)[0]) === null || _a2 === void 0 ? void 0 : _a2.replace(/^Error:\s*/, "") : message;
222
+ var errorMessage = reason || message || "Uncaught JavaScript error";
223
+ var errorStack = stack || location || "";
224
+ var type = rejection ? "unhandled_promise_rejection" : "cocos_error";
225
+ _this.observations.enqueue(function() {
226
+ _this.rum.addError(errorMessage, errorStack, type);
227
+ }, 2 * (location.length + message.length + stack.length));
228
+ }));
229
+ return;
230
+ }
231
+ if (nativeErrors || typeof ((_a = this.target.jsb) === null || _a === void 0 ? void 0 : _a.onError) === "function") {
232
+ throw new Error("Cocos native error bootstrap is missing. Rerun the SDK installer and rebuild the native project.");
233
+ }
229
234
  if (!this.target.addEventListener || !this.target.removeEventListener)
230
235
  return;
231
236
  var errorListener = function(event) {
232
- var _a;
237
+ var _a2;
233
238
  var errorEvent = event;
234
- _this.rum.addError(errorEvent.message || "Uncaught JavaScript error", ((_a = errorEvent.error) === null || _a === void 0 ? void 0 : _a.stack) || "".concat(errorEvent.filename || "", ":").concat(errorEvent.lineno || 0));
239
+ _this.rum.addError(errorEvent.message || "Uncaught JavaScript error", ((_a2 = errorEvent.error) === null || _a2 === void 0 ? void 0 : _a2.stack) || "".concat(errorEvent.filename || "", ":").concat(errorEvent.lineno || 0));
235
240
  };
236
241
  var rejectionListener = function(event) {
237
242
  var reason = event.reason;
@@ -240,8 +245,8 @@
240
245
  this.target.addEventListener("error", errorListener);
241
246
  this.target.addEventListener("unhandledrejection", rejectionListener);
242
247
  this.stops.push(function() {
243
- var _a, _b, _c, _d;
244
- (_b = (_a = _this.target).removeEventListener) === null || _b === void 0 ? void 0 : _b.call(_a, "error", errorListener);
248
+ var _a2, _b, _c, _d;
249
+ (_b = (_a2 = _this.target).removeEventListener) === null || _b === void 0 ? void 0 : _b.call(_a2, "error", errorListener);
245
250
  (_d = (_c = _this.target).removeEventListener) === null || _d === void 0 ? void 0 : _d.call(_c, "unhandledrejection", rejectionListener);
246
251
  });
247
252
  };
@@ -256,24 +261,50 @@
256
261
  "warn",
257
262
  "error"
258
263
  ];
264
+ var observations = this.observations;
265
+ var state = (0, observation_js_1.observationState)(this.target);
259
266
  var originals = /* @__PURE__ */ new Map();
267
+ var wrappers = /* @__PURE__ */ new Map();
268
+ var active = true;
260
269
  methods.forEach(function(method) {
261
- var original = consoleObject[method].bind(consoleObject);
270
+ var original = consoleObject[method];
262
271
  originals.set(method, original);
263
- consoleObject[method] = (function() {
272
+ var logger = _this.logger;
273
+ consoleObject[method] = function() {
264
274
  var args = [];
265
275
  for (var _i = 0; _i < arguments.length; _i++) {
266
276
  args[_i] = arguments[_i];
267
277
  }
268
- original.apply(void 0, args);
269
- var level = method === "warn" ? "warning" : method === "error" ? "error" : "info";
270
- _this.logger.log(args.map(stringifyLogValue).join(" "), level);
271
- });
278
+ var snapshot;
279
+ try {
280
+ if (active && !state.reporting)
281
+ snapshot = { timestampMs: Date.now(), values: args.slice(0, 16) };
282
+ } catch (_a) {
283
+ }
284
+ try {
285
+ return original.apply(this, args);
286
+ } finally {
287
+ try {
288
+ if (active && snapshot) {
289
+ var timestampMs_1 = snapshot.timestampMs, values_1 = snapshot.values;
290
+ observations.enqueue(function() {
291
+ var level = method === "warn" ? "warning" : method === "error" ? "error" : "info";
292
+ logger.log(values_1.map(stringifyLogValue).join(" "), level, { cocos_observed_at_ms: timestampMs_1 });
293
+ }, values_1.reduce(function(size, value) {
294
+ return size + (typeof value === "string" ? value.length * 2 : 64);
295
+ }, 0));
296
+ }
297
+ } catch (_b) {
298
+ }
299
+ }
300
+ };
301
+ wrappers.set(method, consoleObject[method]);
272
302
  });
273
303
  this.stops.push(function() {
304
+ active = false;
274
305
  methods.forEach(function(method) {
275
306
  var original = originals.get(method);
276
- if (original)
307
+ if (original && consoleObject[method] === wrappers.get(method))
277
308
  consoleObject[method] = original;
278
309
  });
279
310
  });
@@ -283,54 +314,103 @@
283
314
  var original = this.target.fetch;
284
315
  if (!original)
285
316
  return;
286
- var tracked = (function(input, init) {
287
- return __awaiter(_this, void 0, void 0, function() {
288
- var inputObject, url, method, key, headers, start, response, end, error_1;
289
- return __generator(this, function(_a) {
290
- switch (_a.label) {
291
- case 0:
292
- inputObject = typeof input === "object" ? input : void 0;
293
- url = typeof input === "string" ? input : (inputObject === null || inputObject === void 0 ? void 0 : inputObject.url) || String(input);
294
- method = (init === null || init === void 0 ? void 0 : init.method) || (inputObject === null || inputObject === void 0 ? void 0 : inputObject.method) || "GET";
295
- key = resourceKey();
296
- headers = createHeaders((init === null || init === void 0 ? void 0 : init.headers) || (inputObject === null || inputObject === void 0 ? void 0 : inputObject.headers));
297
- forEachOwn(this.trace.getHeaders(url, key), function(name, value) {
298
- return setHeader(headers, name, value);
299
- });
300
- this.rum.startResource(key);
301
- start = nowNs();
302
- _a.label = 1;
303
- case 1:
304
- _a.trys.push([1, 3, , 4]);
305
- return [4, original(input, __assign(__assign({}, init), { headers: headers }))];
306
- case 2:
307
- response = _a.sent();
308
- end = nowNs();
309
- this.rum.stopResource(key);
310
- this.rum.addResource(key, {
311
- url: url,
312
- httpMethod: method,
313
- requestHeaders: headersToObject(headers),
314
- responseHeaders: headersToObject(response.headers),
315
- statusCode: response.status
316
- }, { fetchStartTime: start, responseStartTime: end, responseEndTime: end });
317
- return [2, response];
318
- case 3:
319
- error_1 = _a.sent();
320
- this.rum.stopResource(key);
321
- this.rum.addError(String(error_1), error_1 instanceof Error ? error_1.stack || "" : "", "network_error");
322
- throw error_1;
323
- case 4:
324
- return [
325
- 2
326
- /*return*/
327
- ];
317
+ var rum = this.rum;
318
+ var trace = this.trace;
319
+ var active = true;
320
+ var tracked = function() {
321
+ var args = [];
322
+ for (var _i = 0; _i < arguments.length; _i++) {
323
+ args[_i] = arguments[_i];
324
+ }
325
+ if (!active)
326
+ return original.apply(this, args);
327
+ var outgoing = args;
328
+ var data;
329
+ observeNetwork(function() {
330
+ var input = args[0], init = args[1];
331
+ var inputObject = networkInput(input);
332
+ if (!inputObject)
333
+ return;
334
+ var url = inputObject.url;
335
+ var method = networkOption(init, "method");
336
+ var sourceHeaders = networkOption(init, "headers");
337
+ var record2 = {
338
+ key: resourceKey(),
339
+ url: url,
340
+ method: method || inputObject.method || "GET",
341
+ start: nowNs(),
342
+ headers: void 0
343
+ };
344
+ data = record2;
345
+ try {
346
+ var headers_1 = createHeaders(sourceHeaders === void 0 ? inputObject.headers : sourceHeaders);
347
+ var appended_1 = false;
348
+ forEachOwn(trace.getHeaders(url, record2.key), function(name, value) {
349
+ if (!hasHeader(headers_1, name)) {
350
+ appendHeader(headers_1, name, value);
351
+ appended_1 = true;
352
+ }
353
+ });
354
+ if (appended_1) {
355
+ outgoing = args.slice();
356
+ outgoing[1] = withRequestHeaders(init, headers_1);
328
357
  }
358
+ record2.headers = headers_1;
359
+ } catch (_a) {
360
+ }
361
+ observeNetwork(function() {
362
+ return rum.startResource(record2.key);
329
363
  });
330
364
  });
331
- });
365
+ var reportFailure = function(error) {
366
+ if (!data)
367
+ return;
368
+ var key = data.key;
369
+ observeNetwork(function() {
370
+ return rum.stopResource(key);
371
+ });
372
+ observeNetwork(function() {
373
+ return rum.addError(String(error), error instanceof Error ? error.stack || "" : "", "network_error");
374
+ });
375
+ };
376
+ var result;
377
+ try {
378
+ result = original.apply(this, outgoing);
379
+ } catch (error) {
380
+ reportFailure(error);
381
+ throw error;
382
+ }
383
+ if (!data)
384
+ return result;
385
+ var record = data;
386
+ try {
387
+ return result.then(function(response) {
388
+ observeNetwork(function() {
389
+ return rum.stopResource(record.key);
390
+ });
391
+ observeNetwork(function() {
392
+ var end = nowNs();
393
+ rum.addResource(record.key, {
394
+ url: record.url,
395
+ httpMethod: record.method,
396
+ requestHeaders: record.headers && headersToObject(record.headers),
397
+ responseHeaders: headersToObject(response.headers),
398
+ statusCode: response.status
399
+ }, { fetchStartTime: record.start, responseStartTime: end, responseEndTime: end });
400
+ });
401
+ return response;
402
+ }, function(error) {
403
+ reportFailure(error);
404
+ throw error;
405
+ });
406
+ } catch (_a) {
407
+ return result;
408
+ }
409
+ };
332
410
  this.networkStops.push(function() {
333
- _this.target.fetch = original;
411
+ active = false;
412
+ if (_this.target.fetch === tracked)
413
+ _this.target.fetch = original;
334
414
  });
335
415
  this.target.fetch = tracked;
336
416
  };
@@ -344,73 +424,182 @@
344
424
  var metadata = /* @__PURE__ */ new WeakMap();
345
425
  var rum = this.rum;
346
426
  var trace = this.trace;
347
- this.networkStops.push(function() {
348
- Xhr.prototype.open = open;
349
- });
350
- Xhr.prototype.open = function trackedOpen(method, url) {
351
- var _a;
352
- var rest = [];
353
- for (var _i = 2; _i < arguments.length; _i++) {
354
- rest[_i - 2] = arguments[_i];
427
+ var active = true;
428
+ var trackedOpen = function() {
429
+ var _this = this;
430
+ var args = [];
431
+ for (var _i = 0; _i < arguments.length; _i++) {
432
+ args[_i] = arguments[_i];
433
+ }
434
+ if (!active)
435
+ return open.apply(this, args);
436
+ var previous = metadata.get(this);
437
+ observeNetwork(function() {
438
+ metadata.delete(_this);
439
+ if (typeof args[0] !== "string" || typeof args[1] !== "string")
440
+ return;
441
+ metadata.set(_this, {
442
+ key: resourceKey(),
443
+ method: args[0],
444
+ url: String(args[1]),
445
+ headers: /* @__PURE__ */ Object.create(null),
446
+ headersKnown: true
447
+ });
448
+ });
449
+ try {
450
+ return open.apply(this, args);
451
+ } catch (error) {
452
+ observeNetwork(function() {
453
+ if (previous)
454
+ metadata.set(_this, previous);
455
+ else
456
+ metadata.delete(_this);
457
+ });
458
+ throw error;
355
459
  }
356
- metadata.set(this, { key: resourceKey(), method: method, url: String(url), headers: {} });
357
- (_a = open).call.apply(_a, __spreadArray([this, method, url], rest, false));
358
460
  };
359
461
  this.networkStops.push(function() {
360
- Xhr.prototype.setRequestHeader = setRequestHeader;
462
+ active = false;
463
+ if (Xhr.prototype.open === trackedOpen)
464
+ Xhr.prototype.open = open;
361
465
  });
362
- Xhr.prototype.setRequestHeader = function trackedHeader(name, value) {
363
- var data = metadata.get(this);
364
- if (data)
365
- data.headers[name] = value;
366
- setRequestHeader.call(this, name, value);
466
+ Xhr.prototype.open = trackedOpen;
467
+ var trackedHeader = function() {
468
+ var _this = this;
469
+ var args = [];
470
+ for (var _i = 0; _i < arguments.length; _i++) {
471
+ args[_i] = arguments[_i];
472
+ }
473
+ var result = setRequestHeader.apply(this, args);
474
+ observeNetwork(function() {
475
+ var data = active && metadata.get(_this);
476
+ if (!data)
477
+ return;
478
+ var name = args[0], value = args[1];
479
+ if (typeof name !== "string" || typeof value !== "string") {
480
+ data.headersKnown = false;
481
+ return;
482
+ }
483
+ var key = name.toLowerCase();
484
+ data.headers[key] = key in data.headers ? "".concat(data.headers[key], ", ").concat(value) : value;
485
+ });
486
+ return result;
367
487
  };
368
488
  this.networkStops.push(function() {
369
- Xhr.prototype.send = send;
489
+ active = false;
490
+ if (Xhr.prototype.setRequestHeader === trackedHeader)
491
+ Xhr.prototype.setRequestHeader = setRequestHeader;
370
492
  });
371
- Xhr.prototype.send = function trackedSend(body) {
493
+ Xhr.prototype.setRequestHeader = trackedHeader;
494
+ var trackedSend = function() {
372
495
  var _this = this;
373
- var data = metadata.get(this);
496
+ var args = [];
497
+ for (var _i = 0; _i < arguments.length; _i++) {
498
+ args[_i] = arguments[_i];
499
+ }
500
+ var data = active && metadata.get(this);
374
501
  if (!data)
375
- return send.call(this, body);
376
- forEachOwn(trace.getHeaders(data.url, data.key), function(name, value) {
377
- data.headers[name] = value;
378
- setRequestHeader.call(_this, name, value);
502
+ return send.apply(this, args);
503
+ observeNetwork(function() {
504
+ if (!data.headersKnown)
505
+ return;
506
+ forEachOwn(trace.getHeaders(data.url, data.key), function(name, value) {
507
+ if (!validTraceHeader(name, value))
508
+ return;
509
+ var key = name.toLowerCase();
510
+ if (key in data.headers)
511
+ return;
512
+ setRequestHeader.call(_this, name, value);
513
+ data.headers[key] = value;
514
+ });
515
+ });
516
+ var started = 0;
517
+ observeNetwork(function() {
518
+ started = nowNs();
519
+ rum.startResource(data.key);
379
520
  });
380
- var started = nowNs();
381
- rum.startResource(data.key);
382
521
  var completed = false;
522
+ var cleanup;
383
523
  var report = function() {
384
524
  if (completed)
385
525
  return;
386
526
  completed = true;
387
- var ended = nowNs();
388
- rum.stopResource(data.key);
389
- rum.addResource(data.key, {
390
- url: data.url,
391
- httpMethod: data.method,
392
- requestHeaders: data.headers,
393
- responseHeaders: parseXhrHeaders(_this.getAllResponseHeaders()),
394
- statusCode: _this.status
395
- }, { fetchStartTime: started, responseStartTime: ended, responseEndTime: ended });
527
+ observeNetwork(function() {
528
+ return cleanup === null || cleanup === void 0 ? void 0 : cleanup();
529
+ });
530
+ observeNetwork(function() {
531
+ return rum.stopResource(data.key);
532
+ });
533
+ observeNetwork(function() {
534
+ var ended = nowNs();
535
+ rum.addResource(data.key, {
536
+ url: data.url,
537
+ httpMethod: data.method,
538
+ requestHeaders: data.headers,
539
+ responseHeaders: parseXhrHeaders(_this.getAllResponseHeaders()),
540
+ statusCode: _this.status
541
+ }, { fetchStartTime: started, responseStartTime: ended, responseEndTime: ended });
542
+ });
396
543
  };
397
- var originalLoadEnd = this.onloadend;
398
- this.addEventListener("loadend", report, { once: true });
399
- if (this.onloadend === report) {
400
- var xhr_1 = this;
401
- var handler_1 = function(event) {
402
- if (xhr_1.onloadend === handler_1)
403
- xhr_1.onloadend = originalLoadEnd;
404
- try {
405
- originalLoadEnd === null || originalLoadEnd === void 0 ? void 0 : originalLoadEnd.call(xhr_1, event);
406
- } finally {
407
- report();
544
+ observeNetwork(function() {
545
+ var originalLoadEnd = _this.onloadend;
546
+ try {
547
+ _this.addEventListener("loadend", report, { once: true });
548
+ if (_this.onloadend === report) {
549
+ var xhr_1 = _this;
550
+ var handler_1 = function() {
551
+ var events = [];
552
+ for (var _i2 = 0; _i2 < arguments.length; _i2++) {
553
+ events[_i2] = arguments[_i2];
554
+ }
555
+ observeNetwork(function() {
556
+ return cleanup === null || cleanup === void 0 ? void 0 : cleanup();
557
+ });
558
+ try {
559
+ return originalLoadEnd === null || originalLoadEnd === void 0 ? void 0 : originalLoadEnd.apply(this, events);
560
+ } finally {
561
+ report();
562
+ }
563
+ };
564
+ cleanup = function() {
565
+ if (xhr_1.onloadend === handler_1)
566
+ xhr_1.onloadend = originalLoadEnd;
567
+ };
568
+ _this.onloadend = handler_1;
569
+ } else {
570
+ cleanup = function() {
571
+ return _this.removeEventListener("loadend", report);
572
+ };
408
573
  }
409
- };
410
- this.onloadend = handler_1;
574
+ } catch (_a) {
575
+ observeNetwork(function() {
576
+ return cleanup === null || cleanup === void 0 ? void 0 : cleanup();
577
+ });
578
+ observeNetwork(function() {
579
+ if (_this.onloadend === report)
580
+ _this.onloadend = originalLoadEnd;
581
+ });
582
+ }
583
+ });
584
+ try {
585
+ return send.apply(this, args);
586
+ } catch (error) {
587
+ completed = true;
588
+ observeNetwork(function() {
589
+ return cleanup === null || cleanup === void 0 ? void 0 : cleanup();
590
+ });
591
+ observeNetwork(function() {
592
+ return rum.stopResource(data.key);
593
+ });
594
+ throw error;
411
595
  }
412
- send.call(this, body);
413
596
  };
597
+ this.networkStops.push(function() {
598
+ active = false;
599
+ if (Xhr.prototype.send === trackedSend)
600
+ Xhr.prototype.send = send;
601
+ });
602
+ Xhr.prototype.send = trackedSend;
414
603
  };
415
604
  return FTDefaultAutoTracking2;
416
605
  })()
@@ -424,44 +613,110 @@
424
613
  resourceSequence = (resourceSequence + 1) % Number.MAX_SAFE_INTEGER;
425
614
  return "cocos-".concat(Date.now().toString(36), "-").concat(resourceSequence.toString(36));
426
615
  }
616
+ function observeNetwork(observe) {
617
+ try {
618
+ observe();
619
+ } catch (_a) {
620
+ }
621
+ }
622
+ function networkOption(init, name) {
623
+ for (var source = init; source; source = Object.getPrototypeOf(source)) {
624
+ var descriptor = Object.getOwnPropertyDescriptor(source, name);
625
+ if (!descriptor)
626
+ continue;
627
+ if (descriptor.get || descriptor.set)
628
+ throw new TypeError("Network option requires its original receiver");
629
+ return descriptor.value;
630
+ }
631
+ return void 0;
632
+ }
633
+ function networkInput(input) {
634
+ if (typeof input === "string")
635
+ return { url: input };
636
+ if (typeof Request === "function" && input instanceof Request) {
637
+ var read = function(name) {
638
+ var descriptor = Object.getOwnPropertyDescriptor(Request.prototype, name);
639
+ return (descriptor === null || descriptor === void 0 ? void 0 : descriptor.get) ? descriptor.get.call(input) : networkOption(input, name);
640
+ };
641
+ return { url: read("url"), method: read("method"), headers: read("headers") };
642
+ }
643
+ if (typeof URL === "function" && input instanceof URL)
644
+ return { url: URL.prototype.toString.call(input) };
645
+ return void 0;
646
+ }
647
+ function withRequestHeaders(init, headers) {
648
+ var result = Object.create(init || null);
649
+ var _loop_1 = function(source2) {
650
+ Object.getOwnPropertyNames(source2).forEach(function(name) {
651
+ if (name === "headers" || Object.prototype.hasOwnProperty.call(result, name))
652
+ return;
653
+ var descriptor = Object.getOwnPropertyDescriptor(source2, name);
654
+ Object.defineProperty(result, name, {
655
+ enumerable: descriptor === null || descriptor === void 0 ? void 0 : descriptor.enumerable,
656
+ configurable: true,
657
+ get: function() {
658
+ return init[name];
659
+ }
660
+ });
661
+ });
662
+ };
663
+ for (var source = init; source && source !== Object.prototype; source = Object.getPrototypeOf(source)) {
664
+ _loop_1(source);
665
+ }
666
+ Object.defineProperty(result, "headers", { value: headers, enumerable: true, configurable: true, writable: true });
667
+ return result;
668
+ }
427
669
  function createHeaders(source) {
428
670
  var HeadersConstructor = globalThis.Headers;
429
671
  if (HeadersConstructor)
430
672
  return new HeadersConstructor(source);
431
- var result = {};
673
+ var result = [];
432
674
  if (Array.isArray(source)) {
433
675
  source.forEach(function(_a) {
434
676
  var name = _a[0], value = _a[1];
435
- result[name] = String(value);
677
+ result.push([String(name), String(value)]);
436
678
  });
437
679
  } else if (source && typeof source.forEach === "function") {
438
680
  source.forEach(function(value, name) {
439
- result[name] = value;
681
+ result.push([name, value]);
440
682
  });
441
683
  } else if (source) {
442
684
  forEachOwn(source, function(name, value) {
443
- result[name] = String(value);
685
+ result.push([name, String(value)]);
444
686
  });
445
687
  }
446
688
  return result;
447
689
  }
448
- function setHeader(headers, name, value) {
449
- if (typeof headers.set === "function")
450
- headers.set(name, value);
690
+ function hasHeader(headers, name) {
691
+ return Array.isArray(headers) ? headers.some(function(_a) {
692
+ var key = _a[0];
693
+ return key.toLowerCase() === name.toLowerCase();
694
+ }) : headers.has(name);
695
+ }
696
+ function appendHeader(headers, name, value) {
697
+ if (!validTraceHeader(name, value))
698
+ throw new TypeError("Invalid trace header");
699
+ if (Array.isArray(headers))
700
+ headers.push([name, value]);
451
701
  else
452
- headers[name] = value;
702
+ headers.append(name, value);
703
+ }
704
+ function validTraceHeader(name, value) {
705
+ return /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/.test(name) && typeof value === "string" && !/[\x00-\x08\x0a-\x1f\x7f\u0100-\uffff]/.test(value);
453
706
  }
454
707
  function headersToObject(headers) {
455
- var result = {};
456
- if (typeof headers.forEach === "function") {
457
- headers.forEach(function(value, key) {
458
- result[key] = value;
459
- });
460
- } else {
461
- forEachOwn(headers, function(key, value) {
462
- result[key] = value;
708
+ var result = /* @__PURE__ */ Object.create(null);
709
+ var append = function(value, name) {
710
+ var key = name.toLowerCase();
711
+ result[key] = key in result ? "".concat(result[key], ", ").concat(value) : value;
712
+ };
713
+ if (Array.isArray(headers))
714
+ headers.forEach(function(_a) {
715
+ var name = _a[0], value = _a[1];
716
+ return append(value, name);
463
717
  });
464
- }
718
+ else
719
+ headers.forEach(append);
465
720
  return result;
466
721
  }
467
722
  function forEachOwn(value, callback) {
@@ -512,6 +767,7 @@
512
767
  exports.samplingPercentage = samplingPercentage;
513
768
  exports.validatedSamplingConfig = validatedSamplingConfig;
514
769
  exports.requireText = requireText;
770
+ exports.validateWebViewHosts = validateWebViewHosts;
515
771
  function samplingRate(value, name) {
516
772
  if (value === void 0)
517
773
  return void 0;
@@ -547,6 +803,18 @@
547
803
  throw new TypeError("".concat(name, " must not be empty"));
548
804
  return value;
549
805
  }
806
+ function validateWebViewHosts(value) {
807
+ if (value === void 0 || value === null)
808
+ return;
809
+ var message = "sdk.allowWebViewHost must be an array of strings or null";
810
+ if (!Array.isArray(value))
811
+ throw new TypeError(message);
812
+ for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {
813
+ var host = value_1[_i];
814
+ if (typeof host !== "string")
815
+ throw new TypeError(message);
816
+ }
817
+ }
550
818
  }
551
819
  });
552
820
 
@@ -555,9 +823,8 @@
555
823
  "packages/cocos/dist/creator2/core/version.js": function(exports) {
556
824
  "use strict";
557
825
  Object.defineProperty(exports, "__esModule", { value: true });
558
- exports.FT_COCOS_SDK_BRIDGE_INFO = exports.FT_COCOS_SDK_BRIDGE_INFO_KEY = exports.FT_COCOS_SDK_VERSION_KEY = exports.FT_COCOS_SDK_VERSION = void 0;
559
- exports.FT_COCOS_SDK_VERSION = "0.1.1-alpha.2";
560
- exports.FT_COCOS_SDK_VERSION_KEY = "sdk_package_cocos";
826
+ exports.FT_COCOS_SDK_BRIDGE_INFO = exports.FT_COCOS_SDK_BRIDGE_INFO_KEY = exports.FT_COCOS_SDK_VERSION = void 0;
827
+ exports.FT_COCOS_SDK_VERSION = "0.1.1-alpha.4";
561
828
  exports.FT_COCOS_SDK_BRIDGE_INFO_KEY = "sdk_bridge_info";
562
829
  exports.FT_COCOS_SDK_BRIDGE_INFO = JSON.stringify({
563
830
  cocos: exports.FT_COCOS_SDK_VERSION
@@ -643,12 +910,12 @@
643
910
  this.ownership = ownership;
644
911
  }
645
912
  FTMobileAgent2.prototype.start = function(config) {
646
- var _a;
647
913
  if (!config.datakitUrl && !(config.datawayUrl && config.clientToken)) {
648
914
  throw new TypeError("Configure datakitUrl or datawayUrl with clientToken");
649
915
  }
916
+ (0, validation_js_1.validateWebViewHosts)(config.allowWebViewHost);
650
917
  this.ownership.claimStandalone();
651
- this.transport.invoke("sdk.configure", compact(__assign(__assign({}, config), { globalContext: __assign(__assign({}, config.globalContext || {}), (_a = {}, _a[version_js_1.FT_COCOS_SDK_VERSION_KEY] = version_js_1.FT_COCOS_SDK_VERSION, _a)) })));
918
+ this.transport.invoke("sdk.configure", compact(config));
652
919
  };
653
920
  FTMobileAgent2.prototype.bindUser = function(user) {
654
921
  this.transport.invoke("sdk.bindUser", typeof user === "string" ? { userId: (0, validation_js_1.requireText)(user, "userId") } : user);
@@ -920,9 +1187,7 @@
920
1187
  this.ownership.claimNativeHost();
921
1188
  try {
922
1189
  (_c = (_a = this.extension) === null || _a === void 0 ? void 0 : (_b = _a.lifecycle).beforeAttach) === null || _c === void 0 ? void 0 : _c.call(_b);
923
- this.transport.invoke("hybrid.attach", {
924
- sdkVersion: version_js_1.FT_COCOS_SDK_VERSION
925
- });
1190
+ this.transport.invoke("hybrid.attach");
926
1191
  if ((_d = config.autoTrack) === null || _d === void 0 ? void 0 : _d.network) {
927
1192
  (_e = this.autoTracking) === null || _e === void 0 ? void 0 : _e.start({ network: true }, void 0, "network");
928
1193
  }
@@ -1166,7 +1431,10 @@
1166
1431
  (0, platform_runtime_js_1.platformGlobal)().__FT_COCOS_NATIVE_FACTORY__ = {
1167
1432
  protocol: 1,
1168
1433
  version: version_js_1.FT_COCOS_SDK_VERSION,
1169
- create: function(context) {
1434
+ create: function(context, target) {
1435
+ if (target === void 0) {
1436
+ target = (0, platform_runtime_js_1.platformGlobal)();
1437
+ }
1170
1438
  if (context.platform === "web")
1171
1439
  throw new Error("Native runtime cannot serve a Web application");
1172
1440
  var transport = {
@@ -1181,7 +1449,7 @@
1181
1449
  return (0, transport_js_1.parseTransportResponse)(raw);
1182
1450
  }
1183
1451
  };
1184
- var tracking = new auto_tracking_js_1.FTDefaultAutoTracking(new modules_js_1.FTRUM(transport), new modules_js_1.FTLogger(transport), new modules_js_1.FTTrace(transport), context.hooks);
1452
+ var tracking = new auto_tracking_js_1.FTDefaultAutoTracking(new modules_js_1.FTRUM(transport), new modules_js_1.FTLogger(transport), new modules_js_1.FTTrace(transport), context.hooks, target);
1185
1453
  return new client_js_1.FTCocosSDK(transport, tracking, context.engine);
1186
1454
  }
1187
1455
  };