@leonxin/meetgames 0.1.8 → 0.1.12

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 (228) hide show
  1. package/.agents/skills/meet-sdk-regression/SKILL.md +93 -0
  2. package/.cursor/mcp.example.json +16 -0
  3. package/.cursor/mcp.json +11 -0
  4. package/.cursor/skills/meetgames-mcp/SKILL.md +48 -0
  5. package/.vite/vitest/results.json +1 -0
  6. package/README.md +36 -13
  7. package/{meetsdk-android.json → config/meetsdk-android.json} +2 -1
  8. package/config/meetsdk-ios.json +15 -0
  9. package/dist/android/adapter.d.ts.map +1 -1
  10. package/dist/android/adapter.js +2 -2
  11. package/dist/android/adapter.js.map +1 -1
  12. package/dist/android/detect.d.ts +2 -2
  13. package/dist/android/detect.d.ts.map +1 -1
  14. package/dist/android/detect.js +36 -8
  15. package/dist/android/detect.js.map +1 -1
  16. package/dist/cache.d.ts +44 -0
  17. package/dist/cache.d.ts.map +1 -0
  18. package/dist/cache.js +101 -0
  19. package/dist/cache.js.map +1 -0
  20. package/dist/cli.d.ts.map +1 -1
  21. package/dist/cli.js +181 -49
  22. package/dist/cli.js.map +1 -1
  23. package/dist/config/meetSdkDefaultConfig.d.ts +19 -2
  24. package/dist/config/meetSdkDefaultConfig.d.ts.map +1 -1
  25. package/dist/config/meetSdkDefaultConfig.js +69 -6
  26. package/dist/config/meetSdkDefaultConfig.js.map +1 -1
  27. package/dist/config/meetSdkIosConfig.d.ts +21 -0
  28. package/dist/config/meetSdkIosConfig.d.ts.map +1 -0
  29. package/dist/config/meetSdkIosConfig.js +68 -0
  30. package/dist/config/meetSdkIosConfig.js.map +1 -0
  31. package/dist/config/meetSdkRemoteConfig.d.ts +19 -1
  32. package/dist/config/meetSdkRemoteConfig.d.ts.map +1 -1
  33. package/dist/config/meetSdkRemoteConfig.js +64 -25
  34. package/dist/config/meetSdkRemoteConfig.js.map +1 -1
  35. package/dist/contracts/types.d.ts +27 -6
  36. package/dist/contracts/types.d.ts.map +1 -1
  37. package/dist/core/doctor.d.ts +17 -0
  38. package/dist/core/doctor.d.ts.map +1 -0
  39. package/dist/core/doctor.js +444 -0
  40. package/dist/core/doctor.js.map +1 -0
  41. package/dist/core/pipeline.d.ts.map +1 -1
  42. package/dist/core/pipeline.js +0 -15
  43. package/dist/core/pipeline.js.map +1 -1
  44. package/dist/core/platform.d.ts +12 -0
  45. package/dist/core/platform.d.ts.map +1 -0
  46. package/dist/core/platform.js +40 -0
  47. package/dist/core/platform.js.map +1 -0
  48. package/dist/core/previewPatches.d.ts +1 -1
  49. package/dist/core/previewPatches.js +2 -2
  50. package/dist/core/previewPatches.js.map +1 -1
  51. package/dist/core/reporter.js +1 -1
  52. package/dist/core/reporter.js.map +1 -1
  53. package/dist/core/workspace.d.ts +2 -2
  54. package/dist/core/workspace.d.ts.map +1 -1
  55. package/dist/core/workspace.js +6 -5
  56. package/dist/core/workspace.js.map +1 -1
  57. package/dist/index.d.ts +4 -1
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +4 -1
  60. package/dist/index.js.map +1 -1
  61. package/dist/ios/channelConfig.d.ts +1 -0
  62. package/dist/ios/channelConfig.d.ts.map +1 -1
  63. package/dist/ios/channelConfig.js +82 -0
  64. package/dist/ios/channelConfig.js.map +1 -1
  65. package/dist/ios/codeUtils.d.ts +1 -0
  66. package/dist/ios/codeUtils.d.ts.map +1 -1
  67. package/dist/ios/codeUtils.js +11 -2
  68. package/dist/ios/codeUtils.js.map +1 -1
  69. package/dist/ios/detect.d.ts +2 -2
  70. package/dist/ios/detect.d.ts.map +1 -1
  71. package/dist/ios/detect.js +49 -10
  72. package/dist/ios/detect.js.map +1 -1
  73. package/dist/ios/entitlements.d.ts +4 -0
  74. package/dist/ios/entitlements.d.ts.map +1 -0
  75. package/dist/ios/entitlements.js +53 -0
  76. package/dist/ios/entitlements.js.map +1 -0
  77. package/dist/ios/fileManager.d.ts.map +1 -1
  78. package/dist/ios/fileManager.js +3 -2
  79. package/dist/ios/fileManager.js.map +1 -1
  80. package/dist/ios/infoPlist.d.ts +1 -1
  81. package/dist/ios/infoPlist.d.ts.map +1 -1
  82. package/dist/ios/infoPlist.js.map +1 -1
  83. package/dist/ios/integrate.d.ts.map +1 -1
  84. package/dist/ios/integrate.js +214 -39
  85. package/dist/ios/integrate.js.map +1 -1
  86. package/dist/ios/pbxprojEditor.d.ts +2 -0
  87. package/dist/ios/pbxprojEditor.d.ts.map +1 -1
  88. package/dist/ios/pbxprojEditor.js +250 -6
  89. package/dist/ios/pbxprojEditor.js.map +1 -1
  90. package/dist/ios/pluginConfig.d.ts +1 -0
  91. package/dist/ios/pluginConfig.d.ts.map +1 -1
  92. package/dist/ios/pluginConfig.js +36 -4
  93. package/dist/ios/pluginConfig.js.map +1 -1
  94. package/dist/ios/sdkBundle.d.ts +1 -6
  95. package/dist/ios/sdkBundle.d.ts.map +1 -1
  96. package/dist/ios/sdkBundle.js +47 -17
  97. package/dist/ios/sdkBundle.js.map +1 -1
  98. package/dist/ios/template.d.ts +1 -0
  99. package/dist/ios/template.d.ts.map +1 -1
  100. package/dist/ios/template.js +14 -1
  101. package/dist/ios/template.js.map +1 -1
  102. package/dist/ios/types.d.ts +2 -2
  103. package/dist/ios/types.d.ts.map +1 -1
  104. package/dist/mcp/server.d.ts.map +1 -1
  105. package/dist/mcp/server.js +22 -15
  106. package/dist/mcp/server.js.map +1 -1
  107. package/dist/mcp/service.d.ts +11 -6
  108. package/dist/mcp/service.d.ts.map +1 -1
  109. package/dist/mcp/service.js +61 -18
  110. package/dist/mcp/service.js.map +1 -1
  111. package/dist/ops/handlers.d.ts.map +1 -1
  112. package/dist/ops/handlers.js +34 -23
  113. package/dist/ops/handlers.js.map +1 -1
  114. package/dist/remote/sdkHomeDownload.d.ts +65 -0
  115. package/dist/remote/sdkHomeDownload.d.ts.map +1 -0
  116. package/dist/remote/sdkHomeDownload.js +229 -0
  117. package/dist/remote/sdkHomeDownload.js.map +1 -0
  118. package/dist/remote/topsdkDownloadSdkConfig.d.ts.map +1 -1
  119. package/dist/remote/topsdkDownloadSdkConfig.js +11 -1
  120. package/dist/remote/topsdkDownloadSdkConfig.js.map +1 -1
  121. package/dist/shared/errors.d.ts +7 -0
  122. package/dist/shared/errors.d.ts.map +1 -0
  123. package/dist/shared/errors.js +16 -0
  124. package/dist/shared/errors.js.map +1 -0
  125. package/docs/API.md +246 -32
  126. package/docs/CLI.md +291 -0
  127. package/docs/INTEGRATION.md +116 -0
  128. package/docs/MCP.md +86 -0
  129. package/docs/README.md +18 -10
  130. package/docs/{api → archive/api}/downloadSDKConfig.md +9 -7
  131. package/docs/{api → archive/api}/getChannelConfig-meetgames.md +2 -2
  132. package/docs/archive/ios-migration.md +2139 -0
  133. package/docs/{ → archive/product/}/346/212/200/346/234/257/346/226/271/346/241/210/350/260/203/347/240/224.md +7 -7
  134. package/docs/{ → archive/product/}/351/234/200/346/261/202/346/226/207/346/241/243.md +16 -15
  135. package/package.json +7 -36
  136. package/recipes/android-default.yaml +0 -5
  137. package/recipes/integrate-default.yaml +0 -5
  138. package/src/android/adapter.ts +9 -0
  139. package/src/android/assembleIntegrationJson.ts +33 -0
  140. package/src/android/detect.ts +132 -0
  141. package/src/android/downloadGoogleServicesJson.ts +56 -0
  142. package/src/android/gradle.ts +116 -0
  143. package/src/android/manifest.ts +50 -0
  144. package/src/android/meetSdkRemoteGradle.ts +837 -0
  145. package/src/cache.ts +164 -0
  146. package/src/cli.ts +496 -0
  147. package/src/config/fetchConfigWrite.ts +30 -0
  148. package/src/config/loadAndroidIntegration.ts +41 -0
  149. package/src/config/loadManifest.ts +40 -0
  150. package/src/config/meetSdkDefaultConfig.ts +100 -0
  151. package/src/config/meetSdkIosConfig.ts +89 -0
  152. package/src/config/meetSdkRemoteConfig.ts +1215 -0
  153. package/src/config/topsdkFeatureModules.ts +92 -0
  154. package/src/contracts/types.ts +129 -0
  155. package/src/core/doctor.ts +485 -0
  156. package/src/core/patch.ts +64 -0
  157. package/src/core/pipeline.ts +107 -0
  158. package/src/core/platform.ts +47 -0
  159. package/src/core/previewPatches.ts +23 -0
  160. package/src/core/reporter.ts +24 -0
  161. package/src/core/workspace.ts +31 -0
  162. package/src/entry.ts +7 -0
  163. package/src/index.ts +140 -0
  164. package/src/ios/channelConfig.ts +128 -0
  165. package/src/ios/codeUtils.ts +160 -0
  166. package/src/ios/detect.ts +105 -0
  167. package/src/ios/entitlements.ts +61 -0
  168. package/src/ios/fileManager.ts +48 -0
  169. package/src/ios/infoPlist.ts +55 -0
  170. package/src/ios/integrate.ts +517 -0
  171. package/src/ios/pbxprojEditor.ts +450 -0
  172. package/src/ios/pluginConfig.ts +97 -0
  173. package/src/ios/reserved.ts +8 -0
  174. package/src/ios/sdkBundle.ts +59 -0
  175. package/src/ios/template.ts +36 -0
  176. package/src/ios/types.ts +65 -0
  177. package/src/mcp/server.ts +176 -0
  178. package/src/mcp/service.ts +253 -0
  179. package/src/mcp-entry.ts +7 -0
  180. package/src/ops/fileStore.ts +56 -0
  181. package/src/ops/handlers.ts +308 -0
  182. package/src/remote/fetchJson.ts +22 -0
  183. package/src/remote/sdkHomeDownload.ts +295 -0
  184. package/src/remote/topsdkDownloadSdkConfig.ts +93 -0
  185. package/src/remote/topsdkGetSdkConfig.ts +122 -0
  186. package/src/remote/topsdkSign.ts +10 -0
  187. package/src/shared/errors.ts +16 -0
  188. package/tests/assemble.test.ts +12 -0
  189. package/tests/doctor.test.ts +91 -0
  190. package/tests/downloadGoogleServicesJson.test.ts +47 -0
  191. package/tests/fetch-remote.test.ts +23 -0
  192. package/tests/fetchConfigOverrides.test.ts +28 -0
  193. package/tests/fetchConfigWrite.test.ts +54 -0
  194. package/tests/fixtures-hosts.test.ts +78 -0
  195. package/tests/gradle.test.ts +33 -0
  196. package/tests/integration-json.test.ts +29 -0
  197. package/tests/ios.codeUtils.test.ts +23 -0
  198. package/tests/ios.sdkBundle.test.ts +21 -0
  199. package/tests/loadManifest.test.ts +15 -0
  200. package/tests/manifest-xml.test.ts +30 -0
  201. package/tests/mcp.e2e.ts +214 -0
  202. package/tests/mcp.service.test.ts +53 -0
  203. package/tests/meetSdkRemoteConfig.test.ts +481 -0
  204. package/tests/meetSdkRemoteGradle.test.ts +414 -0
  205. package/tests/pipeline.android.test.ts +95 -0
  206. package/tests/pipeline.integration-json.test.ts +58 -0
  207. package/tests/pipeline.ios.test.ts +392 -0
  208. package/tests/pipeline.preview.patch.test.ts +85 -0
  209. package/tests/platformSelection.test.ts +77 -0
  210. package/tests/sdkHomeDownload.test.ts +124 -0
  211. package/tests/sdkVersionConfig.test.ts +131 -0
  212. package/tests/topsdk.test.ts +53 -0
  213. package/tests/topsdkDownloadSdkConfig.test.ts +81 -0
  214. package/tests/topsdkFeatureModules.test.ts +116 -0
  215. package/tsconfig.json +19 -0
  216. package/vitest.config.ts +9 -0
  217. package/vitest.mcp.config.ts +11 -0
  218. package/bundled/android/sample.txt +0 -1
  219. package/docs/ANDROID.md +0 -133
  220. package/docs/CURSOR-MCP-SETUP.md +0 -72
  221. package/docs/MCP-SKILL.md +0 -63
  222. package/fixtures/api-samples/getChannelConfig-meetgames.sample.json +0 -123
  223. package/fixtures/meetsdk-remote-config.download-shape.json +0 -20
  224. package/fixtures/meetsdk-remote-config.mock.json +0 -69
  225. package/fixtures/recipes/android-default.fixture.yaml +0 -15
  226. package/fixtures/recipes/android-integration.fixture.json +0 -29
  227. package/fixtures/topsdk-config-reference.json +0 -39
  228. /package/docs/{api → archive/api}/getSDKConfig.md +0 -0
package/docs/CLI.md ADDED
@@ -0,0 +1,291 @@
1
+ # meetgames CLI 参数说明
2
+
3
+ 本文档说明 `meetgames` CLI 的子命令、参数和环境变量。实现以 `src/cli.ts` 为准。
4
+
5
+ ## 子命令
6
+
7
+ | 子命令 | 作用 | 是否写文件 |
8
+ |---|---|---|
9
+ | `fetch-config` | 请求 `downloadSDKConfig`,将响应原文写入 `~/.cache/meet-sdk-tool` | 是 |
10
+ | `download-ios-sdk` | 请求 sdk-home 版本和下载接口,下载 iOS SDK zip 并解压到 `~/.cache/meet-sdk-tool/sdk/ios` | 是 |
11
+ | `integrate` | 读取本地配置并接入 Android 或 iOS SDK;Android 会请求 sdk-home 最新版本并更新 `config/meetsdk-android.json` | 默认写;`--dry-run` 时不写宿主工程文件 |
12
+ | `setup` | 先执行 `fetch-config`;iOS 工程会再执行 `download-ios-sdk`;最后执行 `integrate`;Android 集成阶段会请求 sdk-home 最新版本并更新 `config/meetsdk-android.json` | 是;集成阶段受 `--dry-run` 影响 |
13
+ | `doctor` | 先执行 `fetch-config`,再检查当前工程 SDK 接入是否正确;Android 检查阶段会请求 sdk-home 最新版本并更新 `config/meetsdk-android.json` | 是,会刷新缓存中的 `meetsdk-remote-config.json` |
14
+
15
+ `doctor`、`setup`、`integrate` 都要求传入 `--project-root`。工具会根据该路径自动识别 Android 或 iOS,并且只执行对应平台逻辑。
16
+ Android `integrate` / `setup` / `doctor` 会调用 sdk-home `version` 接口读取最新 Android SDK 版本,写入 `config/meetsdk-android.json`,并写入或校验 Gradle 中的 `topsdk_version`。
17
+ `download-ios-sdk` 面向本机缓存的 iOS SDK 资源,不需要传 `--project-root`。
18
+
19
+ ## 通用示例
20
+
21
+ ```bash
22
+ node dist/entry.js setup \
23
+ --app-id <APP_ID> \
24
+ --app-secret '<APP_SECRET>' \
25
+ --channel-type GOOGLE \
26
+ --project-root /path/to/project \
27
+ --env test \
28
+ --verbose
29
+ ```
30
+
31
+ iOS 多 App target 工程建议显式指定 target:
32
+
33
+ ```bash
34
+ node dist/entry.js setup \
35
+ --app-id <APP_ID> \
36
+ --app-secret '<APP_SECRET>' \
37
+ --channel-type APPLE \
38
+ --project-root /path/to/ios-project \
39
+ --app-target GameRelease \
40
+ --env test \
41
+ --verbose
42
+ ```
43
+
44
+ Android 多 application module 工程建议显式指定 app module:
45
+
46
+ ```bash
47
+ node dist/entry.js setup \
48
+ --app-id <APP_ID> \
49
+ --app-secret '<APP_SECRET>' \
50
+ --channel-type GOOGLE \
51
+ --project-root /path/to/android-project \
52
+ --app-target :app \
53
+ --env test \
54
+ --verbose
55
+ ```
56
+
57
+ ```bash
58
+ node dist/entry.js doctor \
59
+ --app-id <APP_ID> \
60
+ --app-secret '<APP_SECRET>' \
61
+ --channel-type GOOGLE \
62
+ --project-root /path/to/project \
63
+ --env test \
64
+ --verbose
65
+ ```
66
+
67
+ 刷新工具内置 iOS SDK:
68
+
69
+ ```bash
70
+ node dist/entry.js download-ios-sdk --verbose
71
+ ```
72
+
73
+ 指定版本或插件组合:
74
+
75
+ ```bash
76
+ node dist/entry.js download-ios-sdk \
77
+ --version 1.6.0.5 \
78
+ --plugins guest,facebook,google,apple,apple_pay,dataAppsFlyer \
79
+ --package-type native \
80
+ --verbose
81
+ ```
82
+
83
+ ## 参数
84
+
85
+ | 参数 | `fetch-config` | `integrate` | `setup` | `doctor` | 说明 |
86
+ |---|---:|---:|---:|---:|---|
87
+ | `--project-root <path>` | 可选 | 必填 | 必填 | 必填 | 宿主工程目录;iOS 可传工程目录或 `.xcodeproj` 目录 |
88
+ | `--app-target <target>` | 否 | 可选 | 可选 | 可选 | 统一指定要接入/检查的 App 目标;Android 传 application module(如 `:app` / `app`),iOS 传 App target 名 |
89
+ | `--app-id <id>` | 必填* | 可选 | 必填* | 必填* | 应用 ID;也可用 `TOPSDK_APP_ID`;`integrate` 中用于选择缓存配置 |
90
+ | `--app-secret <secret>` | 必填* | 否 | 必填* | 必填* | 用于计算接口签名;也可用 `TOPSDK_APP_SECRET` |
91
+ | `--channel-type <type>` | 必填* | 可选 | 必填* | 必填* | 渠道类型,如 `GOOGLE` / `APPLE`;也可用 `TOPSDK_CHANNEL_TYPE`;`integrate` 中用于选择缓存配置 |
92
+ | `--env prod|pre|test` | 是 | 可选 | 是 | 是 | 默认 `prod` |
93
+ | `--dry-run` | 忽略 | 是 | 是 | 否 | 只预览集成改动,不写工程文件;`setup` 的 fetch 步骤仍会写配置 |
94
+ | `--patch-file <path>` | 忽略 | 是 | 是 | 否 | 输出 dry-run patch |
95
+ | `--report-file <path>` | 忽略 | 是 | 是 | 否 | 输出 JSON report |
96
+ | `--sdk-api-base-url <url>` | 否 | Android 可选 | Android 可选 | Android 可选 | 覆盖 sdk-home API 根地址;用于 Android 最新版本查询,也用于 `download-ios-sdk` |
97
+ | `--verbose` | 是 | 是 | 是 | 是 | 输出详细日志 |
98
+
99
+ `*` 表示如果本地已有可解析配置或环境变量提供对应值,可以不在命令行显式传入。`appSecret` 不会从本地 `meetsdk-remote-config.json` 读取。
100
+
101
+ ### download-ios-sdk 专用参数
102
+
103
+ | 参数 | 说明 |
104
+ |---|---|
105
+ | `--version <version>` | 指定下载的 iOS SDK 版本;不传时先调用 sdk-home `version` 接口读取最新 iOS 版本 |
106
+ | `--plugins <csv>` | 逗号分隔插件列表;默认 `guest,facebook,google,apple,apple_pay,dataAppsFlyer`,与下载页 iOS 默认选择一致 |
107
+ | `--package-type native|unity|cocos` | 包类型 / 引擎;默认 `native` |
108
+
109
+ 该命令会把 zip 保存为:
110
+
111
+ ```text
112
+ ~/.cache/meet-sdk-tool/sdk/ios/<package-type>/<version>/<plugins-hash>/topSDK-ios--V{version}.zip
113
+ ```
114
+
115
+ 并把压缩包内容解压到:
116
+
117
+ ```text
118
+ ~/.cache/meet-sdk-tool/sdk/ios/<package-type>/<version>/<plugins-hash>/extracted
119
+ ```
120
+
121
+ ## 环境变量
122
+
123
+ | 环境变量 | 作用 |
124
+ |---|---|
125
+ | `TOPSDK_API_BASE_URL` | 覆盖 API 根地址,例如 `http://127.0.0.1:8081/` |
126
+ | `TOPSDK_APP_ID` | `fetch-config` / `setup` / `doctor` 默认 appId |
127
+ | `TOPSDK_APP_SECRET` | 默认 appSecret |
128
+ | `TOPSDK_CHANNEL_TYPE` | 默认 channelType |
129
+ | `MEETGAMES_SDK_HOME_API_BASE_URL` | sdk-home API 根地址;用于 Android 最新版本查询和 `download-ios-sdk` |
130
+
131
+ ## 环境地址
132
+
133
+ | `--env` | 默认 Base URL |
134
+ |---|---|
135
+ | `prod` | `https://api-sdk-gameplus.meetsocial.com/` |
136
+ | `pre` | `https://pre-api-sdk-gameplus.meetsocial.com/` |
137
+ | `test` | `https://test-api-sdk-gameplus.meetsocial.com/` |
138
+
139
+ `TOPSDK_API_BASE_URL` 优先级最高。
140
+
141
+ ## 子命令说明
142
+
143
+ ### fetch-config
144
+
145
+ ```bash
146
+ node dist/entry.js fetch-config \
147
+ --app-id <APP_ID> \
148
+ --app-secret '<APP_SECRET>' \
149
+ --channel-type GOOGLE \
150
+ --project-root /path/to/project \
151
+ --env test
152
+ ```
153
+
154
+ 调用:
155
+
156
+ ```text
157
+ GET {baseUrl}/console/openSDK/downloadSDKConfig
158
+ ```
159
+
160
+ 并将响应 bytes 原样写入缓存:
161
+
162
+ ```text
163
+ ~/.cache/meet-sdk-tool/configs/<env>/<appId>/<channelType>/meetsdk-remote-config.json
164
+ ```
165
+
166
+ ### integrate
167
+
168
+ ```bash
169
+ node dist/entry.js integrate \
170
+ --project-root /path/to/project \
171
+ --dry-run \
172
+ --verbose
173
+ ```
174
+
175
+ 读取缓存中的 `meetsdk-remote-config.json` 和内置 recipe:
176
+
177
+ ```text
178
+ recipes/integrate-default.yaml
179
+ ```
180
+
181
+ 根据 `--project-root` 识别平台,只执行 Android 或 iOS 的接入步骤。
182
+
183
+ Android 接入会先调用:
184
+
185
+ ```text
186
+ GET https://business-api.meetgames.com/sdk/home/version
187
+ ```
188
+
189
+ 用途:读取 `data.result.android.ver` / `date`,写入 `config/meetsdk-android.json` 的 `topsdk.version` / `topsdk.date`,并作为 Gradle 中的 `topsdk_version`。`config/meetsdk-android.json` 同时保留 Maven 仓库、依赖坐标、Firebase Gradle plugin 等固定配置。
190
+
191
+ 当 Android 工程中存在多个 application module 时,如果未传 `--app-target`,命令会报出候选 module 列表;传入后会把 Gradle、Manifest、`google-services.json` 等写到选中的 module 下。
192
+
193
+ 传入 `--app-target` 时会校验目标是否存在:Android 校验目标 application module,iOS 校验目标 App target。
194
+
195
+ ### download-ios-sdk
196
+
197
+ ```bash
198
+ node dist/entry.js download-ios-sdk --verbose
199
+ ```
200
+
201
+ 执行顺序:
202
+
203
+ 1. 调用 sdk-home 版本接口:
204
+
205
+ ```text
206
+ GET https://business-api.meetgames.com/sdk/home/version
207
+ ```
208
+
209
+ 用途:读取下载中心当前 iOS 最新版本,即 `data.result.ios.ver` / `date`。
210
+
211
+ 2. 调用 sdk-home 下载接口:
212
+
213
+ ```text
214
+ GET https://business-api.meetgames.com/sdk/home/sdk-download/getDownLoadUrl
215
+ ```
216
+
217
+ 默认 query:
218
+
219
+ ```text
220
+ version=<version接口返回的iOS版本>
221
+ platform=ios
222
+ plugins=guest,facebook,google,apple,apple_pay,dataAppsFlyer
223
+ packageType=native
224
+ ```
225
+
226
+ 用途:获取短期有效的 SDK zip 下载 URL。
227
+
228
+ 3. 下载 zip 并解压到缓存目录:
229
+
230
+ ```text
231
+ ~/.cache/meet-sdk-tool/sdk/ios/<package-type>/<version>/<plugins-hash>/extracted
232
+ ```
233
+
234
+ 后续 `integrate` / `doctor` 的 iOS 流程会从缓存目录读取 `sdk/` 和 `plugins/`。
235
+
236
+ 下载和解压成功后,命令会更新:
237
+
238
+ ```text
239
+ config/meetsdk-ios.json
240
+ ```
241
+
242
+ 用途:记录当前缓存 iOS SDK 对应的版本、发布日期、包类型和插件组合。
243
+
244
+ ### setup
245
+
246
+ ```bash
247
+ node dist/entry.js setup \
248
+ --app-id <APP_ID> \
249
+ --app-secret '<APP_SECRET>' \
250
+ --channel-type APPLE \
251
+ --project-root /path/to/ios-project \
252
+ --env test \
253
+ --verbose
254
+ ```
255
+
256
+ 执行顺序:
257
+
258
+ 1. `fetch-config`
259
+ 2. `integrate`
260
+
261
+ ### doctor
262
+
263
+ ```bash
264
+ node dist/entry.js doctor \
265
+ --app-id <APP_ID> \
266
+ --app-secret '<APP_SECRET>' \
267
+ --channel-type APPLE \
268
+ --project-root /path/to/ios-project \
269
+ --env test \
270
+ --verbose
271
+ ```
272
+
273
+ 执行顺序:
274
+
275
+ 1. `fetch-config`
276
+ 2. 自动识别 Android / iOS
277
+ 3. 执行对应平台详细校验
278
+
279
+ Android doctor 会检查仓库、依赖、`resValue`、`google-services.json` 等。
280
+ iOS doctor 会检查 SDK 文件、Xcode 引用、`GoogleService-Info.plist`、`Info.plist` 参数、插件参数、URL Scheme 是否写入、Delegate 注入等。
281
+
282
+ ## 退出码
283
+
284
+ | 退出码 | 含义 |
285
+ |---:|---|
286
+ | `0` | 成功 |
287
+ | `2` | 参数错误 |
288
+ | `3` | 工程识别或工程结构错误 |
289
+ | `4` | 配置或 doctor 校验失败 |
290
+ | `5` | 集成 pipeline 失败 |
291
+ | `6` | 网络请求失败 |
@@ -0,0 +1,116 @@
1
+ # SDK 接入说明
2
+
3
+ 本文档说明 `meet-sdk-tool` 当前支持的 Android / iOS 原生工程接入流程。历史迁移资料已归档到 [`archive/`](./archive/)。
4
+
5
+ ## 支持范围
6
+
7
+ | 平台 | 支持情况 | 说明 |
8
+ |---|---|---|
9
+ | Android 原生工程 | 支持 | Groovy `build.gradle` / `settings.gradle`;不支持 Kotlin DSL `.kts` 自动改写 |
10
+ | iOS 原生工程 | 支持 | `.xcodeproj`;支持传工程目录或 `.xcodeproj` 目录作为 `--project-root` |
11
+ | Unity / Cocos / LayaNative / Unreal | 不支持 | 当前工具只面向原生 Android / iOS 工程 |
12
+
13
+ ## 配置文件
14
+
15
+ 工具使用两类配置和一个版本接口:
16
+
17
+ | 来源 | 类型 | 作用 |
18
+ |---|---|---|
19
+ | `~/.cache/meet-sdk-tool/configs/<env>/<appId>/<channelType>/meetsdk-remote-config.json` | `downloadSDKConfig` 接口拉取后落盘 | 每个游戏/渠道不同的业务参数,例如 `appId`、登录渠道 `clientId/secret/redirect/scheme/name` |
20
+ | `config/meetsdk-android.json` | 工具内置文件 | Android 固定 SDK 集成配置,例如 SDK 版本、Maven 仓库、依赖坐标、Firebase Gradle plugin |
21
+ | `config/meetsdk-ios.json` | 工具内置文件 | iOS 固定 SDK 集成配置,例如当前缓存 SDK 版本、发布日期、包类型、插件组合 |
22
+ | `GET https://business-api.meetgames.com/sdk/home/version` | sdk-home 接口 | Android 接入/检查时读取 `data.result.android.ver` 并写入 `config/meetsdk-android.json`;iOS 下载时读取 `data.result.ios.ver` 并写入 `config/meetsdk-ios.json` |
23
+
24
+ `meetsdk-remote-config.json` 由 `fetch-config`、`setup`、`doctor` 拉取并原样写入 `~/.cache/meet-sdk-tool`,不会写入游戏工程根目录。
25
+ `integrate` 读取缓存配置并执行接入;Android 接入会额外请求 sdk-home 版本接口获取最新 SDK 版本,并同步写回 `config/meetsdk-android.json`,不会重新拉取 `meetsdk-remote-config.json`。
26
+
27
+ ## 推荐流程
28
+
29
+ ### 一步接入
30
+
31
+ ```bash
32
+ node dist/entry.js setup \
33
+ --app-id <APP_ID> \
34
+ --app-secret '<APP_SECRET>' \
35
+ --channel-type GOOGLE \
36
+ --project-root /path/to/project \
37
+ --env test \
38
+ --verbose
39
+ ```
40
+
41
+ ### 接入后校验
42
+
43
+ ```bash
44
+ node dist/entry.js doctor \
45
+ --app-id <APP_ID> \
46
+ --app-secret '<APP_SECRET>' \
47
+ --channel-type GOOGLE \
48
+ --project-root /path/to/project \
49
+ --env test \
50
+ --verbose
51
+ ```
52
+
53
+ `doctor` 会先重新拉取远程配置,再根据当前工程类型执行 Android 或 iOS 的详细校验。
54
+
55
+ ## 本地 console 联调
56
+
57
+ 如果本地启动了 gp-sdk console:
58
+
59
+ ```bash
60
+ TOPSDK_API_BASE_URL=http://127.0.0.1:8081/ \
61
+ node dist/entry.js setup \
62
+ --app-id 791251136341225472 \
63
+ --app-secret 'YOUR_APP_SECRET' \
64
+ --channel-type APPLE \
65
+ --project-root ./fixtures/ios-test-project/tooltest \
66
+ --env test \
67
+ --verbose
68
+ ```
69
+
70
+ `TOPSDK_API_BASE_URL` 会覆盖 `--env` 对应的默认域名。
71
+
72
+ ## Android 接入内容
73
+
74
+ Android 接入时会根据 `meetsdk-remote-config.json` 和内置默认配置检查/写入:
75
+
76
+ - Application module 默认自动检测;如果工程存在多个 application module,需要通过 `--app-target <module>` 指定,例如 `:app` 或 `launcher`。
77
+ - sdk-home `version` 接口中的 `data.result.android.ver` / `date`,用于更新 `config/meetsdk-android.json` 并生成 App Module `build.gradle` 里的 `topsdk_version`。
78
+ - `settings.gradle` 或根 `build.gradle` 中的 Maven 仓库。
79
+ - 根 `build.gradle` 中的 Gradle plugin 声明,例如 Firebase google-services。
80
+ - App Module `build.gradle` 中的 SDK 依赖。
81
+ - App Module `defaultConfig` 中的 `resValue` 参数。
82
+ - `google-services.json` 下载和落盘。
83
+ - 默认 recipe 中声明的其他资源拷贝。
84
+
85
+ `doctor` 会校验仓库、依赖、`resValue`、Firebase 文件等是否已正确接入。
86
+
87
+ ## iOS 接入内容
88
+
89
+ iOS 接入时会根据缓存 iOS SDK 中的 `config.t.json` 执行:
90
+
91
+ - 复制 framework / xcframework / bundle / lib / source 到 `topSDK/`。
92
+ - 启用 Firebase 时,从 `meetsdk-remote-config.json` 中的 `sdkModules.analytics.firebase.firebaseUrl` 下载 `GoogleService-Info.plist` 到和 `Info.plist` 同级的 App target 目录,不要求缓存 SDK 内置该 plist。
93
+ - 修改 `.xcodeproj/project.pbxproj`,加入 framework、资源、系统库、build settings、copy files 等配置。
94
+ - 修改 `Info.plist`,写入 `TOPSDK`、三方 SDK 参数、URL Scheme、Queries Schemes。
95
+ - 启用 Apple Sign In 时创建/更新 entitlements。
96
+ - 注入 Objective-C `AppDelegate` / `SceneDelegate` 回调代码:启动初始化保留在 `AppDelegate`;存在唯一 `SceneDelegate` 时,URL、Universal Link、前后台回调写入 `SceneDelegate`。
97
+
98
+ `doctor` 会校验 SDK 文件、Xcode 引用、`GoogleService-Info.plist`、`Info.plist` 参数、插件参数、URL Scheme 是否按配置写入,以及 Delegate 注入是否完整。
99
+
100
+ `download-ios-sdk` 默认把 iOS SDK zip、解压内容和 metadata 写入 `~/.cache/meet-sdk-tool/sdk/ios`。iOS 接入的具体文件复制和参数模板以缓存 SDK 内的 `sdk/`、`plugins/` 配置为准。
101
+
102
+ ## iOS 插件模板字段
103
+
104
+ iOS 缓存 SDK 插件中的 `config.t.json` 是接入规则来源:
105
+
106
+ | 字段 | 作用 |
107
+ |---|---|
108
+ | `requireConfigs` | 声明插件必需的远程配置字段,缺失时接入/doctor 失败 |
109
+ | `pluginParams` | 写入 `Info.plist -> TOPSDK -> Plugins -> params` |
110
+ | `infoParams` | 写入 `Info.plist` 顶层字段,供三方 SDK 读取 |
111
+ | `urlScheme` | 写入 `Info.plist -> CFBundleURLTypes -> CFBundleURLSchemes` |
112
+ | `queriesSchemes` | 写入 `Info.plist -> LSApplicationQueriesSchemes` |
113
+ | `frameworks` / `libs` / `sources` | 声明需要复制并加入 Xcode 工程的资源 |
114
+ | `appDelegateCodes` / `sceneDelegateCodes` | 声明要注入 Delegate 的代码片段 |
115
+
116
+ 例如 `"{$C.FACEBOOK.scheme}"` 表示从远程配置 `sdkModules.login.facebook.scheme` 构建出的 `C.FACEBOOK.scheme` 取值。
package/docs/MCP.md ADDED
@@ -0,0 +1,86 @@
1
+ # MCP 使用说明
2
+
3
+ 本文档说明 `meet-sdk-tool` 的 MCP server 及 Cursor 配置方式。
4
+
5
+ ## 构建
6
+
7
+ ```bash
8
+ cd /Users/work/Workspace/Projects/meet-sdk-tool
9
+ npm run build
10
+ ```
11
+
12
+ ## 启动 MCP server
13
+
14
+ ```bash
15
+ npm run mcp:stdio
16
+ ```
17
+
18
+ 或直接:
19
+
20
+ ```bash
21
+ node dist/mcp-entry.js
22
+ ```
23
+
24
+ ## 暴露工具
25
+
26
+ | MCP 工具 | 作用 |
27
+ |---|---|
28
+ | `meetgames_doctor` | 拉取配置并检查 Android / iOS 接入是否正确 |
29
+ | `meetgames_fetch_config` | 调用 `downloadSDKConfig` 并写入 `~/.cache/meet-sdk-tool` 下的 `meetsdk-remote-config.json` |
30
+ | `meetgames_integrate_dry_run` | 只生成接入预览,不写工程文件 |
31
+ | `meetgames_integrate_apply` | 执行接入并写工程文件 |
32
+ | `meetgames_setup` | 先 fetch-config,再 integrate |
33
+
34
+ 所有 integrate 类工具都使用内置 recipe:
35
+
36
+ ```text
37
+ recipes/integrate-default.yaml
38
+ ```
39
+
40
+ 与 CLI 一样,多入口工程可显式指定目标:
41
+
42
+ | 参数 | 适用平台 | 说明 |
43
+ |---|---|---|
44
+ | `appTarget` | Android / iOS | 统一指定要接入/检查的 App 目标;Android 传 application module(如 `:app` / `app`),iOS 传 App target 名 |
45
+
46
+ 传入 `appTarget` 时会校验目标是否存在:Android 校验目标 application module,iOS 校验目标 App target。
47
+
48
+ ## 推荐调用顺序
49
+
50
+ 一次性接入:
51
+
52
+ ```text
53
+ meetgames_setup(dryRun=false)
54
+ meetgames_doctor()
55
+ ```
56
+
57
+ 需要先审查 diff:
58
+
59
+ ```text
60
+ meetgames_fetch_config()
61
+ meetgames_integrate_dry_run()
62
+ meetgames_integrate_apply()
63
+ meetgames_doctor()
64
+ ```
65
+
66
+ ## Cursor 配置
67
+
68
+ 将 `.cursor/mcp.example.json` 中的 server 配置复制到 Cursor MCP 配置中。
69
+
70
+ 推荐本地开发配置:
71
+
72
+ ```json
73
+ {
74
+ "mcpServers": {
75
+ "meetgames-mcp-local-node": {
76
+ "command": "node",
77
+ "args": [
78
+ "/Users/work/Workspace/Projects/meet-sdk-tool/dist/mcp-entry.js"
79
+ ],
80
+ "cwd": "/Users/work/Workspace/Projects/meet-sdk-tool"
81
+ }
82
+ }
83
+ }
84
+ ```
85
+
86
+ 如果已经全局安装 npm 包,也可以使用全局 bin 方式;开发阶段建议使用本地 `dist/mcp-entry.js`,避免版本不一致。
package/docs/README.md CHANGED
@@ -1,12 +1,20 @@
1
1
  # meet-sdk-tool 文档索引
2
2
 
3
- | 文档 | 类型 | 说明 |
4
- |------|------|------|
5
- | [需求文档.md](./需求文档.md) | 产品需求(PRD) v1.0 | 目标、四大功能、MG/服务端配套、验收与里程碑 |
6
- | [技术方案调研.md](./技术方案调研.md) | 技术调研 v1.2 | Gradle:现阶段正则,规划 Groovy AST only(不支持 `.kts`) |
7
- | [ANDROID.md](./ANDROID.md) | 使用说明 | Android 集成、CLI 参数、Gradle 行为 |
8
- | [API.md](./API.md) | 接口索引 | `downloadSDKConfig` HTTP 接口 |
9
- | [MCP-SKILL.md](./MCP-SKILL.md) | 运维 / Agent | MCP 工具与推荐调用顺序 |
10
- | [CURSOR-MCP-SETUP.md](./CURSOR-MCP-SETUP.md) | 环境 | Cursor MCP 配置 |
11
-
12
- 实现细节以仓库代码为准;PRD 中标注 **【待补充】** 的条目需产品 / 业务方确认后定稿。
3
+ 当前日常使用只需要优先查看根目录下的文档:
4
+
5
+ | 文档 | 用途 |
6
+ |---|---|
7
+ | [CLI.md](./CLI.md) | `meetgames` 命令、参数、环境变量和退出码 |
8
+ | [INTEGRATION.md](./INTEGRATION.md) | Android / iOS SDK 自动接入流程、doctor 校验内容、发版前测试方式 |
9
+ | [API.md](./API.md) | `downloadSDKConfig` 接口、签名、落盘 JSON 结构 |
10
+ | [MCP.md](./MCP.md) | MCP server、Cursor 配置和 Agent 调用顺序 |
11
+
12
+ 历史资料已归档到 [`archive/`](./archive/):
13
+
14
+ | 目录 / 文件 | 内容 |
15
+ |---|---|
16
+ | [archive/ios-migration.md](./archive/ios-migration.md) | iOS Python 工具迁移到 TypeScript 的完整历史记录 |
17
+ | [archive/api/](./archive/api/) | 旧接口、对照接口和旧版详细接口文档 |
18
+ | [archive/product/](./archive/product/) | PRD、技术调研等过程文档 |
19
+
20
+ 实现细节以代码为准;如果文档和代码不一致,以 `src/cli.ts`、`src/core/doctor.ts`、`src/ios/`、`src/android/` 当前实现为准。
@@ -38,7 +38,7 @@ meetgames fetch-config --app-id 791251136341225472 --app-secret YOUR_APP_SECRET
38
38
 
39
39
  - **Content-Type**:`application/json`(附件下载头 `Content-Disposition: meetsdk-remote-config.json`)
40
40
  - **Body**:即为 `meetsdk-remote-config.json` 全文(pretty JSON),**不是** `{ code, result }` 包装
41
- - **落盘**:`fetch-config` / MCP `meetgames_fetch_config` 将响应 **bytes 原样写入** `<project-root>/meetsdk-remote-config.json`,不注入 `dependencies`/`repositories`/`topsdk.version` 等字段;这些固定 SDK 配置仅在 `integrate` 时从内置 [`meetsdk-android.json`](../meetsdk-android.json) 合并。
41
+ - **落盘**:`fetch-config` / MCP `meetgames_fetch_config` 将响应 **bytes 原样写入** `~/.cache/meet-sdk-tool`,不注入 `dependencies`/`repositories`/`topsdk.version` 等字段;这些固定 SDK 配置仅在 `integrate` 时从内置 [`config/meetsdk-android.json`](../../config/meetsdk-android.json) 合并。
42
42
 
43
43
  ### 服务端数据来源(gp-sdk MySQL)
44
44
 
@@ -48,15 +48,17 @@ meetgames fetch-config --app-id 791251136341225472 --app-secret YOUR_APP_SECRET
48
48
  | `channel` | `channel.channel_type` | 枚举名如 `GOOGLE` / `APPLE` |
49
49
  | `devicePlatform` | `channel.device_platform` | 小写,如 `android` / `ios` |
50
50
  | `topsdk.appId` / `topsdk.appSecret` | `app` | |
51
- | `sdkModules.login.*` | `channel_auth`(`enable=true`) | 各登录渠道凭证 |
51
+ | `sdkModules.login.*` | `channel_auth` | key 直接使用 `authType` 小写,如 `guest` / `email` / `google` / `snapchat`;参数使用 `DTOChannelAuth` 字段名 |
52
52
  | `sdkModules.payment.*` | `channel_payment` + 部分 `channel_auth` | IAP 平台 |
53
- | `sdkModules.analytics.*` | `channel_third_data_platform` | AppsFlyer / Firebase / Adjust |
54
- | `sdkModules.analytics.firebase.firebase_file_url` | `channel_third_data_platform.firebase_url` | MG 经 **uploadV2** 上传后多为 OSS **objectKey**;组装 JSON 时经 `AliYunOssUtil.getOssUr` 生成下载链接(与 `downLoadXml` 一致)。若库内为 http(s) URL 则 `getFileUrl` 换签 |
55
- | `sdkModules.analytics.firebase.firebase_file_name` | `channel_third_data_platform.firebase_name` | 上传原始文件名(含后缀);落盘路径由 meet-sdk-tool 按工程 **app module** 检测 |
53
+ | `sdkModules.analytics.*` | `channel_third_data_platform` | AppsFlyer / Firebase / Adjust;参数使用 `ChannelThirdDataPlatform` 字段名 |
54
+ | `sdkModules.analytics.firebase.firebaseUrl` | `channel_third_data_platform.firebase_url` | MG 经 **uploadV2** 上传后多为 OSS **objectKey**;组装 JSON 时经 `AliYunOssUtil.getOssUr` 生成下载链接(与 `downLoadXml` 一致)。若库内为 http(s) URL 则 `getFileUrl` 换签 |
55
+ | `sdkModules.analytics.firebase.firebaseName` | `channel_third_data_platform.firebase_name` | 上传原始文件名(含后缀);落盘路径由 meet-sdk-tool 按检测到或通过 `--app-target` 指定的工程 **app module** 决定 |
56
56
 
57
57
  详见 gp-sdk `SdkConfigDownloadServiceImpl`;**不包含** `topsdk.version`(integrate 时用 `meetsdk-android.json` 兜底)。
58
58
 
59
- **子模块写入**:只要库表里有对应配置参数即写入子键,value 为对象(或 `{}`);无配置**不写该键**(不出现 `false`)。**不**再根据 `channel_auth.enable` / `channel_payment.enable` 过滤。`analytics.facebookdata` 等独立开关字段预留,待 meetgames-business 配置后再接。
59
+ **子模块写入**:只要库表里有对应配置参数即写入子键,value 为对象(或 `{}`);无配置**不写该键**(不出现 `false`)。插件对象内只写有值字段,不写空字符串占位。`channel_auth` 输出字段为 `clientId` / `secret` / `redirect` / `scheme` / `name`;`channel_third_data_platform` 输出字段保持 `devKey` / `appleAppId` / `firebaseUrl` / `firebaseName` / `appCode` / `eventUrl` 等实体字段名,其中 `eventUrl` 属于 `analytics.adjust`,不属于 `analytics.appsflyer`。**不**再根据 `channel_auth.enable` / `channel_payment.enable` 过滤。`analytics.facebookdata` 等独立开关字段预留,待 meetgames-business 配置后再接。
60
+
61
+ `meet-sdk-tool` 按上述 DTO/entity 原字段名读取配置;旧字段名不再作为兼容输入。
60
62
 
61
63
  **meet-sdk-tool integrate**:仅当 JSON 里写了对应子键时接入(如 `login.kakao`、`analytics.appsflyer`);有键则 value 必为 `{…}`。
62
64
 
@@ -83,7 +85,7 @@ JSON Schema:[`schema/meetsdk-remote-config.schema.json`](../../schema/meetsdk-
83
85
  ### 响应体样例
84
86
 
85
87
  仓库内测试用 mock:[`fixtures/meetsdk-remote-config.mock.json`](../../fixtures/meetsdk-remote-config.mock.json)
86
- Vitest 样例工程:[`test-projects/android-latest-project/meetsdk-remote-config.json`](../../test-projects/android-latest-project/meetsdk-remote-config.json)(联调后可能被覆盖)
88
+ Vitest 样例工程:[`fixtures/android-test-project/android-latest-project/meetsdk-remote-config.json`](../../../fixtures/android-test-project/android-latest-project/meetsdk-remote-config.json)(联调后可能被覆盖)
87
89
 
88
90
  ## 与 getChannelConfig 的区别
89
91
 
@@ -90,10 +90,10 @@ GET https://test-business-api.meetgames.com/customer/topsdk/console/meetgames/ch
90
90
  | `appId` | `topsdk.appId`(secret 在 `app` 表,此接口 result 未必带出) |
91
91
  | `authConfigs[]`(`enable`) | `sdkModules.login.*` |
92
92
  | `thirdDataPlatform.devKey` | `sdkModules.analytics.appsflyer` 等 |
93
- | `thirdDataPlatform.firebaseUrl` | Firebase / `firebase_file_url` 类字段 |
93
+ | `thirdDataPlatform.firebaseUrl` | Firebase / `firebaseUrl` 字段 |
94
94
  | `parameterConfig` | 支付 / Google Play 服务账号等,与 `channel_payment`、parameter 表相关 |
95
95
 
96
- 完整 Gradle 集成仍依赖工具侧 [`meetsdk-android.json`](../../meetsdk-android.json) 合并版本与依赖。
96
+ 完整 Gradle 集成仍依赖工具侧 [`config/meetsdk-android.json`](../../config/meetsdk-android.json) 合并版本与依赖。
97
97
 
98
98
  ## 脱敏样例
99
99