@leonxin/meetgames 0.1.17 → 0.1.19

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 (92) hide show
  1. package/README.md +5 -4
  2. package/dist/cache.d.ts +16 -0
  3. package/dist/cache.d.ts.map +1 -1
  4. package/dist/cache.js +21 -0
  5. package/dist/cache.js.map +1 -1
  6. package/dist/cli.d.ts.map +1 -1
  7. package/dist/cli.js +24 -26
  8. package/dist/cli.js.map +1 -1
  9. package/dist/config/meetSdkDefaultConfig.d.ts +7 -11
  10. package/dist/config/meetSdkDefaultConfig.d.ts.map +1 -1
  11. package/dist/config/meetSdkDefaultConfig.js +216 -53
  12. package/dist/config/meetSdkDefaultConfig.js.map +1 -1
  13. package/dist/config/meetSdkIosConfig.d.ts +4 -5
  14. package/dist/config/meetSdkIosConfig.d.ts.map +1 -1
  15. package/dist/config/meetSdkIosConfig.js +19 -19
  16. package/dist/config/meetSdkIosConfig.js.map +1 -1
  17. package/dist/contracts/types.d.ts +4 -0
  18. package/dist/contracts/types.d.ts.map +1 -1
  19. package/dist/core/doctor.d.ts.map +1 -1
  20. package/dist/core/doctor.js +3 -1
  21. package/dist/core/doctor.js.map +1 -1
  22. package/dist/core/previewPatches.d.ts +2 -2
  23. package/dist/core/previewPatches.d.ts.map +1 -1
  24. package/dist/core/previewPatches.js +3 -3
  25. package/dist/core/previewPatches.js.map +1 -1
  26. package/dist/core/workspace.d.ts.map +1 -1
  27. package/dist/core/workspace.js +1 -0
  28. package/dist/core/workspace.js.map +1 -1
  29. package/dist/index.d.ts +4 -4
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +4 -4
  32. package/dist/index.js.map +1 -1
  33. package/dist/ios/integrate.d.ts.map +1 -1
  34. package/dist/ios/integrate.js +11 -9
  35. package/dist/ios/integrate.js.map +1 -1
  36. package/dist/mcp/service.d.ts +2 -0
  37. package/dist/mcp/service.d.ts.map +1 -1
  38. package/dist/mcp/service.js +8 -5
  39. package/dist/mcp/service.js.map +1 -1
  40. package/dist/ops/handlers.d.ts.map +1 -1
  41. package/dist/ops/handlers.js +4 -0
  42. package/dist/ops/handlers.js.map +1 -1
  43. package/dist/remote/sdkHomeDownload.d.ts +6 -5
  44. package/dist/remote/sdkHomeDownload.d.ts.map +1 -1
  45. package/dist/remote/sdkHomeDownload.js +73 -11
  46. package/dist/remote/sdkHomeDownload.js.map +1 -1
  47. package/docs/API.md +13 -13
  48. package/docs/CLI.md +28 -16
  49. package/docs/INTEGRATION.md +7 -6
  50. package/package.json +1 -1
  51. package/src/cache.ts +37 -0
  52. package/src/cli.ts +28 -27
  53. package/src/config/meetSdkDefaultConfig.ts +243 -59
  54. package/src/config/meetSdkIosConfig.ts +17 -21
  55. package/src/contracts/types.ts +4 -0
  56. package/src/core/doctor.ts +3 -1
  57. package/src/core/previewPatches.ts +3 -3
  58. package/src/core/workspace.ts +1 -0
  59. package/src/index.ts +5 -3
  60. package/src/ios/integrate.ts +12 -10
  61. package/src/mcp/service.ts +15 -5
  62. package/src/ops/handlers.ts +4 -0
  63. package/src/remote/sdkHomeDownload.ts +82 -15
  64. package/config/meetsdk-android.json +0 -171
  65. package/config/meetsdk-ios.json +0 -15
  66. package/tests/assemble.test.ts +0 -12
  67. package/tests/doctor.test.ts +0 -131
  68. package/tests/downloadGoogleServicesJson.test.ts +0 -47
  69. package/tests/fetch-remote.test.ts +0 -23
  70. package/tests/fetchConfigOverrides.test.ts +0 -28
  71. package/tests/fetchConfigWrite.test.ts +0 -54
  72. package/tests/fixtures-hosts.test.ts +0 -78
  73. package/tests/gradle.test.ts +0 -33
  74. package/tests/integration-json.test.ts +0 -29
  75. package/tests/ios.codeUtils.test.ts +0 -23
  76. package/tests/ios.sdkBundle.test.ts +0 -21
  77. package/tests/loadManifest.test.ts +0 -15
  78. package/tests/manifest-xml.test.ts +0 -30
  79. package/tests/mcp.e2e.ts +0 -214
  80. package/tests/mcp.service.test.ts +0 -53
  81. package/tests/meetSdkRemoteConfig.test.ts +0 -482
  82. package/tests/meetSdkRemoteGradle.test.ts +0 -414
  83. package/tests/pipeline.android.test.ts +0 -149
  84. package/tests/pipeline.integration-json.test.ts +0 -58
  85. package/tests/pipeline.ios.test.ts +0 -608
  86. package/tests/pipeline.preview.patch.test.ts +0 -85
  87. package/tests/platformSelection.test.ts +0 -77
  88. package/tests/sdkHomeDownload.test.ts +0 -224
  89. package/tests/sdkVersionConfig.test.ts +0 -131
  90. package/tests/topsdk.test.ts +0 -53
  91. package/tests/topsdkDownloadSdkConfig.test.ts +0 -81
  92. package/tests/topsdkFeatureModules.test.ts +0 -116
@@ -1,482 +0,0 @@
1
- import fs from "node:fs";
2
- import path from "node:path";
3
- import { fileURLToPath } from "node:url";
4
- import { describe, expect, it } from "vitest";
5
- import {
6
- applyMeetSdkDefaultConfig,
7
- collectMeetSdkRemoteRepositories,
8
- mapTopSdkGetSdkConfigToMeetSdkRemoteConfig,
9
- tryParseAsMeetSdkRemoteConfig,
10
- validateMeetSdkRemoteConfig,
11
- } from "../src/config/meetSdkRemoteConfig.js";
12
- import { loadBuiltInMeetSdkDefaultConfig } from "../src/config/meetSdkDefaultConfig.js";
13
-
14
- const here = path.dirname(fileURLToPath(import.meta.url));
15
- const refPath = path.join(here, "..", "fixtures", "topsdk-config-reference.json");
16
- const offlineMockPath = path.join(here, "..", "fixtures", "meetsdk-remote-config.mock.json");
17
- const offlineIosMockPath = path.join(here, "..", "fixtures", "meetsdk-remote-config.ios-native-sample.json");
18
- const downloadShapePath = path.join(here, "..", "fixtures", "meetsdk-remote-config.download-shape.json");
19
-
20
- const mapCtx = {
21
- appId: "app-1",
22
- appSecret: "test-secret",
23
- channelType: "google",
24
- packageName: "com.example.pkg",
25
- };
26
-
27
- describe("meetSdkRemoteConfig", () => {
28
- it("parses downloadSDKConfig shape (root channel, no topsdk.channel)", () => {
29
- const raw = JSON.parse(fs.readFileSync(downloadShapePath, "utf8")) as unknown;
30
- const parsed = tryParseAsMeetSdkRemoteConfig(raw);
31
- expect(parsed).not.toBeNull();
32
- expect(parsed?.channel).toBe("GOOGLE");
33
- expect(parsed?.devicePlatform).toBe("android");
34
- expect(parsed?.topsdk).not.toHaveProperty("channel");
35
- expect(validateMeetSdkRemoteConfig(parsed!).ok).toBe(true);
36
- const login = parsed!.sdkModules.login as unknown as Record<string, unknown>;
37
- expect(login.google).toBeDefined();
38
- expect(login.kakao).toBeUndefined();
39
- expect("kakao" in login).toBe(false);
40
- });
41
-
42
- it("parses downloadSDKConfig DTO field names directly", () => {
43
- const parsed = tryParseAsMeetSdkRemoteConfig({
44
- packageName: "com.example",
45
- channel: "APPLE",
46
- devicePlatform: "ios",
47
- topsdk: { appId: "1", appSecret: "s" },
48
- sdkModules: {
49
- login: {
50
- facebook: { clientId: "fb-app", scheme: "fb-scheme", secret: "fb-token", name: "FB Name" },
51
- google: { clientId: "google-client", scheme: "google-reversed" },
52
- snapchat: { clientId: "snap-client", redirect: "snap-redirect", scheme: "snap-scheme" },
53
- naver: { clientId: "naver-client", secret: "naver-secret", name: "Naver", scheme: "naver-scheme" },
54
- apple: {},
55
- },
56
- payment: { appleIap: {} },
57
- analytics: {
58
- appsflyer: { devKey: "af-key", appleAppId: "1234567890" },
59
- firebase: { firebaseUrl: "https://cdn.example/GoogleService-Info.plist", firebaseName: "GoogleService-Info.plist" },
60
- adjust: { appCode: "adjust-token" },
61
- },
62
- },
63
- });
64
-
65
- expect(parsed).not.toBeNull();
66
- expect(parsed!.sdkModules.login.facebook).toMatchObject({
67
- facebookAppId: "fb-app",
68
- fbLoginProtocolScheme: "fb-scheme",
69
- facebookClientToken: "fb-token",
70
- name: "FB Name",
71
- });
72
- expect(parsed!.sdkModules.login.google).toMatchObject({
73
- googleClientId: "google-client",
74
- scheme: "google-reversed",
75
- });
76
- expect(parsed!.sdkModules.analytics.firebase).toMatchObject({
77
- firebase_file_url: "https://cdn.example/GoogleService-Info.plist",
78
- firebase_file_name: "GoogleService-Info.plist",
79
- });
80
- expect(parsed!.sdkModules.analytics.adjust).toMatchObject({ appId: "adjust-token" });
81
- expect(parsed!.sdkModules.analytics.appsflyer).toMatchObject({
82
- devKey: "af-key",
83
- appleAppId: "1234567890",
84
- });
85
- expect(parsed!.sdkModules.payment.appleIap).toMatchObject({});
86
- });
87
-
88
- it("does not treat legacy remote field names as valid config", () => {
89
- const parsed = tryParseAsMeetSdkRemoteConfig({
90
- packageName: "com.example",
91
- channel: "GOOGLE",
92
- devicePlatform: "android",
93
- topsdk: { appId: "1", appSecret: "s" },
94
- sdkModules: {
95
- login: {
96
- facebook: {
97
- facebookAppId: "fb-app",
98
- fbLoginProtocolScheme: "fb-scheme",
99
- facebookClientToken: "fb-token",
100
- },
101
- google: { googleClientId: "google-client" },
102
- },
103
- payment: {},
104
- analytics: {
105
- firebase: { firebase_file_url: "https://cdn.example/google-services.json" },
106
- adjust: { appId: "adjust-token" },
107
- },
108
- },
109
- });
110
-
111
- expect(parsed).not.toBeNull();
112
- expect(validateMeetSdkRemoteConfig(parsed!)).toMatchObject({
113
- ok: false,
114
- missing: expect.arrayContaining([
115
- "sdkModules.login.facebook.clientId",
116
- "sdkModules.login.facebook.scheme",
117
- "sdkModules.login.facebook.secret",
118
- "sdkModules.login.google.clientId",
119
- "sdkModules.analytics.firebase.firebaseUrl",
120
- "sdkModules.analytics.adjust.appCode",
121
- ]),
122
- });
123
- });
124
-
125
- it("parses reference mock shape", () => {
126
- const raw = JSON.parse(fs.readFileSync(refPath, "utf8")) as unknown;
127
- const parsed = tryParseAsMeetSdkRemoteConfig(raw);
128
- expect(parsed).not.toBeNull();
129
- expect(parsed?.channel).toBe("GOOGLE");
130
- expect(parsed?.devicePlatform).toBe("android");
131
- expect(parsed?.topsdk).not.toHaveProperty("channel");
132
- expect(validateMeetSdkRemoteConfig(parsed!).ok).toBe(true);
133
- const resolved = applyMeetSdkDefaultConfig(parsed!, loadBuiltInMeetSdkDefaultConfig());
134
- expect(resolved.topsdk.repositories).toContain("https://storage-sdk-gameplus.meetsocial.com/repository/TopSdk/");
135
- });
136
-
137
- it("offline meetsdk-remote-config.mock.json is valid for local testing", () => {
138
- const raw = JSON.parse(fs.readFileSync(offlineMockPath, "utf8")) as unknown;
139
- const parsed = tryParseAsMeetSdkRemoteConfig(raw);
140
- expect(parsed).not.toBeNull();
141
- expect(parsed?.channel).toBe("GOOGLE");
142
- expect(parsed?.devicePlatform).toBe("android");
143
- expect(validateMeetSdkRemoteConfig(parsed!).ok).toBe(true);
144
- });
145
-
146
- it("offline iOS remote config fixture is valid for local testing", () => {
147
- const raw = JSON.parse(fs.readFileSync(offlineIosMockPath, "utf8")) as unknown;
148
- const parsed = tryParseAsMeetSdkRemoteConfig(raw);
149
- expect(parsed).not.toBeNull();
150
- expect(parsed?.channel).toBe("APPLE");
151
- expect(parsed?.devicePlatform).toBe("ios");
152
- expect(validateMeetSdkRemoteConfig(parsed!).ok).toBe(true);
153
- });
154
-
155
- it("rejects sdkModules.login.kakao when value is false (not object)", () => {
156
- const raw = {
157
- packageName: "com.example",
158
- channel: "GOOGLE",
159
- topsdk: { appId: "1", appSecret: "s" },
160
- sdkModules: { login: { kakao: false }, payment: {}, analytics: {} },
161
- };
162
- expect(tryParseAsMeetSdkRemoteConfig(raw)).toBeNull();
163
- });
164
-
165
- it("rejects legacy file with topsdk.channel only", () => {
166
- const raw = {
167
- packageName: "com.legacy.app",
168
- topsdk: { channel: "GOOGLE", appId: "1", appSecret: "s" },
169
- sdkModules: { login: {}, payment: {}, analytics: {} },
170
- };
171
- expect(tryParseAsMeetSdkRemoteConfig(raw)).toBeNull();
172
- });
173
-
174
- it("maps getSDKConfig envelope to nested sdkModules credentials", () => {
175
- const body = {
176
- code: 200,
177
- data: {
178
- appId: "app-1",
179
- groupId: "com.sino.topsdk",
180
- sdkVersion: "1.2.3",
181
- repositories: ["google", "mavenCentral"],
182
- channelAuthConfig: [
183
- { authType: "GOOGLE", clientId: "google-cid" },
184
- { authType: "FACEBOOK", clientId: "fbid", scheme: "fbfbid", clientToken: "ctok" },
185
- { authType: "APPSFLYER", devKey: "afkey", enableDebugLog: true },
186
- ],
187
- },
188
- };
189
- const meet = mapTopSdkGetSdkConfigToMeetSdkRemoteConfig(body, mapCtx);
190
- expect(meet.packageName).toBe("com.example.pkg");
191
- expect(meet.channel).toBe("GOOGLE");
192
- expect(meet.topsdk.appSecret).toBe("test-secret");
193
- expect(meet.topsdk).toMatchObject({
194
- version: "1.2.3",
195
- groupId: "com.sino.topsdk",
196
- appId: "app-1",
197
- appSecret: "test-secret",
198
- repositories: ["google", "mavenCentral"],
199
- });
200
- expect(meet.topsdk).not.toHaveProperty("channel");
201
- expect(meet.sdkModules.login.google).toMatchObject({ googleClientId: "google-cid" });
202
- expect(meet.sdkModules.login.facebook).toMatchObject({
203
- facebookAppId: "fbid",
204
- fbLoginProtocolScheme: "fbfbid",
205
- facebookClientToken: "ctok",
206
- });
207
- expect(meet.sdkModules.analytics.appsflyer).toMatchObject({
208
- devKey: "afkey",
209
- enableDebugLog: true,
210
- });
211
- });
212
-
213
- it("maps gp-sdk VO-shaped channelAuth (secret as Facebook client token and AppsFlyer devKey)", () => {
214
- const body = {
215
- code: 200,
216
- data: {
217
- channelAuthConfig: [
218
- { authType: "FACEBOOK", clientId: "fb-app", scheme: "fbfb-app", secret: "client-token-from-secret" },
219
- { authType: "APPSFLYER", clientId: "apple-app-id-field", secret: "real-dev-key" },
220
- ],
221
- },
222
- };
223
- const meet = mapTopSdkGetSdkConfigToMeetSdkRemoteConfig(body, {
224
- appId: "99",
225
- appSecret: "s",
226
- channelType: "google",
227
- packageName: "com.p",
228
- });
229
- expect(meet.sdkModules.login.facebook).toMatchObject({
230
- facebookAppId: "fb-app",
231
- fbLoginProtocolScheme: "fbfb-app",
232
- facebookClientToken: "client-token-from-secret",
233
- });
234
- expect(meet.sdkModules.analytics.appsflyer).toMatchObject({
235
- devKey: "real-dev-key",
236
- enableDebugLog: false,
237
- });
238
- });
239
-
240
- it("parses Adjust eventUrl under analytics.adjust", () => {
241
- const parsed = tryParseAsMeetSdkRemoteConfig({
242
- packageName: "com.example",
243
- channel: "APPLE",
244
- devicePlatform: "ios",
245
- topsdk: { appId: "1", appSecret: "s" },
246
- sdkModules: {
247
- login: {},
248
- payment: {},
249
- analytics: {
250
- adjust: {
251
- appCode: "adjust-app-code",
252
- eventUrl: "https://example.invalid/events.json",
253
- },
254
- },
255
- },
256
- });
257
-
258
- expect(parsed?.sdkModules.analytics.adjust).toMatchObject({
259
- appId: "adjust-app-code",
260
- eventUrl: "https://example.invalid/events.json",
261
- enableSandbox: false,
262
- });
263
- });
264
-
265
- it("maps TWITTER / LINE / KAKAO from channelAuthConfig", () => {
266
- const body = {
267
- code: 200,
268
- data: {
269
- channelAuthConfig: [
270
- { authType: "TWITTER", clientId: "tw-cid", secret: "tw-sec", redirect: "https://cb" },
271
- { authType: "LINE", clientId: "line-ch" },
272
- { authType: "KAKAO", clientId: "kakao-key", scheme: "kakaokey" },
273
- ],
274
- },
275
- };
276
- const meet = mapTopSdkGetSdkConfigToMeetSdkRemoteConfig(body, mapCtx);
277
- expect(meet.sdkModules.login.twitter).toMatchObject({
278
- clientId: "tw-cid",
279
- secret: "tw-sec",
280
- redirect: "https://cb",
281
- });
282
- expect(meet.sdkModules.login.line).toMatchObject({ clientId: "line-ch" });
283
- expect(meet.sdkModules.login.kakao).toMatchObject({ clientId: "kakao-key", scheme: "kakaokey" });
284
- });
285
-
286
- it("maps FIREBASE and ADJUST channelAuthConfig", () => {
287
- const body = {
288
- code: 200,
289
- data: {
290
- channelAuthConfig: [
291
- { authType: "FIREBASE", firebase_file_url: "https://cdn.example/google-services.json" },
292
- { authType: "ADJUST", appId: "adj-app-1" },
293
- ],
294
- },
295
- };
296
- const meet = mapTopSdkGetSdkConfigToMeetSdkRemoteConfig(body, mapCtx);
297
- expect(meet.sdkModules.analytics.firebase).toMatchObject({
298
- firebase_file_url: "https://cdn.example/google-services.json",
299
- });
300
- expect(meet.sdkModules.analytics.adjust).toMatchObject({ appId: "adj-app-1" });
301
- });
302
-
303
- it("maps FIREBASE firebase_file_url from configUrl fallback", () => {
304
- const body = {
305
- code: 200,
306
- data: {
307
- channelAuthConfig: [{ authType: "FIREBASE", configUrl: "https://u/g.json" }],
308
- },
309
- };
310
- const meet = mapTopSdkGetSdkConfigToMeetSdkRemoteConfig(body, mapCtx);
311
- expect(meet.sdkModules.analytics.firebase).toMatchObject({
312
- firebase_file_url: "https://u/g.json",
313
- });
314
- });
315
-
316
- it("prefers data.topsdk.version and groupId when nested object is present", () => {
317
- const body = {
318
- code: 200,
319
- data: {
320
- sdkVersion: "1.0.0",
321
- topsdk: { version: "2.0.0", groupId: "com.x" },
322
- channelAuthConfig: [],
323
- },
324
- };
325
- const meet = mapTopSdkGetSdkConfigToMeetSdkRemoteConfig(body, mapCtx);
326
- expect(meet.topsdk.version).toBe("2.0.0");
327
- expect(meet.topsdk.groupId).toBe("com.x");
328
- });
329
-
330
- it("rejects top-level parameterConfig", () => {
331
- const raw = {
332
- packageName: "x",
333
- topsdk: { channel: "GOOGLE", version: "1", groupId: "g", appId: "a", appSecret: "s" },
334
- parameterConfig: { id: "1" },
335
- sdkModules: {
336
- login: {},
337
- payment: {},
338
- analytics: {},
339
- },
340
- };
341
- expect(tryParseAsMeetSdkRemoteConfig(raw)).toBeNull();
342
- });
343
-
344
- it("rejects deprecated sdkModules.login.parameterConfig", () => {
345
- const raw = {
346
- packageName: "x",
347
- topsdk: { channel: "GOOGLE", version: "1", groupId: "g", appId: "a", appSecret: "s" },
348
- sdkModules: {
349
- login: {
350
- parameterConfig: { id: "1" },
351
- },
352
- payment: {},
353
- analytics: {},
354
- },
355
- };
356
- expect(tryParseAsMeetSdkRemoteConfig(raw)).toBeNull();
357
- });
358
-
359
- it("rejects deprecated sdkModules.login.parameter", () => {
360
- const raw = {
361
- packageName: "x",
362
- topsdk: { channel: "GOOGLE", version: "1", groupId: "g", appId: "a", appSecret: "s" },
363
- sdkModules: {
364
- login: { parameter: { id: "1" } },
365
- payment: {},
366
- analytics: {},
367
- },
368
- };
369
- expect(tryParseAsMeetSdkRemoteConfig(raw)).toBeNull();
370
- });
371
-
372
- it("rejects legacy flat features without sdkModules", () => {
373
- const raw = {
374
- packageName: "x",
375
- topsdk: { channel: "GOOGLE", version: "1", groupId: "g", appId: "a", appSecret: "s" },
376
- features: { guest: false, email: false, facebook: true, google: false, appsflyer: false, googleIap: false },
377
- };
378
- expect(tryParseAsMeetSdkRemoteConfig(raw)).toBeNull();
379
- });
380
-
381
- it("accepts root channel without topsdk.channel", () => {
382
- const raw = {
383
- channel: "GOOGLE",
384
- packageName: "x",
385
- topsdk: { version: "1", groupId: "g", appId: "a", appSecret: "s" },
386
- sdkModules: {
387
- login: {},
388
- payment: {},
389
- analytics: {},
390
- },
391
- };
392
- const parsed = tryParseAsMeetSdkRemoteConfig(raw);
393
- expect(parsed).not.toBeNull();
394
- expect(parsed?.channel).toBe("GOOGLE");
395
- expect(parsed?.topsdk).not.toHaveProperty("channel");
396
- });
397
-
398
- it("rejects top-level facebook/google/appsflyer (credentials belong under sdkModules)", () => {
399
- const raw = {
400
- packageName: "x",
401
- topsdk: { channel: "GOOGLE", version: "1", groupId: "g", appId: "a", appSecret: "s" },
402
- facebook: { facebookAppId: "x", fbLoginProtocolScheme: "y", facebookClientToken: "z" },
403
- sdkModules: {
404
- login: {},
405
- payment: {},
406
- analytics: {},
407
- },
408
- };
409
- expect(tryParseAsMeetSdkRemoteConfig(raw)).toBeNull();
410
- });
411
-
412
- it("rejects analytics.firebase and analytics.adjust boolean true", () => {
413
- const raw = {
414
- packageName: "com.x",
415
- topsdk: { channel: "GOOGLE", version: "1", groupId: "g", appId: "a", appSecret: "s" },
416
- sdkModules: {
417
- login: {},
418
- payment: {},
419
- analytics: { appsflyer: false, facebookdata: false, firebase: true, adjust: true },
420
- },
421
- };
422
- expect(tryParseAsMeetSdkRemoteConfig(raw)).toBeNull();
423
- });
424
-
425
- it("rejects direct boolean toggles for parameterized plugins", () => {
426
- const raw = {
427
- packageName: "com.x",
428
- topsdk: { channel: "GOOGLE", version: "1", groupId: "g", appId: "a", appSecret: "s" },
429
- sdkModules: {
430
- login: { guest: true, email: true, facebook: true, google: true },
431
- payment: { googleIap: true },
432
- analytics: { appsflyer: true, facebookdata: true },
433
- },
434
- };
435
- expect(tryParseAsMeetSdkRemoteConfig(raw)).toBeNull();
436
- });
437
-
438
- it("does not collect repositories for sdkModules keys absent in remote config", () => {
439
- const defaults = loadBuiltInMeetSdkDefaultConfig();
440
- const remote = tryParseAsMeetSdkRemoteConfig({
441
- packageName: "com.example.game",
442
- channel: "GOOGLE",
443
- topsdk: { appId: "1", appSecret: "s" },
444
- sdkModules: {
445
- login: { google: { clientId: "g" } },
446
- payment: {},
447
- analytics: {},
448
- },
449
- });
450
- expect(remote).not.toBeNull();
451
- const resolved = applyMeetSdkDefaultConfig(remote!, defaults);
452
- const repos = collectMeetSdkRemoteRepositories(resolved);
453
- expect(repos).not.toContain("https://devrepo.kakao.com/nexus/content/groups/public/");
454
- expect(repos).not.toContain("mavenCentral");
455
- expect(repos).toContain("https://storage-sdk-gameplus.meetsocial.com/repository/TopSdk/");
456
- });
457
-
458
- it("collects plugin repositories from meetsdk-android.json when modules are enabled", () => {
459
- const defaults = loadBuiltInMeetSdkDefaultConfig();
460
- const remote = tryParseAsMeetSdkRemoteConfig({
461
- packageName: "com.example.game",
462
- channel: "GOOGLE",
463
- devicePlatform: "android",
464
- topsdk: { appId: "1", appSecret: "s" },
465
- sdkModules: {
466
- login: {
467
- kakao: { clientId: "k", scheme: "kakao" },
468
- tiktok: { clientId: "t", secret: "s", redirect: "r" },
469
- },
470
- payment: { onestoreIap: {}, huaweiIap: {} },
471
- analytics: {},
472
- },
473
- });
474
- expect(remote).not.toBeNull();
475
- const resolved = applyMeetSdkDefaultConfig(remote!, defaults);
476
- const repos = collectMeetSdkRemoteRepositories(resolved);
477
- expect(repos).toContain("https://devrepo.kakao.com/nexus/content/groups/public/");
478
- expect(repos).toContain("https://artifact.bytedance.com/repository/AwemeOpenSDK");
479
- expect(repos).toContain("https://repo.onestore.co.kr/repository/onestore-sdk-public/");
480
- expect(repos).toContain("https://developer.huawei.com/repo/");
481
- });
482
- });