@cloudcare/cocos-sdk 0.1.1-alpha.1 → 0.1.1-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.
Files changed (191) hide show
  1. package/README.md +35 -6
  2. package/bin/cli.cjs +42 -5
  3. package/bin/project-configuration.cjs +135 -0
  4. package/bin/web-assets.cjs +32 -0
  5. package/dist/creator2/core/auto-tracking.d.ts +3 -1
  6. package/dist/creator2/core/auto-tracking.d.ts.map +1 -1
  7. package/dist/creator2/core/auto-tracking.js +60 -7
  8. package/dist/creator2/core/auto-tracking.js.map +1 -1
  9. package/dist/creator2/core/client.d.ts +1 -0
  10. package/dist/creator2/core/client.d.ts.map +1 -1
  11. package/dist/creator2/core/client.js +14 -3
  12. package/dist/creator2/core/client.js.map +1 -1
  13. package/dist/creator2/core/index.js.map +1 -1
  14. package/dist/creator2/core/modules.d.ts.map +1 -1
  15. package/dist/creator2/core/modules.js +2 -2
  16. package/dist/creator2/core/modules.js.map +1 -1
  17. package/dist/creator2/core/observation.d.ts +25 -0
  18. package/dist/creator2/core/observation.d.ts.map +1 -0
  19. package/dist/creator2/core/observation.js +93 -0
  20. package/dist/creator2/core/observation.js.map +1 -0
  21. package/dist/creator2/core/platform-client.d.ts +46 -0
  22. package/dist/creator2/core/platform-client.d.ts.map +1 -0
  23. package/dist/creator2/core/platform-client.js +195 -0
  24. package/dist/creator2/core/platform-client.js.map +1 -0
  25. package/dist/creator2/core/platform-options.d.ts +30 -0
  26. package/dist/creator2/core/platform-options.d.ts.map +1 -0
  27. package/dist/creator2/core/platform-options.js +3 -0
  28. package/dist/creator2/core/platform-options.js.map +1 -0
  29. package/dist/creator2/core/platform-runtime.d.ts +60 -0
  30. package/dist/creator2/core/platform-runtime.d.ts.map +1 -0
  31. package/dist/creator2/core/platform-runtime.js +36 -0
  32. package/dist/creator2/core/platform-runtime.js.map +1 -0
  33. package/dist/creator2/core/plugin-api.d.ts +1 -1
  34. package/dist/creator2/core/plugin-api.d.ts.map +1 -1
  35. package/dist/creator2/core/plugin-api.js.map +1 -1
  36. package/dist/creator2/core/transport.d.ts +1 -1
  37. package/dist/creator2/core/transport.d.ts.map +1 -1
  38. package/dist/creator2/core/transport.js.map +1 -1
  39. package/dist/creator2/core/types.d.ts +9 -0
  40. package/dist/creator2/core/types.d.ts.map +1 -1
  41. package/dist/creator2/core/types.js.map +1 -1
  42. package/dist/creator2/core/validation.d.ts +1 -0
  43. package/dist/creator2/core/validation.d.ts.map +1 -1
  44. package/dist/creator2/core/validation.js +13 -0
  45. package/dist/creator2/core/validation.js.map +1 -1
  46. package/dist/creator2/core/version.d.ts +1 -3
  47. package/dist/creator2/core/version.d.ts.map +1 -1
  48. package/dist/creator2/core/version.js +2 -4
  49. package/dist/creator2/core/version.js.map +1 -1
  50. package/dist/creator2/creator2/auto.js.map +1 -1
  51. package/dist/creator2/creator2/index.d.ts +6 -3
  52. package/dist/creator2/creator2/index.d.ts.map +1 -1
  53. package/dist/creator2/creator2/index.js +12 -8
  54. package/dist/creator2/creator2/index.js.map +1 -1
  55. package/dist/creator2/creator2/transport.js.map +1 -1
  56. package/dist/creator2/native/bootstrap.d.ts +2 -0
  57. package/dist/creator2/native/bootstrap.d.ts.map +1 -0
  58. package/dist/creator2/native/bootstrap.js +35 -0
  59. package/dist/creator2/native/bootstrap.js.map +1 -0
  60. package/dist/creator2/native/error-bootstrap.d.ts +2 -0
  61. package/dist/creator2/native/error-bootstrap.d.ts.map +1 -0
  62. package/dist/creator2/native/error-bootstrap.js +7 -0
  63. package/dist/creator2/native/error-bootstrap.js.map +1 -0
  64. package/dist/creator2/native/jsb-errors.d.ts +21 -0
  65. package/dist/creator2/native/jsb-errors.d.ts.map +1 -0
  66. package/dist/creator2/native/jsb-errors.js +91 -0
  67. package/dist/creator2/native/jsb-errors.js.map +1 -0
  68. package/dist/creator2/web/bootstrap.d.ts +3 -0
  69. package/dist/creator2/web/bootstrap.d.ts.map +1 -0
  70. package/dist/creator2/web/bootstrap.js +15 -0
  71. package/dist/creator2/web/bootstrap.js.map +1 -0
  72. package/dist/creator2/web/client.d.ts +60 -0
  73. package/dist/creator2/web/client.d.ts.map +1 -0
  74. package/dist/creator2/web/client.js +293 -0
  75. package/dist/creator2/web/client.js.map +1 -0
  76. package/dist/creator2/web/creator2.d.ts +5 -0
  77. package/dist/creator2/web/creator2.d.ts.map +1 -0
  78. package/dist/creator2/web/creator2.js +27 -0
  79. package/dist/creator2/web/creator2.js.map +1 -0
  80. package/dist/creator2/web/privacy.d.ts +3 -0
  81. package/dist/creator2/web/privacy.d.ts.map +1 -0
  82. package/dist/creator2/web/privacy.js +39 -0
  83. package/dist/creator2/web/privacy.js.map +1 -0
  84. package/dist/creator2/web/runtime.d.ts +23 -0
  85. package/dist/creator2/web/runtime.d.ts.map +1 -0
  86. package/dist/creator2/web/runtime.js +264 -0
  87. package/dist/creator2/web/runtime.js.map +1 -0
  88. package/dist/creator2/web/types.d.ts +91 -0
  89. package/dist/creator2/web/types.d.ts.map +1 -0
  90. package/dist/creator2/web/types.js +3 -0
  91. package/dist/creator2/web/types.js.map +1 -0
  92. package/dist/creator3/core/auto-tracking.d.ts +3 -1
  93. package/dist/creator3/core/auto-tracking.d.ts.map +1 -1
  94. package/dist/creator3/core/auto-tracking.js +60 -7
  95. package/dist/creator3/core/auto-tracking.js.map +1 -1
  96. package/dist/creator3/core/client.d.ts +1 -0
  97. package/dist/creator3/core/client.d.ts.map +1 -1
  98. package/dist/creator3/core/client.js +6 -3
  99. package/dist/creator3/core/client.js.map +1 -1
  100. package/dist/creator3/core/modules.d.ts.map +1 -1
  101. package/dist/creator3/core/modules.js +4 -9
  102. package/dist/creator3/core/modules.js.map +1 -1
  103. package/dist/creator3/core/observation.d.ts +25 -0
  104. package/dist/creator3/core/observation.d.ts.map +1 -0
  105. package/dist/creator3/core/observation.js +84 -0
  106. package/dist/creator3/core/observation.js.map +1 -0
  107. package/dist/creator3/core/platform-client.d.ts +46 -0
  108. package/dist/creator3/core/platform-client.d.ts.map +1 -0
  109. package/dist/creator3/core/platform-client.js +135 -0
  110. package/dist/creator3/core/platform-client.js.map +1 -0
  111. package/dist/creator3/core/platform-options.d.ts +30 -0
  112. package/dist/creator3/core/platform-options.d.ts.map +1 -0
  113. package/dist/creator3/core/platform-options.js +2 -0
  114. package/dist/creator3/core/platform-options.js.map +1 -0
  115. package/dist/creator3/core/platform-runtime.d.ts +60 -0
  116. package/dist/creator3/core/platform-runtime.d.ts.map +1 -0
  117. package/dist/creator3/core/platform-runtime.js +29 -0
  118. package/dist/creator3/core/platform-runtime.js.map +1 -0
  119. package/dist/creator3/core/plugin-api.d.ts +1 -1
  120. package/dist/creator3/core/plugin-api.d.ts.map +1 -1
  121. package/dist/creator3/core/transport.d.ts +1 -1
  122. package/dist/creator3/core/transport.d.ts.map +1 -1
  123. package/dist/creator3/core/types.d.ts +9 -0
  124. package/dist/creator3/core/types.d.ts.map +1 -1
  125. package/dist/creator3/core/validation.d.ts +1 -0
  126. package/dist/creator3/core/validation.d.ts.map +1 -1
  127. package/dist/creator3/core/validation.js +11 -0
  128. package/dist/creator3/core/validation.js.map +1 -1
  129. package/dist/creator3/core/version.d.ts +1 -3
  130. package/dist/creator3/core/version.d.ts.map +1 -1
  131. package/dist/creator3/core/version.js +1 -3
  132. package/dist/creator3/core/version.js.map +1 -1
  133. package/dist/creator3/creator3/index.d.ts +6 -3
  134. package/dist/creator3/creator3/index.d.ts.map +1 -1
  135. package/dist/creator3/creator3/index.js +13 -8
  136. package/dist/creator3/creator3/index.js.map +1 -1
  137. package/dist/creator3/native/bootstrap.d.ts +2 -0
  138. package/dist/creator3/native/bootstrap.d.ts.map +1 -0
  139. package/dist/creator3/native/bootstrap.js +32 -0
  140. package/dist/creator3/native/bootstrap.js.map +1 -0
  141. package/dist/creator3/native/error-bootstrap.d.ts +2 -0
  142. package/dist/creator3/native/error-bootstrap.d.ts.map +1 -0
  143. package/dist/creator3/native/error-bootstrap.js +5 -0
  144. package/dist/creator3/native/error-bootstrap.js.map +1 -0
  145. package/dist/creator3/native/jsb-errors.d.ts +21 -0
  146. package/dist/creator3/native/jsb-errors.d.ts.map +1 -0
  147. package/dist/creator3/native/jsb-errors.js +82 -0
  148. package/dist/creator3/native/jsb-errors.js.map +1 -0
  149. package/dist/creator3/web/bootstrap.d.ts +3 -0
  150. package/dist/creator3/web/bootstrap.d.ts.map +1 -0
  151. package/dist/creator3/web/bootstrap.js +11 -0
  152. package/dist/creator3/web/bootstrap.js.map +1 -0
  153. package/dist/creator3/web/client.d.ts +60 -0
  154. package/dist/creator3/web/client.d.ts.map +1 -0
  155. package/dist/creator3/web/client.js +255 -0
  156. package/dist/creator3/web/client.js.map +1 -0
  157. package/dist/creator3/web/creator3.d.ts +5 -0
  158. package/dist/creator3/web/creator3.d.ts.map +1 -0
  159. package/dist/creator3/web/creator3.js +11 -0
  160. package/dist/creator3/web/creator3.js.map +1 -0
  161. package/dist/creator3/web/privacy.d.ts +3 -0
  162. package/dist/creator3/web/privacy.d.ts.map +1 -0
  163. package/dist/creator3/web/privacy.js +26 -0
  164. package/dist/creator3/web/privacy.js.map +1 -0
  165. package/dist/creator3/web/runtime.d.ts +23 -0
  166. package/dist/creator3/web/runtime.d.ts.map +1 -0
  167. package/dist/creator3/web/runtime.js +266 -0
  168. package/dist/creator3/web/runtime.js.map +1 -0
  169. package/dist/creator3/web/types.d.ts +91 -0
  170. package/dist/creator3/web/types.d.ts.map +1 -0
  171. package/dist/creator3/web/types.js +2 -0
  172. package/dist/creator3/web/types.js.map +1 -0
  173. package/extensions/creator2/install-native.cjs +19 -1
  174. package/extensions/creator2/install-web.cjs +69 -0
  175. package/extensions/creator2/main.js +19 -2
  176. package/extensions/creator2/project-configuration.cjs +135 -0
  177. package/extensions/creator3/dist/hooks.js +13 -0
  178. package/extensions/creator3/install-native.cjs +19 -1
  179. package/extensions/creator3/install-web.cjs +69 -0
  180. package/extensions/creator3/project-configuration.cjs +135 -0
  181. package/native/android/src/main/java/com/ft/sdk/cocos/FTCocosBridge.java +7 -10
  182. package/native/ios/FTCocosBridge.m +6 -4
  183. package/native/ios/FTCocosBridge.podspec +1 -1
  184. package/native/jsb-errors.js +266 -0
  185. package/package.json +19 -3
  186. package/runtime/native.js +1351 -0
  187. package/web/bootstrap/package.json +4 -0
  188. package/web/bootstrap.js +1053 -0
  189. package/web/bootstrap.js.map +7 -0
  190. package/web/creator2/package.json +4 -0
  191. package/web/creator3/package.json +4 -0
@@ -0,0 +1,135 @@
1
+ 'use strict';
2
+
3
+ const fs = require('fs');
4
+ const path = require('path');
5
+ const NATIVE = ['captureFps', 'maxImageDimension', 'imagePolicy', 'touchPrivacy'];
6
+ const WEB = ['captureFps', 'maxImageDimension', 'quality', 'maxFrameBytes', 'canvasPrivacy', 'canvasId'];
7
+ const SAMPLING = ['sessionReplaySamplingRate', 'sessionReplayOnErrorSamplingRate'];
8
+ function object(value, name) {
9
+ if (!value || typeof value !== 'object' || Array.isArray(value)) throw new Error(`${name} must be an object`);
10
+ }
11
+ function keys(value, allowed, name) {
12
+ object(value, name);
13
+ for (const key of Object.keys(value)) if (!allowed.includes(key)) throw new Error(`Unsupported ${name}.${key}`);
14
+ }
15
+ function number(value, min, max, name, integer = true) {
16
+ if (value !== undefined && (typeof value !== 'number' || !Number.isFinite(value) || value < min || value > max || integer && !Number.isInteger(value))) {
17
+ throw new Error(`${name} must be ${integer ? 'an integer' : 'a number'} between ${min} and ${max}`);
18
+ }
19
+ }
20
+ function validateReplay(replay) {
21
+ if (replay === undefined) return;
22
+ keys(replay, ['enabled', ...SAMPLING, 'native', 'web'], 'replay');
23
+ if (replay.enabled !== undefined && typeof replay.enabled !== 'boolean') throw new Error('replay.enabled must be boolean');
24
+ for (const field of SAMPLING) number(replay[field], 0, 100, `replay.${field}`, false);
25
+ for (const platform of ['native', 'web']) {
26
+ const options = replay[platform];
27
+ if (options === undefined || options === false) continue;
28
+ keys(options, platform === 'native' ? NATIVE : WEB, `replay.${platform}`);
29
+ number(options.captureFps, 1, 5, `replay.${platform}.captureFps`);
30
+ number(options.maxImageDimension, 1, 2048, `replay.${platform}.maxImageDimension`);
31
+ if (platform === 'native') {
32
+ if (options.touchPrivacy !== undefined && !['hide', 'show'].includes(options.touchPrivacy)) throw new Error('replay.native.touchPrivacy must be hide or show');
33
+ if (options.imagePolicy !== undefined) {
34
+ keys(options.imagePolicy, ['quality', 'maxFrameBytes'], 'replay.native.imagePolicy');
35
+ if (options.imagePolicy.quality !== undefined && !['low', 'medium', 'high'].includes(options.imagePolicy.quality)) throw new Error('replay.native.imagePolicy.quality must be low, medium, or high');
36
+ number(options.imagePolicy.maxFrameBytes, 1024, 1048576, 'replay.native.imagePolicy.maxFrameBytes');
37
+ }
38
+ } else {
39
+ if (options.canvasPrivacy !== undefined && !['block', 'allow'].includes(options.canvasPrivacy)) throw new Error('replay.web.canvasPrivacy must be block or allow');
40
+ if (options.canvasId !== undefined && (typeof options.canvasId !== 'string' || !options.canvasId.trim())) throw new Error('replay.web.canvasId must be a nonempty string');
41
+ if (options.quality !== undefined && !['low', 'medium', 'high'].includes(options.quality)) number(options.quality, 0, 1, 'replay.web.quality', false);
42
+ number(options.maxFrameBytes, 1024, 1048576, 'replay.web.maxFrameBytes');
43
+ }
44
+ }
45
+ }
46
+ function unified(project) {
47
+ return project.configuration !== undefined || Object.keys(project.replay || {}).some(key => key !== 'enabled');
48
+ }
49
+ function replayOptions(project, platform) {
50
+ validateReplay(project.replay);
51
+ const replay = project.replay;
52
+ if (!replay?.enabled || replay[platform] === false) return undefined;
53
+ return {
54
+ sessionReplaySamplingRate: replay.sessionReplaySamplingRate ?? 100,
55
+ sessionReplayOnErrorSamplingRate: replay.sessionReplayOnErrorSamplingRate ?? 0,
56
+ ...(replay[platform] || {}),
57
+ };
58
+ }
59
+ function nativeReplayEnabled(project) { validateReplay(project.replay); return project.replay?.enabled === true && project.replay.native !== false; }
60
+ function resolveNativeConfiguration(project) {
61
+ validateReplay(project.replay);
62
+ if (project.configuration === undefined) return undefined;
63
+ object(project.configuration, 'configuration');
64
+ const config = JSON.parse(JSON.stringify(project.configuration));
65
+ keys(config, ['sdk', 'rum', 'logger', 'trace', 'autoTrack'], 'configuration');
66
+ object(config.sdk, 'configuration.sdk');
67
+ const replay = replayOptions(project, 'native');
68
+ if (replay) {
69
+ if (!config.rum) throw new Error('Native Replay requires configuration.rum');
70
+ config.replay = replay;
71
+ }
72
+ return config;
73
+ }
74
+ function resolveWebConfiguration(project) {
75
+ validateReplay(project.replay);
76
+ if (project.web?.enabled !== true) return undefined;
77
+ const override = project.web.configuration || {};
78
+ object(override, 'web.configuration');
79
+ if (!unified(project)) return override;
80
+ const native = resolveNativeConfiguration(project) || {};
81
+ // Copy only shared Browser settings. Native endpoints and application IDs stay out of Web artifacts.
82
+ const fields = {
83
+ sdk: ['serviceName', 'env', 'globalContext'],
84
+ rum: ['sessionSamplingRate', 'sampleRate', 'sessionOnErrorSamplingRate', 'sessionOnErrorSampleRate', 'globalContext'],
85
+ logger: ['logSamplingRate', 'sampleRate', 'enableCustomLog', 'logLevelFilters', 'globalContext'],
86
+ trace: ['traceSamplingRate', 'sampleRate', 'traceType'],
87
+ };
88
+ const config = {};
89
+ for (const [group, names] of Object.entries(fields)) {
90
+ if (native[group] !== undefined) config[group] = Object.fromEntries(names.filter(key => native[group][key] !== undefined).map(key => [key, native[group][key]]));
91
+ if (override[group] !== undefined) config[group] = { ...config[group], ...override[group] };
92
+ }
93
+ if (native.autoTrack || override.autoTrack) config.autoTrack = { ...native.autoTrack, ...override.autoTrack };
94
+ config.web = { ...override.web };
95
+ if (config.web.replay !== undefined) throw new Error('Configure Replay once at replay.web; remove web.configuration.web.replay');
96
+ const replay = replayOptions(project, 'web');
97
+ if (replay) {
98
+ if (!config.rum) throw new Error('Web Replay requires configuration.rum or web.configuration.rum');
99
+ config.web.replay = { enabled: true, ...replay };
100
+ }
101
+ return config;
102
+ }
103
+ function readProject(extensionRoot) {
104
+ const file = path.resolve(extensionRoot, '..', '..', 'cocos-sdk.config.json');
105
+ return fs.existsSync(file) ? JSON.parse(fs.readFileSync(file, 'utf8')) : {};
106
+ }
107
+ function nativeConfigurationScript(configuration) {
108
+ return '\n/* COCOS_PROJECT_CONFIGURATION_BEGIN */\n'
109
+ + '(typeof window !== "undefined" ? window : globalThis).__FT_COCOS_CONFIGURATION__ = '
110
+ + (configuration ? JSON.stringify(configuration).replace(/</g, '\\u003c') : 'undefined')
111
+ + ';\n/* COCOS_PROJECT_CONFIGURATION_END */\n';
112
+ }
113
+ function configureNativeBuild(buildRoot, extensionRoot) {
114
+ if (!buildRoot || !fs.existsSync(buildRoot)) return;
115
+ const config = resolveNativeConfiguration(readProject(extensionRoot));
116
+ let found = false;
117
+ function visit(directory, depth) {
118
+ if (depth > 12) return;
119
+ for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
120
+ if (['node_modules', '.git', 'library', 'temp', 'cocos-sdk-native'].includes(entry.name)) continue;
121
+ const file = path.join(directory, entry.name);
122
+ if (entry.isDirectory()) visit(file, depth + 1);
123
+ else if (entry.isFile() && entry.name.endsWith('.js')) {
124
+ const source = fs.readFileSync(file, 'utf8');
125
+ if (!source.includes('__FT_COCOS_NATIVE_FACTORY__')) continue;
126
+ if (config?.replay && !source.includes('__FT_COCOS_REPLAY_FACTORY__')) throw new Error('Replay was enabled after installation. Rerun the installer with --replay and rebuild.');
127
+ const clean = source.replace(/\n?\/\* COCOS_PROJECT_CONFIGURATION_BEGIN \*\/[\s\S]*?\/\* COCOS_PROJECT_CONFIGURATION_END \*\/\n?/g, '');
128
+ fs.writeFileSync(file, clean + nativeConfigurationScript(config)); found = true;
129
+ }
130
+ }
131
+ }
132
+ visit(path.resolve(buildRoot), 0);
133
+ if (config && !found) throw new Error('Native SDK runtime was not included in the build. Rerun the installer and rebuild.');
134
+ }
135
+ module.exports = { resolveNativeConfiguration, resolveWebConfiguration, nativeReplayEnabled, readProject, nativeConfigurationScript, configureNativeBuild };
@@ -29,8 +29,6 @@ import java.util.Map;
29
29
 
30
30
  /** Cocos reflection entry point. All calls and responses are JSON envelopes. */
31
31
  public final class FTCocosBridge {
32
- private static final String COCOS_SDK_VERSION_KEY = "sdk_package_cocos";
33
-
34
32
  private FTCocosBridge() {
35
33
  }
36
34
 
@@ -61,7 +59,7 @@ public final class FTCocosBridge {
61
59
  private static Object dispatch(String method, JSONObject payload) throws Exception {
62
60
  switch (method) {
63
61
  case "hybrid.attach":
64
- attachHybrid(payload);
62
+ ensureNativeHostInitialized();
65
63
  return null;
66
64
  case "sdk.configure":
67
65
  configureSdk(payload);
@@ -130,13 +128,6 @@ public final class FTCocosBridge {
130
128
  }
131
129
  }
132
130
 
133
- private static void attachHybrid(JSONObject json) throws Exception {
134
- ensureNativeHostInitialized();
135
- if (hasText(json, "sdkVersion")) {
136
- FTSdk.appendGlobalContext(COCOS_SDK_VERSION_KEY, json.getString("sdkVersion"));
137
- }
138
- }
139
-
140
131
  private static void ensureNativeHostInitialized() {
141
132
  if (FTSdk.get() == null) {
142
133
  throw new IllegalStateException(
@@ -156,6 +147,10 @@ public final class FTCocosBridge {
156
147
  if (json.has("debug")) config.setDebug(json.getBoolean("debug"));
157
148
  if (hasText(json, "env")) config.setEnv(json.getString("env"));
158
149
  if (hasText(json, "serviceName")) config.setServiceName(json.getString("serviceName"));
150
+ if (json.has("allowWebViewHost")) {
151
+ config.setAllowWebViewHost(json.isNull("allowWebViewHost")
152
+ ? null : stringArray(json.getJSONArray("allowWebViewHost")));
153
+ }
159
154
  addStringContext(json.optJSONObject("globalContext"), new StringContextSetter() {
160
155
  @Override public void set(String key, String value) { config.addGlobalContext(key, value); }
161
156
  });
@@ -187,6 +182,7 @@ public final class FTCocosBridge {
187
182
  if (json.has("enableNativeUserAction")) config.setEnableTraceUserAction(json.getBoolean("enableNativeUserAction"));
188
183
  if (json.has("enableNativeUserView")) config.setEnableTraceUserView(json.getBoolean("enableNativeUserView"));
189
184
  if (json.has("enableNativeUserResource")) config.setEnableTraceUserResource(json.getBoolean("enableNativeUserResource"));
185
+ if (json.has("enableTraceWebView")) config.setEnableTraceWebView(json.getBoolean("enableTraceWebView"));
190
186
  if (json.has("enableNativeCrash")) config.setEnableTrackAppCrash(json.getBoolean("enableNativeCrash"));
191
187
  if (json.has("enableNativeAnr")) config.setEnableTrackAppANR(json.getBoolean("enableNativeAnr"));
192
188
  if (json.has("enableNativeUiBlock")) {
@@ -210,6 +206,7 @@ public final class FTCocosBridge {
210
206
  else if (json.has("sampleRate")) config.setSamplingRate((float) json.getDouble("sampleRate"));
211
207
  if (json.has("enableLinkRumData")) config.setEnableLinkRumData(json.getBoolean("enableLinkRumData"));
212
208
  if (json.has("enableCustomLog")) config.setEnableCustomLog(json.getBoolean("enableCustomLog"));
209
+ if (json.has("enableWebViewLog")) config.setEnableWebViewLog(json.getBoolean("enableWebViewLog"));
213
210
  if (json.has("printCustomLogToConsole")) config.setPrintCustomLogToConsole(json.getBoolean("printCustomLogToConsole"));
214
211
  if (json.has("logCacheLimitCount")) config.setLogCacheLimitCount(json.getInt("logCacheLimitCount"));
215
212
  if ("discardOldest".equals(json.optString("discardStrategy"))) config.setLogCacheDiscardStrategy(LogCacheDiscard.DISCARD_OLDEST);
@@ -32,10 +32,6 @@
32
32
  FTExternalDataManager *rum = [FTExternalDataManager sharedManager];
33
33
  if ([method isEqualToString:@"hybrid.attach"]) {
34
34
  [self ensureNativeHostInitialized];
35
- NSString *sdkVersion = [self text:arguments[@"sdkVersion"]];
36
- if (sdkVersion.length > 0) {
37
- [FTMobileAgent appendGlobalContext:@{ @"sdk_package_cocos": sdkVersion }];
38
- }
39
35
  return nil;
40
36
  }
41
37
  if ([method isEqualToString:@"sdk.configure"]) {
@@ -53,6 +49,10 @@
53
49
  if (arguments[@"debug"]) config.enableSDKDebugLog = [arguments[@"debug"] boolValue];
54
50
  if ([self text:arguments[@"env"]].length > 0) config.env = arguments[@"env"];
55
51
  if ([self text:arguments[@"serviceName"]].length > 0) config.service = arguments[@"serviceName"];
52
+ if (arguments[@"allowWebViewHost"]) {
53
+ config.allowWebViewHost = arguments[@"allowWebViewHost"] == [NSNull null]
54
+ ? nil : arguments[@"allowWebViewHost"];
55
+ }
56
56
  if ([arguments[@"globalContext"] isKindOfClass:NSDictionary.class]) config.globalContext = arguments[@"globalContext"];
57
57
  [FTMobileAgent startWithConfigOptions:config];
58
58
  return nil;
@@ -90,6 +90,7 @@
90
90
  if (arguments[@"enableNativeUserAction"]) config.enableTraceUserAction = [arguments[@"enableNativeUserAction"] boolValue];
91
91
  if (arguments[@"enableNativeUserView"]) config.enableTraceUserView = [arguments[@"enableNativeUserView"] boolValue];
92
92
  if (arguments[@"enableNativeUserResource"]) config.enableTraceUserResource = [arguments[@"enableNativeUserResource"] boolValue];
93
+ if (arguments[@"enableTraceWebView"]) config.enableTraceWebView = [arguments[@"enableTraceWebView"] boolValue];
93
94
  if (arguments[@"enableNativeCrash"]) config.enableTrackAppCrash = [arguments[@"enableNativeCrash"] boolValue];
94
95
  if (arguments[@"enableNativeAnr"]) config.enableTrackAppANR = [arguments[@"enableNativeAnr"] boolValue];
95
96
  if (arguments[@"enableNativeUiBlock"]) {
@@ -157,6 +158,7 @@
157
158
  }
158
159
  if (arguments[@"enableLinkRumData"]) config.enableLinkRumData = [arguments[@"enableLinkRumData"] boolValue];
159
160
  if (arguments[@"enableCustomLog"]) config.enableCustomLog = [arguments[@"enableCustomLog"] boolValue];
161
+ if (arguments[@"enableWebViewLog"]) config.enableWebViewLog = [arguments[@"enableWebViewLog"] boolValue];
160
162
  if (arguments[@"printCustomLogToConsole"]) config.printCustomLogToConsole = [arguments[@"printCustomLogToConsole"] boolValue];
161
163
  if (arguments[@"logCacheLimitCount"]) config.logCacheLimitCount = [arguments[@"logCacheLimitCount"] intValue];
162
164
  config.discardType = [[self text:arguments[@"discardStrategy"]] isEqualToString:@"discardOldest"] ? FTDiscardOldest : FTDiscard;
@@ -1,6 +1,6 @@
1
1
  Pod::Spec.new do |s|
2
2
  s.name = 'FTCocosBridge'
3
- s.version = '0.1.1-alpha.1'
3
+ s.version = '0.1.1-alpha.3'
4
4
  s.summary = 'CloudCare Mobile SDK native bridge for Cocos Creator.'
5
5
  s.homepage = 'https://github.com/GuanceCloud/datakit-cocos'
6
6
  s.license = { :type => 'Apache-2.0' }
@@ -0,0 +1,266 @@
1
+ "use strict";
2
+ (function() {
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __commonJS = function(cb, mod) {
5
+ return function __require() {
6
+ try {
7
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
8
+ } catch (e) {
9
+ throw mod = 0, e;
10
+ }
11
+ };
12
+ };
13
+
14
+ // packages/cocos/dist/creator2/core/version.js
15
+ var require_version = __commonJS({
16
+ "packages/cocos/dist/creator2/core/version.js": function(exports) {
17
+ "use strict";
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.FT_COCOS_SDK_BRIDGE_INFO = exports.FT_COCOS_SDK_BRIDGE_INFO_KEY = exports.FT_COCOS_SDK_VERSION = void 0;
20
+ exports.FT_COCOS_SDK_VERSION = "0.1.1-alpha.3";
21
+ exports.FT_COCOS_SDK_BRIDGE_INFO_KEY = "sdk_bridge_info";
22
+ exports.FT_COCOS_SDK_BRIDGE_INFO = JSON.stringify({
23
+ cocos: exports.FT_COCOS_SDK_VERSION
24
+ });
25
+ }
26
+ });
27
+
28
+ // packages/cocos/dist/creator2/core/platform-runtime.js
29
+ var require_platform_runtime = __commonJS({
30
+ "packages/cocos/dist/creator2/core/platform-runtime.js": function(exports) {
31
+ "use strict";
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.platformGlobal = platformGlobal;
34
+ exports.existingPlatformImplementation = existingPlatformImplementation;
35
+ exports.platformImplementation = platformImplementation;
36
+ var version_js_1 = require_version();
37
+ function platformGlobal() {
38
+ return typeof window !== "undefined" ? window : globalThis;
39
+ }
40
+ function existingPlatformImplementation(context, target) {
41
+ var _a;
42
+ if (target === void 0) {
43
+ target = platformGlobal();
44
+ }
45
+ var previous = (_a = target.__FT_COCOS_INSTANCES__) === null || _a === void 0 ? void 0 : _a[context.engine + ":" + context.platform];
46
+ if (previous && previous.version !== version_js_1.FT_COCOS_SDK_VERSION)
47
+ throw new Error("Cocos SDK versions must match on the same page");
48
+ return previous === null || previous === void 0 ? void 0 : previous.sdk;
49
+ }
50
+ function platformImplementation(context, target, create) {
51
+ if (target === void 0) {
52
+ target = platformGlobal();
53
+ }
54
+ var key = context.engine + ":" + context.platform;
55
+ var instances = target.__FT_COCOS_INSTANCES__ || (target.__FT_COCOS_INSTANCES__ = {});
56
+ var previous = existingPlatformImplementation(context, target);
57
+ if (previous)
58
+ return previous;
59
+ var factory = context.platform === "web" ? target.__FT_COCOS_WEB_FACTORY__ : target.__FT_COCOS_NATIVE_FACTORY__;
60
+ if (!create && (!factory || factory.protocol !== 1 || factory.version !== version_js_1.FT_COCOS_SDK_VERSION)) {
61
+ throw new Error(context.platform === "web" ? "Cocos Web runtime is missing or incompatible. Run the installer with --web and rebuild, or load /web/bootstrap before game scripts." : "Cocos native runtime is missing or incompatible. Rerun the SDK installer and rebuild the project.");
62
+ }
63
+ var sdk = create ? create() : factory.create(context, target);
64
+ instances[key] = { version: version_js_1.FT_COCOS_SDK_VERSION, sdk: sdk };
65
+ return sdk;
66
+ }
67
+ }
68
+ });
69
+
70
+ // packages/cocos/dist/creator2/core/observation.js
71
+ var require_observation = __commonJS({
72
+ "packages/cocos/dist/creator2/core/observation.js": function(exports) {
73
+ "use strict";
74
+ Object.defineProperty(exports, "__esModule", { value: true });
75
+ exports.FTObservationQueue = void 0;
76
+ exports.observationState = observationState;
77
+ function observationState(target) {
78
+ return target.__FT_COCOS_OBSERVATION_STATE__ || (target.__FT_COCOS_OBSERVATION_STATE__ = { reporting: 0 });
79
+ }
80
+ var FTObservationQueue = (
81
+ /** @class */
82
+ (function() {
83
+ function FTObservationQueue2(target) {
84
+ this.target = target;
85
+ this.pending = [];
86
+ this.size = 0;
87
+ this.generation = 0;
88
+ this.dropped = 0;
89
+ this.state = observationState(target);
90
+ }
91
+ FTObservationQueue2.prototype.enqueue = function(run, size) {
92
+ var _this = this;
93
+ if (size === void 0) {
94
+ size = 0;
95
+ }
96
+ if (this.state.reporting)
97
+ return false;
98
+ if (this.pending.length >= 128 || this.size + size > 1024 * 1024) {
99
+ this.dropped++;
100
+ return false;
101
+ }
102
+ this.pending.push({ run: run, size: size });
103
+ this.size += size;
104
+ if (this.timer !== void 0)
105
+ return true;
106
+ var generation = this.generation;
107
+ try {
108
+ var schedule = this.target.setTimeout || (typeof setTimeout === "function" ? setTimeout : void 0);
109
+ var cancel = this.target.clearTimeout || (typeof clearTimeout === "function" ? clearTimeout : void 0);
110
+ if (!schedule) {
111
+ this.dropped += this.pending.length;
112
+ this.pending = [];
113
+ this.size = 0;
114
+ return false;
115
+ }
116
+ this.cancel = cancel === null || cancel === void 0 ? void 0 : cancel.bind(this.target);
117
+ this.timer = schedule.call(this.target, function() {
118
+ _this.timer = void 0;
119
+ if (generation !== _this.generation)
120
+ return;
121
+ var batch = _this.pending;
122
+ _this.pending = [];
123
+ _this.size = 0;
124
+ _this.state.reporting++;
125
+ try {
126
+ for (var _i = 0, batch_1 = batch; _i < batch_1.length; _i++) {
127
+ var task = batch_1[_i];
128
+ if (generation !== _this.generation)
129
+ break;
130
+ try {
131
+ task.run();
132
+ } catch (_a) {
133
+ }
134
+ }
135
+ } finally {
136
+ _this.state.reporting--;
137
+ }
138
+ }, 0);
139
+ return true;
140
+ } catch (_a) {
141
+ this.dropped += this.pending.length;
142
+ this.pending = [];
143
+ this.size = 0;
144
+ return false;
145
+ }
146
+ };
147
+ FTObservationQueue2.prototype.stop = function() {
148
+ var _a;
149
+ this.generation++;
150
+ this.pending = [];
151
+ this.size = 0;
152
+ if (this.timer !== void 0) {
153
+ try {
154
+ (_a = this.cancel) === null || _a === void 0 ? void 0 : _a.call(this, this.timer);
155
+ } catch (_b) {
156
+ }
157
+ this.timer = void 0;
158
+ }
159
+ };
160
+ return FTObservationQueue2;
161
+ })()
162
+ );
163
+ exports.FTObservationQueue = FTObservationQueue;
164
+ }
165
+ });
166
+
167
+ // packages/cocos/dist/creator2/native/jsb-errors.js
168
+ var require_jsb_errors = __commonJS({
169
+ "packages/cocos/dist/creator2/native/jsb-errors.js": function(exports) {
170
+ "use strict";
171
+ Object.defineProperty(exports, "__esModule", { value: true });
172
+ exports.installJsbErrorSource = installJsbErrorSource;
173
+ var observation_js_1 = require_observation();
174
+ function installJsbErrorSource(target) {
175
+ var jsb = target.jsb;
176
+ if (!(jsb === null || jsb === void 0 ? void 0 : jsb.onError) || target.__FT_COCOS_JSB_ERRORS__)
177
+ return;
178
+ var register = jsb.onError;
179
+ var handler;
180
+ var state = (0, observation_js_1.observationState)(target);
181
+ var observing = 0;
182
+ var subscribers = [];
183
+ var dispatch = function(location, message, stack) {
184
+ var _a;
185
+ var observations = [];
186
+ try {
187
+ if (!state.reporting && !observing) {
188
+ observing++;
189
+ try {
190
+ var timestampMs = Date.now();
191
+ for (var _i = 0, _b = subscribers.slice(); _i < _b.length; _i++) {
192
+ var subscriber = _b[_i];
193
+ try {
194
+ observations.push({ subscriber: subscriber, observation: { timestampMs: timestampMs, context: (_a = subscriber.captureContext) === null || _a === void 0 ? void 0 : _a.call(subscriber) } });
195
+ } catch (_c) {
196
+ }
197
+ }
198
+ } finally {
199
+ observing--;
200
+ }
201
+ }
202
+ } catch (_d) {
203
+ }
204
+ try {
205
+ return handler === null || handler === void 0 ? void 0 : handler.call(this, location, message, stack);
206
+ } finally {
207
+ for (var _e = 0, observations_1 = observations; _e < observations_1.length; _e++) {
208
+ var _f = observations_1[_e], subscriber = _f.subscriber, observation = _f.observation;
209
+ if (!subscriber.active)
210
+ continue;
211
+ observing++;
212
+ try {
213
+ subscriber.callback(location, message, stack, observation);
214
+ } catch (_g) {
215
+ } finally {
216
+ observing--;
217
+ }
218
+ }
219
+ }
220
+ };
221
+ jsb.onError = function() {
222
+ var args = [];
223
+ for (var _i = 0; _i < arguments.length; _i++) {
224
+ args[_i] = arguments[_i];
225
+ }
226
+ if (args.length !== 1 || typeof args[0] !== "function")
227
+ return register.apply(this, args);
228
+ var callback = args[0];
229
+ var result = register.call(this, subscribers.length ? dispatch : callback);
230
+ handler = callback;
231
+ return result;
232
+ };
233
+ target.__FT_COCOS_JSB_ERRORS__ = {
234
+ protocol: 2,
235
+ subscribe: function(callback, captureContext) {
236
+ if (subscribers.length === 0)
237
+ register.call(jsb, dispatch);
238
+ var subscriber = { callback: callback, captureContext: captureContext, active: true };
239
+ subscribers.push(subscriber);
240
+ return function() {
241
+ if (!subscriber.active)
242
+ return;
243
+ subscriber.active = false;
244
+ var index = subscribers.indexOf(subscriber);
245
+ if (index >= 0)
246
+ subscribers.splice(index, 1);
247
+ if (subscribers.length === 0 && handler)
248
+ register.call(jsb, handler);
249
+ };
250
+ }
251
+ };
252
+ }
253
+ }
254
+ });
255
+
256
+ // packages/cocos/dist/creator2/native/error-bootstrap.js
257
+ var require_error_bootstrap = __commonJS({
258
+ "packages/cocos/dist/creator2/native/error-bootstrap.js": function(exports) {
259
+ Object.defineProperty(exports, "__esModule", { value: true });
260
+ var platform_runtime_js_1 = require_platform_runtime();
261
+ var jsb_errors_js_1 = require_jsb_errors();
262
+ (0, jsb_errors_js_1.installJsbErrorSource)((0, platform_runtime_js_1.platformGlobal)());
263
+ }
264
+ });
265
+ require_error_bootstrap();
266
+ })();
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcare/cocos-sdk",
3
- "version": "0.1.1-alpha.1",
4
- "description": "Observability SDK integration for Cocos Creator 2.4 and 3.x",
3
+ "version": "0.1.1-alpha.3",
4
+ "description": "Observability SDK integration for Cocos Creator 2.4 and 3.x on Android, iOS, and Web",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Guance Cloud",
7
7
  "repository": {
@@ -36,6 +36,20 @@
36
36
  "import": "./dist/creator3/core/plugin-api.js",
37
37
  "require": "./dist/creator2/core/plugin-api.js",
38
38
  "default": "./dist/creator2/core/plugin-api.js"
39
+ },
40
+ "./web/creator2": {
41
+ "types": "./dist/creator2/web/creator2.d.ts",
42
+ "default": "./dist/creator2/web/creator2.js"
43
+ },
44
+ "./web/creator3": {
45
+ "types": "./dist/creator3/web/creator3.d.ts",
46
+ "default": "./dist/creator3/web/creator3.js"
47
+ },
48
+ "./web/bootstrap": {
49
+ "types": "./dist/creator2/web/bootstrap.d.ts",
50
+ "import": "./dist/creator3/web/bootstrap.js",
51
+ "require": "./dist/creator2/web/bootstrap.js",
52
+ "default": "./dist/creator2/web/bootstrap.js"
39
53
  }
40
54
  },
41
55
  "files": [
@@ -48,7 +62,9 @@
48
62
  "README.md",
49
63
  "LICENSE",
50
64
  "THIRD_PARTY_NOTICES",
51
- "plugin-api"
65
+ "plugin-api",
66
+ "web",
67
+ "runtime"
52
68
  ],
53
69
  "bin": {
54
70
  "guance-cocos": "bin/cli.cjs"