@leonxin/meetgames 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (246) hide show
  1. package/README.md +120 -0
  2. package/bundled/android/sample.txt +1 -0
  3. package/dist/android/adapter.d.ts +3 -0
  4. package/dist/android/adapter.d.ts.map +1 -0
  5. package/dist/android/adapter.js +8 -0
  6. package/dist/android/adapter.js.map +1 -0
  7. package/dist/android/assembleIntegrationJson.d.ts +8 -0
  8. package/dist/android/assembleIntegrationJson.d.ts.map +1 -0
  9. package/dist/android/assembleIntegrationJson.js +31 -0
  10. package/dist/android/assembleIntegrationJson.js.map +1 -0
  11. package/dist/android/detect.d.ts +11 -0
  12. package/dist/android/detect.d.ts.map +1 -0
  13. package/dist/android/detect.js +87 -0
  14. package/dist/android/detect.js.map +1 -0
  15. package/dist/android/downloadGoogleServicesJson.d.ts +20 -0
  16. package/dist/android/downloadGoogleServicesJson.d.ts.map +1 -0
  17. package/dist/android/downloadGoogleServicesJson.js +43 -0
  18. package/dist/android/downloadGoogleServicesJson.js.map +1 -0
  19. package/dist/android/fetchRemoteConfig.d.ts +5 -0
  20. package/dist/android/fetchRemoteConfig.d.ts.map +1 -0
  21. package/dist/android/fetchRemoteConfig.js +24 -0
  22. package/dist/android/fetchRemoteConfig.js.map +1 -0
  23. package/dist/android/gradle.d.ts +30 -0
  24. package/dist/android/gradle.d.ts.map +1 -0
  25. package/dist/android/gradle.js +87 -0
  26. package/dist/android/gradle.js.map +1 -0
  27. package/dist/android/manifest.d.ts +10 -0
  28. package/dist/android/manifest.d.ts.map +1 -0
  29. package/dist/android/manifest.js +45 -0
  30. package/dist/android/manifest.js.map +1 -0
  31. package/dist/android/meetSdkRemoteGradle.d.ts +86 -0
  32. package/dist/android/meetSdkRemoteGradle.d.ts.map +1 -0
  33. package/dist/android/meetSdkRemoteGradle.js +479 -0
  34. package/dist/android/meetSdkRemoteGradle.js.map +1 -0
  35. package/dist/android/snapchatManifestPlaceholders.d.ts +15 -0
  36. package/dist/android/snapchatManifestPlaceholders.d.ts.map +1 -0
  37. package/dist/android/snapchatManifestPlaceholders.js +53 -0
  38. package/dist/android/snapchatManifestPlaceholders.js.map +1 -0
  39. package/dist/cli.d.ts +2 -0
  40. package/dist/cli.d.ts.map +1 -0
  41. package/dist/cli.js +291 -0
  42. package/dist/cli.js.map +1 -0
  43. package/dist/config/fetchConfigWrite.d.ts +10 -0
  44. package/dist/config/fetchConfigWrite.d.ts.map +1 -0
  45. package/dist/config/fetchConfigWrite.js +21 -0
  46. package/dist/config/fetchConfigWrite.js.map +1 -0
  47. package/dist/config/loadAndroidIntegration.d.ts +4 -0
  48. package/dist/config/loadAndroidIntegration.d.ts.map +1 -0
  49. package/dist/config/loadAndroidIntegration.js +34 -0
  50. package/dist/config/loadAndroidIntegration.js.map +1 -0
  51. package/dist/config/loadManifest.d.ts +3 -0
  52. package/dist/config/loadManifest.d.ts.map +1 -0
  53. package/dist/config/loadManifest.js +33 -0
  54. package/dist/config/loadManifest.js.map +1 -0
  55. package/dist/config/meetSdkDefaultConfig.d.ts +5 -0
  56. package/dist/config/meetSdkDefaultConfig.d.ts.map +1 -0
  57. package/dist/config/meetSdkDefaultConfig.js +15 -0
  58. package/dist/config/meetSdkDefaultConfig.js.map +1 -0
  59. package/dist/config/meetSdkRemoteConfig.d.ts +240 -0
  60. package/dist/config/meetSdkRemoteConfig.d.ts.map +1 -0
  61. package/dist/config/meetSdkRemoteConfig.js +892 -0
  62. package/dist/config/meetSdkRemoteConfig.js.map +1 -0
  63. package/dist/config/topsdkFeatureModules.d.ts +19 -0
  64. package/dist/config/topsdkFeatureModules.d.ts.map +1 -0
  65. package/dist/config/topsdkFeatureModules.js +47 -0
  66. package/dist/config/topsdkFeatureModules.js.map +1 -0
  67. package/dist/contracts/types.d.ts +95 -0
  68. package/dist/contracts/types.d.ts.map +1 -0
  69. package/dist/contracts/types.js +2 -0
  70. package/dist/contracts/types.js.map +1 -0
  71. package/dist/core/engine.d.ts +3 -0
  72. package/dist/core/engine.d.ts.map +1 -0
  73. package/dist/core/engine.js +18 -0
  74. package/dist/core/engine.js.map +1 -0
  75. package/dist/core/patch.d.ts +2 -0
  76. package/dist/core/patch.d.ts.map +1 -0
  77. package/dist/core/patch.js +61 -0
  78. package/dist/core/patch.js.map +1 -0
  79. package/dist/core/pipeline.d.ts +12 -0
  80. package/dist/core/pipeline.d.ts.map +1 -0
  81. package/dist/core/pipeline.js +102 -0
  82. package/dist/core/pipeline.js.map +1 -0
  83. package/dist/core/previewPatches.d.ts +8 -0
  84. package/dist/core/previewPatches.d.ts.map +1 -0
  85. package/dist/core/previewPatches.js +25 -0
  86. package/dist/core/previewPatches.js.map +1 -0
  87. package/dist/core/reporter.d.ts +3 -0
  88. package/dist/core/reporter.d.ts.map +1 -0
  89. package/dist/core/reporter.js +24 -0
  90. package/dist/core/reporter.js.map +1 -0
  91. package/dist/core/resolveFetchChannelType.d.ts +27 -0
  92. package/dist/core/resolveFetchChannelType.d.ts.map +1 -0
  93. package/dist/core/resolveFetchChannelType.js +54 -0
  94. package/dist/core/resolveFetchChannelType.js.map +1 -0
  95. package/dist/core/workspace.d.ts +5 -0
  96. package/dist/core/workspace.d.ts.map +1 -0
  97. package/dist/core/workspace.js +24 -0
  98. package/dist/core/workspace.js.map +1 -0
  99. package/dist/entry.d.ts +3 -0
  100. package/dist/entry.d.ts.map +1 -0
  101. package/dist/entry.js +7 -0
  102. package/dist/entry.js.map +1 -0
  103. package/dist/index.d.ts +23 -0
  104. package/dist/index.d.ts.map +1 -0
  105. package/dist/index.js +22 -0
  106. package/dist/index.js.map +1 -0
  107. package/dist/ios/channelConfig.d.ts +7 -0
  108. package/dist/ios/channelConfig.d.ts.map +1 -0
  109. package/dist/ios/channelConfig.js +51 -0
  110. package/dist/ios/channelConfig.js.map +1 -0
  111. package/dist/ios/codeUtils.d.ts +15 -0
  112. package/dist/ios/codeUtils.d.ts.map +1 -0
  113. package/dist/ios/codeUtils.js +166 -0
  114. package/dist/ios/codeUtils.js.map +1 -0
  115. package/dist/ios/detect.d.ts +3 -0
  116. package/dist/ios/detect.d.ts.map +1 -0
  117. package/dist/ios/detect.js +65 -0
  118. package/dist/ios/detect.js.map +1 -0
  119. package/dist/ios/fileManager.d.ts +12 -0
  120. package/dist/ios/fileManager.d.ts.map +1 -0
  121. package/dist/ios/fileManager.js +46 -0
  122. package/dist/ios/fileManager.js.map +1 -0
  123. package/dist/ios/infoPlist.d.ts +11 -0
  124. package/dist/ios/infoPlist.d.ts.map +1 -0
  125. package/dist/ios/infoPlist.js +48 -0
  126. package/dist/ios/infoPlist.js.map +1 -0
  127. package/dist/ios/integrate.d.ts +12 -0
  128. package/dist/ios/integrate.d.ts.map +1 -0
  129. package/dist/ios/integrate.js +263 -0
  130. package/dist/ios/integrate.js.map +1 -0
  131. package/dist/ios/pbxprojEditor.d.ts +20 -0
  132. package/dist/ios/pbxprojEditor.d.ts.map +1 -0
  133. package/dist/ios/pbxprojEditor.js +198 -0
  134. package/dist/ios/pbxprojEditor.js.map +1 -0
  135. package/dist/ios/pluginConfig.d.ts +6 -0
  136. package/dist/ios/pluginConfig.d.ts.map +1 -0
  137. package/dist/ios/pluginConfig.js +64 -0
  138. package/dist/ios/pluginConfig.js.map +1 -0
  139. package/dist/ios/reserved.d.ts +4 -0
  140. package/dist/ios/reserved.d.ts.map +1 -0
  141. package/dist/ios/reserved.js +6 -0
  142. package/dist/ios/reserved.js.map +1 -0
  143. package/dist/ios/sdkBundle.d.ts +7 -0
  144. package/dist/ios/sdkBundle.d.ts.map +1 -0
  145. package/dist/ios/sdkBundle.js +30 -0
  146. package/dist/ios/sdkBundle.js.map +1 -0
  147. package/dist/ios/template.d.ts +3 -0
  148. package/dist/ios/template.d.ts.map +1 -0
  149. package/dist/ios/template.js +24 -0
  150. package/dist/ios/template.js.map +1 -0
  151. package/dist/ios/types.d.ts +43 -0
  152. package/dist/ios/types.d.ts.map +1 -0
  153. package/dist/ios/types.js +11 -0
  154. package/dist/ios/types.js.map +1 -0
  155. package/dist/mcp/server.d.ts +4 -0
  156. package/dist/mcp/server.d.ts.map +1 -0
  157. package/dist/mcp/server.js +139 -0
  158. package/dist/mcp/server.js.map +1 -0
  159. package/dist/mcp/service.d.ts +49 -0
  160. package/dist/mcp/service.d.ts.map +1 -0
  161. package/dist/mcp/service.js +113 -0
  162. package/dist/mcp/service.js.map +1 -0
  163. package/dist/mcp-entry.d.ts +3 -0
  164. package/dist/mcp-entry.d.ts.map +1 -0
  165. package/dist/mcp-entry.js +7 -0
  166. package/dist/mcp-entry.js.map +1 -0
  167. package/dist/ops/fileStore.d.ts +17 -0
  168. package/dist/ops/fileStore.d.ts.map +1 -0
  169. package/dist/ops/fileStore.js +55 -0
  170. package/dist/ops/fileStore.js.map +1 -0
  171. package/dist/ops/handlers.d.ts +10 -0
  172. package/dist/ops/handlers.d.ts.map +1 -0
  173. package/dist/ops/handlers.js +268 -0
  174. package/dist/ops/handlers.js.map +1 -0
  175. package/dist/platforms/android/adapter.d.ts +3 -0
  176. package/dist/platforms/android/adapter.d.ts.map +1 -0
  177. package/dist/platforms/android/adapter.js +8 -0
  178. package/dist/platforms/android/adapter.js.map +1 -0
  179. package/dist/platforms/android/detect.d.ts +3 -0
  180. package/dist/platforms/android/detect.d.ts.map +1 -0
  181. package/dist/platforms/android/detect.js +79 -0
  182. package/dist/platforms/android/detect.js.map +1 -0
  183. package/dist/platforms/android/gradle.d.ts +30 -0
  184. package/dist/platforms/android/gradle.d.ts.map +1 -0
  185. package/dist/platforms/android/gradle.js +83 -0
  186. package/dist/platforms/android/gradle.js.map +1 -0
  187. package/dist/platforms/android/manifest.d.ts +7 -0
  188. package/dist/platforms/android/manifest.d.ts.map +1 -0
  189. package/dist/platforms/android/manifest.js +24 -0
  190. package/dist/platforms/android/manifest.js.map +1 -0
  191. package/dist/platforms/ios/adapter.d.ts +3 -0
  192. package/dist/platforms/ios/adapter.d.ts.map +1 -0
  193. package/dist/platforms/ios/adapter.js +8 -0
  194. package/dist/platforms/ios/adapter.js.map +1 -0
  195. package/dist/platforms/ios/detect.d.ts +8 -0
  196. package/dist/platforms/ios/detect.d.ts.map +1 -0
  197. package/dist/platforms/ios/detect.js +67 -0
  198. package/dist/platforms/ios/detect.js.map +1 -0
  199. package/dist/platforms/ios/plist.d.ts +11 -0
  200. package/dist/platforms/ios/plist.d.ts.map +1 -0
  201. package/dist/platforms/ios/plist.js +24 -0
  202. package/dist/platforms/ios/plist.js.map +1 -0
  203. package/dist/platforms/ios/podfile.d.ts +7 -0
  204. package/dist/platforms/ios/podfile.d.ts.map +1 -0
  205. package/dist/platforms/ios/podfile.js +15 -0
  206. package/dist/platforms/ios/podfile.js.map +1 -0
  207. package/dist/remote/fetchJson.d.ts +5 -0
  208. package/dist/remote/fetchJson.d.ts.map +1 -0
  209. package/dist/remote/fetchJson.js +24 -0
  210. package/dist/remote/fetchJson.js.map +1 -0
  211. package/dist/remote/topsdkDownloadSdkConfig.d.ts +23 -0
  212. package/dist/remote/topsdkDownloadSdkConfig.d.ts.map +1 -0
  213. package/dist/remote/topsdkDownloadSdkConfig.js +56 -0
  214. package/dist/remote/topsdkDownloadSdkConfig.js.map +1 -0
  215. package/dist/remote/topsdkGetSdkConfig.d.ts +46 -0
  216. package/dist/remote/topsdkGetSdkConfig.d.ts.map +1 -0
  217. package/dist/remote/topsdkGetSdkConfig.js +95 -0
  218. package/dist/remote/topsdkGetSdkConfig.js.map +1 -0
  219. package/dist/remote/topsdkSign.d.ts +6 -0
  220. package/dist/remote/topsdkSign.d.ts.map +1 -0
  221. package/dist/remote/topsdkSign.js +10 -0
  222. package/dist/remote/topsdkSign.js.map +1 -0
  223. package/docs/ANDROID.md +133 -0
  224. package/docs/API.md +47 -0
  225. package/docs/CURSOR-MCP-SETUP.md +72 -0
  226. package/docs/MCP-SKILL.md +63 -0
  227. package/docs/README.md +12 -0
  228. package/docs/api/downloadSDKConfig.md +96 -0
  229. package/docs/api/getChannelConfig-meetgames.md +106 -0
  230. package/docs/api/getSDKConfig.md +38 -0
  231. package/docs//346/212/200/346/234/257/346/226/271/346/241/210/350/260/203/347/240/224.md +329 -0
  232. package/docs//351/234/200/346/261/202/346/226/207/346/241/243.md +320 -0
  233. package/fixtures/api-samples/getChannelConfig-meetgames.sample.json +123 -0
  234. package/fixtures/meetsdk-remote-config.download-shape.json +20 -0
  235. package/fixtures/meetsdk-remote-config.mock.json +69 -0
  236. package/fixtures/recipes/android-default.fixture.yaml +15 -0
  237. package/fixtures/recipes/android-integration.fixture.json +29 -0
  238. package/fixtures/topsdk-config-reference.json +39 -0
  239. package/meetsdk-android.json +151 -0
  240. package/package.json +61 -0
  241. package/recipes/android-default.yaml +15 -0
  242. package/recipes/integrate-default.yaml +16 -0
  243. package/recipes/ios-default.yaml +5 -0
  244. package/schema/android-integration.schema.json +65 -0
  245. package/schema/manifest.schema.json +45 -0
  246. package/schema/meetsdk-remote-config.schema.json +45 -0
@@ -0,0 +1,892 @@
1
+ /**
2
+ * TOPSDK 能力:开关与参数均在 `sdkModules` 下。
3
+ * **integrate 是否接入某插件**:只看 JSON 是否写了对应子键(如 `kakao`、`appsflyer`、`facebookdata`);有键则 value 必为 `{…}` / `{}`,无配置则不写该键。
4
+ * **登录 Facebook**(`login.facebook`)与 **埋点 Facebook Data**(`analytics.facebookdata`)子键名可区分。
5
+ * 不再使用顶层 `facebook` / `google` / `appsflyer` / `parameterConfig`,也不再用扁平 `features` / `featuresByCategory`。
6
+ *
7
+ * `console/openSDK/getSDKConfig` 服务端:gp-sdk `SDKDownloadController`(`VOSDKConfig` 仅含 `channelAuthConfig`);
8
+ * `VOChannelAuthConfig` 使用 `clientId` / `scheme` / `secret` 等。`openSDK/downloadSDKConfig`(gp-sdk)从 DB 组装 `meetsdk-remote-config.json`;`sdk-home` 仅负责 SDK 包下载。
9
+ */
10
+ /** integrate / Gradle 依赖:写了子键且 value 为对象(gp-sdk 有键则必为 `{…}` / `{}`)。 */
11
+ export function hasSdkModuleKey(scope, subKey) {
12
+ if (!Object.prototype.hasOwnProperty.call(scope, subKey))
13
+ return false;
14
+ const v = scope[subKey];
15
+ return typeof v === "object" && v !== null && !Array.isArray(v);
16
+ }
17
+ /** 子模块带凭证对象(用于 default 合并、校验等);`false` / 缺失视为无凭证。 */
18
+ export function isSdkModuleToggleOn(value) {
19
+ if (value === true)
20
+ return true;
21
+ if (typeof value === "object" && value !== null && !Array.isArray(value))
22
+ return true;
23
+ return false;
24
+ }
25
+ /** 读取渠道(兼容旧缓存里 `topsdk.channel`)。 */
26
+ export function readMeetSdkRemoteChannel(config) {
27
+ const root = config.channel?.trim();
28
+ if (root)
29
+ return root;
30
+ const legacy = config.topsdk.channel;
31
+ return legacy?.trim() || "";
32
+ }
33
+ /** 缓存文件名;`fetch-config` 固定写入 `<project-root>/` + 此文件名(不可通过 --out 修改)。 */
34
+ export const MEETSDK_REMOTE_CONFIG_FILENAME = "meetsdk-remote-config.json";
35
+ export function defaultSdkModules() {
36
+ return {
37
+ login: {
38
+ guest: false,
39
+ email: false,
40
+ facebook: false,
41
+ google: false,
42
+ twitter: false,
43
+ snapchat: false,
44
+ line: false,
45
+ naver: false,
46
+ kakao: false,
47
+ tiktok: false,
48
+ },
49
+ payment: { googleIap: false, onestoreIap: false, huaweiIap: false, xiaomiIap: false },
50
+ analytics: { appsflyer: false, facebookdata: false, firebase: false, adjust: false },
51
+ };
52
+ }
53
+ /** 解析 downloadSDKConfig / 本地 JSON:仅保留 JSON 里出现的子键(不写则视为未配置)。 */
54
+ export function emptySdkModules() {
55
+ return {
56
+ login: {},
57
+ payment: {},
58
+ analytics: {},
59
+ };
60
+ }
61
+ function isRecord(v) {
62
+ return typeof v === "object" && v !== null && !Array.isArray(v);
63
+ }
64
+ function str(v) {
65
+ if (v === undefined || v === null)
66
+ return "";
67
+ return String(v);
68
+ }
69
+ function optionalStr(v) {
70
+ if (v === undefined || v === null)
71
+ return undefined;
72
+ const s = String(v).trim();
73
+ return s.length ? s : undefined;
74
+ }
75
+ function bool(v) {
76
+ if (typeof v === "boolean")
77
+ return v;
78
+ if (typeof v === "string")
79
+ return v === "true" || v === "1";
80
+ return Boolean(v);
81
+ }
82
+ function dependency(artifact) {
83
+ return [{ implementation: `$groupId:${artifact}:$topsdk_version` }];
84
+ }
85
+ export const DEFAULT_TOPSDK_PLUGIN_DEPENDENCIES = {
86
+ login: {
87
+ guest: dependency("guest"),
88
+ email: dependency("email"),
89
+ facebook: dependency("facebook"),
90
+ google: dependency("google"),
91
+ twitter: dependency("twitter"),
92
+ snapchat: dependency("snapchat"),
93
+ line: dependency("line"),
94
+ naver: dependency("naver"),
95
+ kakao: dependency("kakao"),
96
+ tiktok: dependency("tiktok"),
97
+ },
98
+ analytics: {
99
+ appsflyer: dependency("appsflyer"),
100
+ firebase: dependency("firebase"),
101
+ adjust: dependency("adjust"),
102
+ facebookdata: dependency("facebook-data"),
103
+ },
104
+ payment: {
105
+ googleIap: dependency("google-iap"),
106
+ onestoreIap: dependency("onestore-iap"),
107
+ huaweiIap: dependency("huawei-iap"),
108
+ xiaomiIap: dependency("xiaomi-iap"),
109
+ },
110
+ };
111
+ function parseDependencies(v, fallback = []) {
112
+ if (!Array.isArray(v))
113
+ return fallback.length > 0 ? [...fallback] : undefined;
114
+ const out = [];
115
+ for (const raw of v) {
116
+ if (typeof raw === "string") {
117
+ out.push({ implementation: raw });
118
+ }
119
+ else if (isRecord(raw)) {
120
+ out.push({ implementation: str(raw.implementation ?? raw.value ?? raw.artifact) });
121
+ }
122
+ }
123
+ if (out.length > 0)
124
+ return out;
125
+ return fallback.length > 0 ? [...fallback] : undefined;
126
+ }
127
+ function parseSimpleModule(v, fallback) {
128
+ if (v === undefined || v === false || v === null)
129
+ return false;
130
+ if (v === true)
131
+ return {};
132
+ if (!isRecord(v))
133
+ return null;
134
+ const dependencies = parseDependencies(v.dependencies);
135
+ return dependencies ? { dependencies } : {};
136
+ }
137
+ /**
138
+ * gp-sdk `getSDKConfig` 的 `data` 往往只有 `channelAuthConfig`;版本 / groupId 可能由网关合并或嵌在 `topsdk` 中。
139
+ */
140
+ function readTopSdkVersionFromData(data) {
141
+ if (!data)
142
+ return "0.0.0";
143
+ if (isRecord(data.topsdk)) {
144
+ const nested = str(data.topsdk.version);
145
+ if (nested)
146
+ return nested;
147
+ }
148
+ const flat = str(data.topsdkVersion ??
149
+ data.sdkVersion ??
150
+ data.version ??
151
+ data.sdkFullVersion ??
152
+ data.topSdkVersion);
153
+ return flat || "0.0.0";
154
+ }
155
+ function readGroupIdFromData(data) {
156
+ if (!data)
157
+ return "com.sino.topsdk";
158
+ if (isRecord(data.topsdk)) {
159
+ const nested = str(data.topsdk.groupId);
160
+ if (nested)
161
+ return nested;
162
+ }
163
+ const flat = str(data.groupId ?? data.mavenGroupId ?? data.group_id);
164
+ return flat || "com.sino.topsdk";
165
+ }
166
+ function readRepositoriesFromData(data) {
167
+ if (!data)
168
+ return [];
169
+ const raw = data.repositories ?? data.mavenRepositories;
170
+ if (Array.isArray(raw))
171
+ return raw.map((x) => String(x));
172
+ return [];
173
+ }
174
+ function parseLoginFacebookModule(v) {
175
+ if (v === undefined || v === false || v === null)
176
+ return false;
177
+ if (v === true)
178
+ return null;
179
+ if (!isRecord(v))
180
+ return null;
181
+ return {
182
+ facebookAppId: str(v.facebookAppId),
183
+ fbLoginProtocolScheme: str(v.fbLoginProtocolScheme),
184
+ facebookClientToken: str(v.facebookClientToken ?? v.clientToken ?? v.secret),
185
+ dependencies: parseDependencies(v.dependencies),
186
+ };
187
+ }
188
+ function parseLoginGoogleModule(v) {
189
+ if (v === undefined || v === false || v === null)
190
+ return false;
191
+ if (v === true)
192
+ return null;
193
+ if (!isRecord(v))
194
+ return null;
195
+ return {
196
+ googleClientId: str(v.googleClientId ?? v.clientId),
197
+ dependencies: parseDependencies(v.dependencies),
198
+ };
199
+ }
200
+ function parseLoginTwitterModule(v) {
201
+ if (v === undefined || v === false || v === null)
202
+ return false;
203
+ if (v === true)
204
+ return null;
205
+ if (!isRecord(v))
206
+ return null;
207
+ return {
208
+ clientId: str(v.clientId),
209
+ secret: str(v.secret),
210
+ redirect: str(v.redirect),
211
+ dependencies: parseDependencies(v.dependencies),
212
+ };
213
+ }
214
+ function parseLoginSnapchatModule(v) {
215
+ if (v === undefined || v === false || v === null)
216
+ return false;
217
+ if (v === true)
218
+ return null;
219
+ if (!isRecord(v))
220
+ return null;
221
+ const secret = str(v.secret);
222
+ const base = {
223
+ clientId: str(v.clientId),
224
+ redirect: str(v.redirect),
225
+ dependencies: parseDependencies(v.dependencies),
226
+ };
227
+ if (secret)
228
+ base.secret = secret;
229
+ return base;
230
+ }
231
+ function parseLoginLineModule(v) {
232
+ if (v === undefined || v === false || v === null)
233
+ return false;
234
+ if (v === true)
235
+ return null;
236
+ if (!isRecord(v))
237
+ return null;
238
+ return {
239
+ clientId: str(v.clientId),
240
+ dependencies: parseDependencies(v.dependencies),
241
+ };
242
+ }
243
+ function parseLoginNaverModule(v) {
244
+ if (v === undefined || v === false || v === null)
245
+ return false;
246
+ if (v === true)
247
+ return null;
248
+ if (!isRecord(v))
249
+ return null;
250
+ return {
251
+ clientId: str(v.clientId),
252
+ secret: str(v.secret),
253
+ name: str(v.name),
254
+ dependencies: parseDependencies(v.dependencies),
255
+ };
256
+ }
257
+ function parseLoginKakaoModule(v) {
258
+ if (v === undefined || v === false || v === null)
259
+ return false;
260
+ if (v === true)
261
+ return null;
262
+ if (!isRecord(v))
263
+ return null;
264
+ return {
265
+ clientId: str(v.clientId),
266
+ scheme: str(v.scheme),
267
+ dependencies: parseDependencies(v.dependencies),
268
+ };
269
+ }
270
+ function parseLoginTiktokModule(v) {
271
+ if (v === undefined || v === false || v === null)
272
+ return false;
273
+ if (v === true)
274
+ return null;
275
+ if (!isRecord(v))
276
+ return null;
277
+ return {
278
+ clientId: str(v.clientId),
279
+ secret: str(v.secret),
280
+ redirect: str(v.redirect),
281
+ dependencies: parseDependencies(v.dependencies),
282
+ };
283
+ }
284
+ function parseAnalyticsFirebaseModule(v) {
285
+ if (v === undefined || v === false || v === null)
286
+ return false;
287
+ if (v === true)
288
+ return null;
289
+ if (!isRecord(v))
290
+ return null;
291
+ return {
292
+ firebase_file_url: str(v.firebase_file_url ?? v.googleServicesUrl ?? v.configUrl ?? v.clientId ?? v.url ?? v.downloadUrl),
293
+ firebase_file_name: optionalStr(v.firebase_file_name ?? v.fileName ?? v.name),
294
+ repositories: Array.isArray(v.repositories) ? v.repositories.map((x) => String(x)) : undefined,
295
+ classpath: str(v.classpath),
296
+ applyplugin: str(v.applyplugin ?? v.applyPlugin),
297
+ dependencies: parseDependencies(v.dependencies),
298
+ };
299
+ }
300
+ function parseAnalyticsAdjustModule(v) {
301
+ if (v === undefined || v === false || v === null)
302
+ return false;
303
+ if (v === true)
304
+ return null;
305
+ if (!isRecord(v))
306
+ return null;
307
+ return {
308
+ appId: str(v.appId ?? v.clientId),
309
+ dependencies: parseDependencies(v.dependencies),
310
+ };
311
+ }
312
+ function parseAnalyticsAppsflyerModule(v) {
313
+ if (v === undefined || v === false || v === null)
314
+ return false;
315
+ if (v === true)
316
+ return null;
317
+ if (!isRecord(v))
318
+ return null;
319
+ return {
320
+ devKey: str(v.devKey ?? v.secret ?? v.clientId),
321
+ enableDebugLog: "enableDebugLog" in v ? bool(v.enableDebugLog) : false,
322
+ repositories: Array.isArray(v.repositories) ? v.repositories.map((x) => String(x)) : undefined,
323
+ dependencies: parseDependencies(v.dependencies),
324
+ };
325
+ }
326
+ /** downloadSDKConfig:子键存在时 value 必须为 JSON 对象(含 `{}`)。 */
327
+ function isSdkModuleJsonObject(v) {
328
+ return typeof v === "object" && v !== null && !Array.isArray(v);
329
+ }
330
+ /**
331
+ * 从 JSON 提取 `sdkModules`:仅保留出现的子键;有键则 value 须为对象。
332
+ * @returns `null` 表示形状非法(例如 `"kakao": false` 或 `true`)。
333
+ */
334
+ export function normalizeSdkModulesFromUnknown(raw) {
335
+ const d = emptySdkModules();
336
+ if (!isRecord(raw))
337
+ return d;
338
+ if (isRecord(raw.login)) {
339
+ const L = raw.login;
340
+ if ("parameterConfig" in L || "parameter" in L)
341
+ return null;
342
+ if ("guest" in L) {
343
+ if (!isSdkModuleJsonObject(L.guest))
344
+ return null;
345
+ const x = parseSimpleModule(L.guest, DEFAULT_TOPSDK_PLUGIN_DEPENDENCIES.login.guest);
346
+ if (x === null || x === false)
347
+ return null;
348
+ d.login.guest = x;
349
+ }
350
+ if ("email" in L) {
351
+ if (!isSdkModuleJsonObject(L.email))
352
+ return null;
353
+ const x = parseSimpleModule(L.email, DEFAULT_TOPSDK_PLUGIN_DEPENDENCIES.login.email);
354
+ if (x === null || x === false)
355
+ return null;
356
+ d.login.email = x;
357
+ }
358
+ if ("facebook" in L) {
359
+ if (!isSdkModuleJsonObject(L.facebook))
360
+ return null;
361
+ const fb = parseLoginFacebookModule(L.facebook);
362
+ if (fb === null || fb === false)
363
+ return null;
364
+ d.login.facebook = fb;
365
+ }
366
+ if ("google" in L) {
367
+ if (!isSdkModuleJsonObject(L.google))
368
+ return null;
369
+ const g = parseLoginGoogleModule(L.google);
370
+ if (g === null || g === false)
371
+ return null;
372
+ d.login.google = g;
373
+ }
374
+ if ("twitter" in L) {
375
+ if (!isSdkModuleJsonObject(L.twitter))
376
+ return null;
377
+ const x = parseLoginTwitterModule(L.twitter);
378
+ if (x === null || x === false)
379
+ return null;
380
+ d.login.twitter = x;
381
+ }
382
+ if ("snapchat" in L) {
383
+ if (!isSdkModuleJsonObject(L.snapchat))
384
+ return null;
385
+ const x = parseLoginSnapchatModule(L.snapchat);
386
+ if (x === null || x === false)
387
+ return null;
388
+ d.login.snapchat = x;
389
+ }
390
+ if ("line" in L) {
391
+ if (!isSdkModuleJsonObject(L.line))
392
+ return null;
393
+ const x = parseLoginLineModule(L.line);
394
+ if (x === null || x === false)
395
+ return null;
396
+ d.login.line = x;
397
+ }
398
+ if ("naver" in L) {
399
+ if (!isSdkModuleJsonObject(L.naver))
400
+ return null;
401
+ const x = parseLoginNaverModule(L.naver);
402
+ if (x === null || x === false)
403
+ return null;
404
+ d.login.naver = x;
405
+ }
406
+ if ("kakao" in L) {
407
+ if (!isSdkModuleJsonObject(L.kakao))
408
+ return null;
409
+ const x = parseLoginKakaoModule(L.kakao);
410
+ if (x === null || x === false)
411
+ return null;
412
+ d.login.kakao = x;
413
+ }
414
+ if ("tiktok" in L) {
415
+ if (!isSdkModuleJsonObject(L.tiktok))
416
+ return null;
417
+ const x = parseLoginTiktokModule(L.tiktok);
418
+ if (x === null || x === false)
419
+ return null;
420
+ d.login.tiktok = x;
421
+ }
422
+ }
423
+ if (isRecord(raw.payment)) {
424
+ const P = raw.payment;
425
+ if ("googleIap" in P) {
426
+ if (!isSdkModuleJsonObject(P.googleIap))
427
+ return null;
428
+ const x = parseSimpleModule(P.googleIap, DEFAULT_TOPSDK_PLUGIN_DEPENDENCIES.payment.googleIap);
429
+ if (x === null || x === false)
430
+ return null;
431
+ d.payment.googleIap = x;
432
+ }
433
+ if ("onestoreIap" in P) {
434
+ if (!isSdkModuleJsonObject(P.onestoreIap))
435
+ return null;
436
+ const x = parseSimpleModule(P.onestoreIap, DEFAULT_TOPSDK_PLUGIN_DEPENDENCIES.payment.onestoreIap);
437
+ if (x === null || x === false)
438
+ return null;
439
+ d.payment.onestoreIap = x;
440
+ }
441
+ if ("huaweiIap" in P) {
442
+ if (!isSdkModuleJsonObject(P.huaweiIap))
443
+ return null;
444
+ const x = parseSimpleModule(P.huaweiIap, DEFAULT_TOPSDK_PLUGIN_DEPENDENCIES.payment.huaweiIap);
445
+ if (x === null || x === false)
446
+ return null;
447
+ d.payment.huaweiIap = x;
448
+ }
449
+ if ("xiaomiIap" in P) {
450
+ if (!isSdkModuleJsonObject(P.xiaomiIap))
451
+ return null;
452
+ const x = parseSimpleModule(P.xiaomiIap, DEFAULT_TOPSDK_PLUGIN_DEPENDENCIES.payment.xiaomiIap);
453
+ if (x === null || x === false)
454
+ return null;
455
+ d.payment.xiaomiIap = x;
456
+ }
457
+ }
458
+ if (isRecord(raw.analytics)) {
459
+ const A = raw.analytics;
460
+ if ("appsflyer" in A) {
461
+ if (!isSdkModuleJsonObject(A.appsflyer))
462
+ return null;
463
+ const af = parseAnalyticsAppsflyerModule(A.appsflyer);
464
+ if (af === null || af === false)
465
+ return null;
466
+ d.analytics.appsflyer = af;
467
+ }
468
+ if ("facebookdata" in A) {
469
+ if (!isSdkModuleJsonObject(A.facebookdata))
470
+ return null;
471
+ const x = parseSimpleModule(A.facebookdata, DEFAULT_TOPSDK_PLUGIN_DEPENDENCIES.analytics.facebookdata);
472
+ if (x === null || x === false)
473
+ return null;
474
+ d.analytics.facebookdata = x;
475
+ }
476
+ else if ("facebook" in A) {
477
+ if (!isSdkModuleJsonObject(A.facebook))
478
+ return null;
479
+ const x = parseSimpleModule(A.facebook, DEFAULT_TOPSDK_PLUGIN_DEPENDENCIES.analytics.facebookdata);
480
+ if (x === null || x === false)
481
+ return null;
482
+ d.analytics.facebookdata = x;
483
+ }
484
+ if ("firebase" in A) {
485
+ if (!isSdkModuleJsonObject(A.firebase))
486
+ return null;
487
+ const f = parseAnalyticsFirebaseModule(A.firebase);
488
+ if (f === null || f === false)
489
+ return null;
490
+ d.analytics.firebase = f;
491
+ }
492
+ if ("adjust" in A) {
493
+ if (!isSdkModuleJsonObject(A.adjust))
494
+ return null;
495
+ const adj = parseAnalyticsAdjustModule(A.adjust);
496
+ if (adj === null || adj === false)
497
+ return null;
498
+ d.analytics.adjust = adj;
499
+ }
500
+ }
501
+ return d;
502
+ }
503
+ /**
504
+ * Maps TOPSDK `getSDKConfig` JSON (`code` / `data` / `data.channelAuthConfig`) into MeetSdkRemoteConfig.
505
+ * Applies the same MESSENGER→FACEBOOK naming tweak as topsdk-tool-ios `ChannelConfigManager.getSdkConfig`.
506
+ */
507
+ export function mapTopSdkGetSdkConfigToMeetSdkRemoteConfig(body, ctx) {
508
+ const channel = ctx.channelType.trim().toUpperCase() || "UNKNOWN";
509
+ const base = (data) => ({
510
+ packageName: str(isRecord(data) ? data.packageName : undefined) || ctx.packageName || "",
511
+ channel,
512
+ topsdk: {
513
+ appId: str(data?.appId ?? ctx.appId),
514
+ appSecret: ctx.appSecret,
515
+ version: readTopSdkVersionFromData(data),
516
+ groupId: readGroupIdFromData(data),
517
+ repositories: readRepositoriesFromData(data),
518
+ },
519
+ sdkModules: emptySdkModules(),
520
+ });
521
+ if (!isRecord(body)) {
522
+ return base(null);
523
+ }
524
+ const code = body.code;
525
+ if (code !== 200 && code !== "200") {
526
+ throw new Error(`TOPSDK getSDKConfig returned code=${String(code)}`);
527
+ }
528
+ const data = isRecord(body.data) ? body.data : null;
529
+ if (!data) {
530
+ return base(null);
531
+ }
532
+ const out = base(data);
533
+ out.topsdk.appId = str(data.appId ?? ctx.appId);
534
+ out.topsdk.appSecret = ctx.appSecret;
535
+ const list = data.channelAuthConfig;
536
+ if (!Array.isArray(list)) {
537
+ return out;
538
+ }
539
+ for (const raw of list) {
540
+ if (!isRecord(raw))
541
+ continue;
542
+ const item = { ...raw };
543
+ let name = str(item.authType).toUpperCase();
544
+ if (name === "MESSENGER") {
545
+ name = "FACEBOOK";
546
+ item.openMessenger = "1";
547
+ }
548
+ if (name === "FACEBOOK") {
549
+ if (item.openMessenger === undefined || item.openMessenger === null) {
550
+ item.openMessenger = "0";
551
+ }
552
+ }
553
+ switch (name) {
554
+ case "FACEBOOK":
555
+ out.sdkModules.login.facebook = {
556
+ facebookAppId: str(item.clientId),
557
+ fbLoginProtocolScheme: str(item.scheme),
558
+ facebookClientToken: str(item.clientToken ?? item.facebookClientToken ?? item.secret),
559
+ };
560
+ break;
561
+ case "GOOGLE":
562
+ out.sdkModules.login.google = {
563
+ googleClientId: str(item.clientId),
564
+ };
565
+ break;
566
+ case "APPSFLYER":
567
+ out.sdkModules.analytics.appsflyer = {
568
+ enableDebugLog: bool(item.enableDebugLog ?? item.appsflyerEnableDebugLog),
569
+ devKey: str(item.devKey ?? item.secret ?? item.clientId),
570
+ };
571
+ break;
572
+ case "FIREBASE":
573
+ out.sdkModules.analytics.firebase = {
574
+ firebase_file_url: str(item.firebase_file_url ?? item.googleServicesUrl ?? item.configUrl ?? item.clientId ?? item.url),
575
+ };
576
+ break;
577
+ case "ADJUST":
578
+ out.sdkModules.analytics.adjust = {
579
+ appId: str(item.appId ?? item.clientId),
580
+ };
581
+ break;
582
+ case "GUEST":
583
+ out.sdkModules.login.guest = {};
584
+ break;
585
+ case "EMAIL":
586
+ out.sdkModules.login.email = {};
587
+ break;
588
+ case "TWITTER":
589
+ out.sdkModules.login.twitter = {
590
+ clientId: str(item.clientId),
591
+ secret: str(item.secret),
592
+ redirect: str(item.redirect),
593
+ };
594
+ break;
595
+ case "SNAPCHAT":
596
+ out.sdkModules.login.snapchat = {
597
+ clientId: str(item.clientId),
598
+ redirect: str(item.redirect),
599
+ ...(str(item.secret) ? { secret: str(item.secret) } : {}),
600
+ };
601
+ break;
602
+ case "LINE":
603
+ out.sdkModules.login.line = {
604
+ clientId: str(item.clientId),
605
+ };
606
+ break;
607
+ case "NAVER":
608
+ out.sdkModules.login.naver = {
609
+ clientId: str(item.clientId),
610
+ secret: str(item.secret),
611
+ name: str(item.name),
612
+ };
613
+ break;
614
+ case "KAKAO":
615
+ out.sdkModules.login.kakao = {
616
+ clientId: str(item.clientId),
617
+ scheme: str(item.scheme),
618
+ };
619
+ break;
620
+ case "TIKTOK":
621
+ out.sdkModules.login.tiktok = {
622
+ clientId: str(item.clientId),
623
+ secret: str(item.secret),
624
+ redirect: str(item.redirect),
625
+ };
626
+ break;
627
+ case "GOOGLEIAP":
628
+ case "GOOGLE_IAP":
629
+ out.sdkModules.payment.googleIap = {};
630
+ break;
631
+ case "ONESTOREIAP":
632
+ case "ONESTORE_IAP":
633
+ out.sdkModules.payment.onestoreIap = {};
634
+ break;
635
+ case "HUAWEIIAP":
636
+ case "HUAWEI_IAP":
637
+ out.sdkModules.payment.huaweiIap = {};
638
+ break;
639
+ case "XIAOMIIAP":
640
+ case "XIAOMI_IAP":
641
+ out.sdkModules.payment.xiaomiIap = {};
642
+ break;
643
+ default:
644
+ break;
645
+ }
646
+ }
647
+ return out;
648
+ }
649
+ export function getValueByPath(obj, dotPath) {
650
+ if (!isRecord(obj))
651
+ return undefined;
652
+ const keys = dotPath.split(".");
653
+ let current = obj;
654
+ for (const key of keys) {
655
+ if (!isRecord(current))
656
+ return undefined;
657
+ current = current[key];
658
+ }
659
+ return current;
660
+ }
661
+ function isMissingValue(value) {
662
+ if (value === undefined || value === null)
663
+ return true;
664
+ if (typeof value === "string" && value.trim() === "")
665
+ return true;
666
+ return false;
667
+ }
668
+ export function tryParseAsMeetSdkRemoteConfig(raw) {
669
+ if (!isRecord(raw))
670
+ return null;
671
+ if (typeof raw.packageName !== "string" || !isRecord(raw.topsdk))
672
+ return null;
673
+ const topsdk = raw.topsdk;
674
+ const channel = str(raw.channel) || str(topsdk.channel) || str(raw.channelType);
675
+ if (!channel || typeof topsdk.appId !== "string" || typeof topsdk.appSecret !== "string") {
676
+ return null;
677
+ }
678
+ if ("features" in raw || "featuresByCategory" in raw)
679
+ return null;
680
+ if ("facebook" in raw || "google" in raw || "appsflyer" in raw)
681
+ return null;
682
+ if ("parameterConfig" in raw)
683
+ return null;
684
+ if ("repositories" in raw)
685
+ return null;
686
+ if (!("sdkModules" in raw) || !isRecord(raw.sdkModules))
687
+ return null;
688
+ const sdkModules = normalizeSdkModulesFromUnknown(raw.sdkModules);
689
+ if (sdkModules === null)
690
+ return null;
691
+ const normalizedTopsdk = {
692
+ appId: topsdk.appId,
693
+ appSecret: topsdk.appSecret,
694
+ version: str(topsdk.version),
695
+ groupId: str(topsdk.groupId),
696
+ repositories: Array.isArray(topsdk.repositories) ? topsdk.repositories.map((x) => String(x)) : [],
697
+ };
698
+ const devicePlatform = str(raw.devicePlatform).toLowerCase();
699
+ return {
700
+ packageName: String(raw.packageName),
701
+ channel,
702
+ devicePlatform: devicePlatform || undefined,
703
+ topsdk: normalizedTopsdk,
704
+ sdkModules,
705
+ };
706
+ }
707
+ export function tryParseAsMeetSdkDefaultConfig(raw) {
708
+ if (!isRecord(raw))
709
+ return null;
710
+ const topsdkRaw = isRecord(raw.topsdk) ? raw.topsdk : {};
711
+ const sdkModules = normalizeSdkModulesFromUnknown(isRecord(raw.sdkModules) ? raw.sdkModules : {});
712
+ if (sdkModules === null)
713
+ return null;
714
+ return {
715
+ topsdk: {
716
+ version: str(topsdkRaw.version) || undefined,
717
+ groupId: str(topsdkRaw.groupId) || undefined,
718
+ repositories: Array.isArray(topsdkRaw.repositories) ? topsdkRaw.repositories.map((x) => String(x)) : [],
719
+ },
720
+ sdkModules,
721
+ };
722
+ }
723
+ function cloneConfig(value) {
724
+ if (value === undefined)
725
+ return value;
726
+ return JSON.parse(JSON.stringify(value, (_k, v) => (v === undefined ? null : v)));
727
+ }
728
+ function mergeSdkModuleValue(remoteValue, defaultValue) {
729
+ if (!isSdkModuleToggleOn(remoteValue))
730
+ return remoteValue;
731
+ if (!isRecord(defaultValue))
732
+ return remoteValue;
733
+ if (!isRecord(remoteValue))
734
+ return cloneConfig(defaultValue);
735
+ const merged = { ...cloneConfig(defaultValue), ...cloneConfig(remoteValue) };
736
+ for (const [key, value] of Object.entries(defaultValue)) {
737
+ if (value === undefined)
738
+ continue;
739
+ if (merged[key] === undefined || merged[key] === null || merged[key] === "") {
740
+ merged[key] = cloneConfig(value);
741
+ }
742
+ }
743
+ return merged;
744
+ }
745
+ function mergeSdkModuleScope(remoteScope, defaultScope) {
746
+ const out = { ...remoteScope };
747
+ for (const key of Object.keys(remoteScope)) {
748
+ out[key] = mergeSdkModuleValue(remoteScope[key], defaultScope[key]);
749
+ }
750
+ return out;
751
+ }
752
+ export function applyMeetSdkDefaultConfig(remote, defaults) {
753
+ const out = cloneConfig(remote);
754
+ out.topsdk = {
755
+ ...out.topsdk,
756
+ version: out.topsdk.version || defaults.topsdk.version || "",
757
+ groupId: out.topsdk.groupId || defaults.topsdk.groupId || "",
758
+ repositories: out.topsdk.repositories.length > 0 ? out.topsdk.repositories : defaults.topsdk.repositories,
759
+ };
760
+ out.sdkModules = {
761
+ login: mergeSdkModuleScope(out.sdkModules.login, defaults.sdkModules.login),
762
+ payment: mergeSdkModuleScope(out.sdkModules.payment, defaults.sdkModules.payment),
763
+ analytics: mergeSdkModuleScope(out.sdkModules.analytics, defaults.sdkModules.analytics),
764
+ };
765
+ return out;
766
+ }
767
+ function appendRepositories(out, repositories) {
768
+ if (!repositories)
769
+ return;
770
+ for (const repo of repositories) {
771
+ if (!out.includes(repo))
772
+ out.push(repo);
773
+ }
774
+ }
775
+ /** Repositories are declared by the owning module, then collected for Gradle. */
776
+ export function collectMeetSdkRemoteRepositories(data) {
777
+ const out = [];
778
+ const firebase = data.sdkModules.analytics.firebase;
779
+ if (typeof firebase === "object" && firebase !== null) {
780
+ appendRepositories(out, firebase.repositories);
781
+ }
782
+ const appsflyer = data.sdkModules.analytics.appsflyer;
783
+ if (typeof appsflyer === "object" && appsflyer !== null) {
784
+ appendRepositories(out, appsflyer.repositories);
785
+ }
786
+ appendRepositories(out, data.topsdk.repositories);
787
+ return out;
788
+ }
789
+ export function collectMeetSdkRemoteBuildscriptRepositories(data) {
790
+ const out = [];
791
+ const firebase = data.sdkModules.analytics.firebase;
792
+ if (typeof firebase === "object" && firebase !== null && firebase.classpath) {
793
+ appendRepositories(out, firebase.repositories);
794
+ }
795
+ return out;
796
+ }
797
+ export function collectMeetSdkRemoteBuildscriptClasspaths(data) {
798
+ const out = [];
799
+ const firebase = data.sdkModules.analytics.firebase;
800
+ if (typeof firebase === "object" && firebase !== null && firebase.classpath && !out.includes(firebase.classpath)) {
801
+ out.push(firebase.classpath);
802
+ }
803
+ return out;
804
+ }
805
+ export function collectMeetSdkRemoteApplyPlugins(data) {
806
+ const out = [];
807
+ const firebase = data.sdkModules.analytics.firebase;
808
+ if (typeof firebase === "object" && firebase !== null && firebase.applyplugin && !out.includes(firebase.applyplugin)) {
809
+ out.push(firebase.applyplugin);
810
+ }
811
+ return out;
812
+ }
813
+ /**
814
+ * Validates populated sections (same spirit as sdk-integration-agent `validateRequiredConfig`):
815
+ * 仅当子模块为参数对象时校验其字段;缺失键或 `false` 表示关闭。
816
+ */
817
+ /** CLI overrides applied after `downloadSDKConfig` (appId/channelType only; secret & packageName come from server JSON). */
818
+ export function applyFetchConfigCliOverrides(config, overrides) {
819
+ const out = cloneConfig(config);
820
+ if (overrides.appId?.trim()) {
821
+ out.topsdk.appId = overrides.appId.trim();
822
+ }
823
+ if (overrides.channelType?.trim()) {
824
+ out.channel = overrides.channelType.trim().toUpperCase();
825
+ }
826
+ return out;
827
+ }
828
+ export function validateMeetSdkRemoteConfig(data) {
829
+ const missing = [];
830
+ const need = (path) => {
831
+ if (isMissingValue(getValueByPath(data, path)))
832
+ missing.push(path);
833
+ };
834
+ need("packageName");
835
+ need("channel");
836
+ need("topsdk.appId");
837
+ need("topsdk.appSecret");
838
+ const login = data.sdkModules.login;
839
+ const payment = data.sdkModules.payment;
840
+ const analytics = data.sdkModules.analytics;
841
+ if (hasSdkModuleKey(login, "facebook")) {
842
+ need("sdkModules.login.facebook.facebookAppId");
843
+ need("sdkModules.login.facebook.fbLoginProtocolScheme");
844
+ need("sdkModules.login.facebook.facebookClientToken");
845
+ }
846
+ if (hasSdkModuleKey(login, "google")) {
847
+ need("sdkModules.login.google.googleClientId");
848
+ }
849
+ if (hasSdkModuleKey(analytics, "appsflyer")) {
850
+ const af = data.sdkModules.analytics.appsflyer;
851
+ if (typeof af === "object" && af !== null) {
852
+ need("sdkModules.analytics.appsflyer.devKey");
853
+ if (af.enableDebugLog === undefined || af.enableDebugLog === null) {
854
+ missing.push("sdkModules.analytics.appsflyer.enableDebugLog");
855
+ }
856
+ }
857
+ }
858
+ if (hasSdkModuleKey(login, "twitter")) {
859
+ need("sdkModules.login.twitter.clientId");
860
+ need("sdkModules.login.twitter.secret");
861
+ need("sdkModules.login.twitter.redirect");
862
+ }
863
+ if (hasSdkModuleKey(login, "snapchat")) {
864
+ need("sdkModules.login.snapchat.clientId");
865
+ need("sdkModules.login.snapchat.redirect");
866
+ }
867
+ if (hasSdkModuleKey(login, "line")) {
868
+ need("sdkModules.login.line.clientId");
869
+ }
870
+ if (hasSdkModuleKey(login, "naver")) {
871
+ need("sdkModules.login.naver.clientId");
872
+ need("sdkModules.login.naver.secret");
873
+ need("sdkModules.login.naver.name");
874
+ }
875
+ if (hasSdkModuleKey(login, "kakao")) {
876
+ need("sdkModules.login.kakao.clientId");
877
+ need("sdkModules.login.kakao.scheme");
878
+ }
879
+ if (hasSdkModuleKey(login, "tiktok")) {
880
+ need("sdkModules.login.tiktok.clientId");
881
+ need("sdkModules.login.tiktok.secret");
882
+ need("sdkModules.login.tiktok.redirect");
883
+ }
884
+ if (hasSdkModuleKey(analytics, "firebase")) {
885
+ need("sdkModules.analytics.firebase.firebase_file_url");
886
+ }
887
+ if (hasSdkModuleKey(analytics, "adjust")) {
888
+ need("sdkModules.analytics.adjust.appId");
889
+ }
890
+ return { ok: missing.length === 0, missing };
891
+ }
892
+ //# sourceMappingURL=meetSdkRemoteConfig.js.map