react-native-stallion 2.4.0-alpha.6 → 2.4.0-alpha.7

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 (47) hide show
  1. package/android/src/main/java/com/stallion/StallionModule.java +15 -5
  2. package/android/src/main/java/com/stallion/networkmanager/StallionApiConstants.java +22 -1
  3. package/android/src/main/java/com/stallion/networkmanager/StallionSyncHandler.java +1 -1
  4. package/android/src/main/java/com/stallion/storage/StallionConfig.java +24 -1
  5. package/android/src/main/java/com/stallion/storage/StallionConfigConstants.java +1 -0
  6. package/android/src/main/java/com/stallion/utils/StallionApiBaseUrl.java +59 -0
  7. package/android/src/main/java/com/stallion/utils/StallionTokenRegion.java +51 -0
  8. package/ios/main/Stallion.swift +14 -1
  9. package/ios/main/StallionApiBaseUrl.swift +51 -0
  10. package/ios/main/StallionConfig.h +2 -0
  11. package/ios/main/StallionConfig.m +15 -1
  12. package/ios/main/StallionConfigConstants.h +1 -0
  13. package/ios/main/StallionConfigConstants.m +1 -0
  14. package/ios/main/StallionConstants.swift +10 -1
  15. package/ios/main/StallionObjConstants.h +1 -0
  16. package/ios/main/StallionObjConstants.m +4 -0
  17. package/ios/main/StallionTokenRegion.swift +44 -0
  18. package/package.json +1 -1
  19. package/src/main/components/modules/listing/components/SlotView.js.map +1 -1
  20. package/src/main/constants/apiConstants.js +5 -1
  21. package/src/main/constants/apiConstants.js.map +1 -1
  22. package/src/main/state/actionCreators/useConfigActions.js +3 -0
  23. package/src/main/state/actionCreators/useConfigActions.js.map +1 -1
  24. package/src/main/state/useStallionEvents.js +2 -0
  25. package/src/main/state/useStallionEvents.js.map +1 -1
  26. package/src/main/utils/getApiBaseUrl.js +46 -0
  27. package/src/main/utils/getApiBaseUrl.js.map +1 -0
  28. package/src/main/utils/parseTokenRegion.js +40 -0
  29. package/src/main/utils/parseTokenRegion.js.map +1 -0
  30. package/src/main/utils/useApiClient.js +10 -4
  31. package/src/main/utils/useApiClient.js.map +1 -1
  32. package/src/types/config.types.js.map +1 -1
  33. package/types/__tests__/parseTokenRegion.test.d.ts +2 -0
  34. package/types/__tests__/parseTokenRegion.test.d.ts.map +1 -0
  35. package/types/main/constants/apiConstants.d.ts +2 -1
  36. package/types/main/constants/apiConstants.d.ts.map +1 -1
  37. package/types/main/state/actionCreators/useConfigActions.d.ts.map +1 -1
  38. package/types/main/state/useStallionEvents.d.ts.map +1 -1
  39. package/types/main/utils/getApiBaseUrl.d.ts +18 -0
  40. package/types/main/utils/getApiBaseUrl.d.ts.map +1 -0
  41. package/types/main/utils/parseTokenRegion.d.ts +11 -0
  42. package/types/main/utils/parseTokenRegion.d.ts.map +1 -0
  43. package/types/main/utils/useApiClient.d.ts.map +1 -1
  44. package/types/types/config.types.d.ts +1 -0
  45. package/types/types/config.types.d.ts.map +1 -1
  46. package/types/types/utils.types.d.ts +1 -0
  47. package/types/types/utils.types.d.ts.map +1 -1
@@ -61,11 +61,21 @@ public class StallionModule extends ReactContextBaseJavaModule implements Lifecy
61
61
 
62
62
  @ReactMethod
63
63
  public void onLaunch(String launchData) {
64
- // try {
65
- // JSONObject launchDataJson = new JSONObject(launchData);
66
- // } catch (Exception e) {
67
- // e.printStackTrace();
68
- // }
64
+ try {
65
+ String customBaseUrl = null;
66
+ if (launchData != null && !launchData.isEmpty()) {
67
+ JSONObject launchDataJson = new JSONObject(launchData);
68
+ if (launchDataJson.has("baseUrl") && !launchDataJson.isNull("baseUrl")) {
69
+ String baseUrl = launchDataJson.optString("baseUrl", "");
70
+ if (!baseUrl.isEmpty()) {
71
+ customBaseUrl = baseUrl;
72
+ }
73
+ }
74
+ }
75
+ com.stallion.utils.StallionApiBaseUrl.set(customBaseUrl);
76
+ } catch (Exception e) {
77
+ e.printStackTrace();
78
+ }
69
79
  stallionStateManager.setIsMounted(true);
70
80
  DeviceEventManagerModule.RCTDeviceEventEmitter eventEmitter = getReactApplicationContext().getJSModule(
71
81
  DeviceEventManagerModule.RCTDeviceEventEmitter.class
@@ -22,7 +22,28 @@ public class StallionApiConstants {
22
22
  public static final String STALLION_SDK_TOKEN_KEY = "x-sdk-pin-access-token";
23
23
  public static final String STALLION_DEVICE_ID_KEY = "uid";
24
24
 
25
+ /** Legacy global API host; used only to detect implicit defaults in prefs. */
26
+ public static final String LEGACY_DEFAULT_STALLION_API_BASE = "https://api.stalliontech.io";
25
27
 
26
- public static final String STALLION_API_BASE = "https://api.stalliontech.io";
28
+ public static final String REGIONAL_API_BASE_AP = "https://api-ap.stalliontech.io";
29
+ public static final String REGIONAL_API_BASE_US = "https://api-us.stalliontech.io";
30
+
31
+ /** @deprecated Use LEGACY_DEFAULT_STALLION_API_BASE or getStallionApiBase() */
32
+ @Deprecated
33
+ public static final String DEFAULT_STALLION_API_BASE = LEGACY_DEFAULT_STALLION_API_BASE;
34
+
35
+ /**
36
+ * Gets the API base URL from config or returns default
37
+ * @return String - The base URL to use
38
+ */
39
+ public static String getStallionApiBase() {
40
+ return com.stallion.utils.StallionApiBaseUrl.get();
41
+ }
42
+
43
+ // Keep old constant for backward compatibility, but mark as deprecated
44
+ /** @deprecated Use getStallionApiBase() instead */
45
+ @Deprecated
46
+ public static final String STALLION_API_BASE = DEFAULT_STALLION_API_BASE;
47
+
27
48
  public static final String STALLION_INFO_API_PATH = "/api/v1/promoted/get-update-meta";
28
49
  }
@@ -50,7 +50,7 @@ public class StallionSyncHandler {
50
50
 
51
51
  // Make API call using StallionApiManager
52
52
  JSONObject releaseMeta = StallionApiManager.post(
53
- StallionApiConstants.STALLION_API_BASE + StallionApiConstants.STALLION_INFO_API_PATH,
53
+ StallionApiConstants.getStallionApiBase() + StallionApiConstants.STALLION_INFO_API_PATH,
54
54
  requestPayload.toString()
55
55
  );
56
56
 
@@ -11,6 +11,9 @@ import org.json.JSONObject;
11
11
 
12
12
  import java.util.UUID;
13
13
 
14
+ import com.stallion.storage.StallionConfigConstants;
15
+ import com.stallion.utils.StallionApiBaseUrl;
16
+
14
17
  public class StallionConfig {
15
18
  private String uid;
16
19
  private final String projectId;
@@ -22,7 +25,7 @@ public class StallionConfig {
22
25
  private String lastDownloadingUrl;
23
26
  private String lastUnverifiedHash;
24
27
  private final String publicSigningKey;
25
-
28
+ private String baseUrl;
26
29
 
27
30
  public StallionConfig(Context context, SharedPreferences sharedPreferences) {
28
31
  this.sharedPreferences = sharedPreferences;
@@ -77,6 +80,8 @@ public class StallionConfig {
77
80
  this.filesDirectory = context.getFilesDir().getAbsolutePath();
78
81
  this.lastDownloadingUrl = sharedPreferences.getString(StallionConfigConstants.LAST_DOWNLOADING_URL_IDENTIFIER, "");
79
82
  this.lastUnverifiedHash = sharedPreferences.getString(StallionConfigConstants.LAST_UNVERIFIED_HASH, "");
83
+ String storedBaseUrl = sharedPreferences.getString(StallionConfigConstants.BASE_URL_IDENTIFIER, "");
84
+ this.baseUrl = storedBaseUrl != null ? storedBaseUrl : "";
80
85
  }
81
86
 
82
87
  public String getLastDownloadingUrl() {
@@ -143,6 +148,23 @@ public class StallionConfig {
143
148
  return this.publicSigningKey;
144
149
  }
145
150
 
151
+ public String getBaseUrl() {
152
+ return this.baseUrl;
153
+ }
154
+
155
+ public void setBaseUrl(String baseUrl) {
156
+ if (baseUrl == null || baseUrl.isEmpty()) {
157
+ this.baseUrl = "";
158
+ sharedPreferences.edit().remove(StallionConfigConstants.BASE_URL_IDENTIFIER).apply();
159
+ return;
160
+ }
161
+ this.baseUrl = baseUrl;
162
+ sharedPreferences
163
+ .edit()
164
+ .putString(StallionConfigConstants.BASE_URL_IDENTIFIER, this.baseUrl)
165
+ .apply();
166
+ }
167
+
146
168
  public JSONObject toJSON() {
147
169
  JSONObject configJson = new JSONObject();
148
170
  try {
@@ -151,6 +173,7 @@ public class StallionConfig {
151
173
  configJson.put("appToken", this.appToken);
152
174
  configJson.put("sdkToken", this.sdkToken);
153
175
  configJson.put("appVersion", this.appVersion);
176
+ configJson.put("baseUrl", StallionApiBaseUrl.get());
154
177
  return configJson;
155
178
  } catch (JSONException ignored) {
156
179
  return new JSONObject();
@@ -12,6 +12,7 @@ public class StallionConfigConstants {
12
12
  public static final String API_KEY_IDENTIFIER = "x-sdk-access-token";
13
13
  public static final String LAST_DOWNLOADING_URL_IDENTIFIER = "StallionLastDownloadingUrl";
14
14
  public static final String LAST_UNVERIFIED_HASH = "LastUnverifiedHash";
15
+ public static final String BASE_URL_IDENTIFIER = "StallionBaseUrl";
15
16
 
16
17
  public static final String PROD_DIRECTORY = "/StallionProd";
17
18
  public static final String STAGE_DIRECTORY = "/StallionStage";
@@ -0,0 +1,59 @@
1
+ package com.stallion.utils;
2
+
3
+ import com.stallion.storage.StallionConfig;
4
+ import com.stallion.storage.StallionStateManager;
5
+ import com.stallion.networkmanager.StallionApiConstants;
6
+
7
+ public class StallionApiBaseUrl {
8
+
9
+ /**
10
+ * Gets the API base URL: custom baseUrl if set, else regional URL from app token.
11
+ * @return String - The base URL to use
12
+ */
13
+ public static String get() {
14
+ try {
15
+ StallionStateManager stateManager = StallionStateManager.getInstance();
16
+ if (stateManager != null && stateManager.getStallionConfig() != null) {
17
+ return resolve(stateManager.getStallionConfig());
18
+ }
19
+ } catch (Exception e) {
20
+ // Fallback to regional default on any error
21
+ }
22
+ return StallionApiConstants.REGIONAL_API_BASE_AP;
23
+ }
24
+
25
+ static String resolve(StallionConfig config) {
26
+ String stored = config.getBaseUrl();
27
+ if (stored != null && !stored.isEmpty()) {
28
+ return stored;
29
+ }
30
+
31
+ String region = StallionTokenRegion.parseTokenRegion(config.getAppToken());
32
+ if (region == null) {
33
+ region = StallionTokenRegion.defaultRegion();
34
+ }
35
+ return regionalBaseUrl(region);
36
+ }
37
+
38
+ static String regionalBaseUrl(String region) {
39
+ if ("us".equals(region)) {
40
+ return StallionApiConstants.REGIONAL_API_BASE_US;
41
+ }
42
+ return StallionApiConstants.REGIONAL_API_BASE_AP;
43
+ }
44
+
45
+ /**
46
+ * Sets a custom base URL, or clears it when null/empty.
47
+ * @param baseUrl - The custom base URL to set, or null/empty to clear
48
+ */
49
+ public static void set(String baseUrl) {
50
+ try {
51
+ StallionStateManager stateManager = StallionStateManager.getInstance();
52
+ if (stateManager != null && stateManager.getStallionConfig() != null) {
53
+ stateManager.getStallionConfig().setBaseUrl(baseUrl);
54
+ }
55
+ } catch (Exception e) {
56
+ // Silently fail
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,51 @@
1
+ package com.stallion.utils;
2
+
3
+ import java.util.Arrays;
4
+ import java.util.HashSet;
5
+ import java.util.Locale;
6
+ import java.util.Set;
7
+
8
+ public final class StallionTokenRegion {
9
+
10
+ private static final Set<String> VALID_REGIONS = new HashSet<>(Arrays.asList("ap", "us"));
11
+
12
+ private StallionTokenRegion() {}
13
+
14
+ /**
15
+ * Parses the region prefix from a Stallion token.
16
+ * Returns "ap", "us", or null. Null means legacy unprefixed token; caller should default to "ap".
17
+ */
18
+ public static String parseTokenRegion(String token) {
19
+ if (token == null) {
20
+ return null;
21
+ }
22
+ token = token.trim();
23
+ if (token.isEmpty()) {
24
+ return null;
25
+ }
26
+
27
+ // App token: spb_<region>_<44-char nanoid> → 49 chars
28
+ if (token.startsWith("spb_") && token.length() == 49 && token.charAt(6) == '_') {
29
+ return extractRegion(token);
30
+ }
31
+
32
+ // CI token: stl_<region>_<36-char nanoid> → 43 chars
33
+ if (token.startsWith("stl_") && token.length() == 43 && token.charAt(6) == '_') {
34
+ return extractRegion(token);
35
+ }
36
+
37
+ return null;
38
+ }
39
+
40
+ public static String defaultRegion() {
41
+ return "ap";
42
+ }
43
+
44
+ private static String extractRegion(String token) {
45
+ String code = token.substring(4, 6).toLowerCase(Locale.ROOT);
46
+ if (!code.matches("[a-z]{2}")) {
47
+ return null;
48
+ }
49
+ return VALID_REGIONS.contains(code) ? code : null;
50
+ }
51
+ }
@@ -28,6 +28,17 @@ class Stallion: RCTEventEmitter {
28
28
  }
29
29
 
30
30
  @objc func onLaunch(_ launchData: String) {
31
+ var customBaseUrl = ""
32
+ if !launchData.isEmpty,
33
+ let data = launchData.data(using: .utf8),
34
+ let params = try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any],
35
+ params.keys.contains("baseUrl"),
36
+ let baseUrl = params["baseUrl"] as? String,
37
+ !baseUrl.isEmpty {
38
+ customBaseUrl = baseUrl
39
+ }
40
+ StallionApiBaseUrl.set(customBaseUrl)
41
+
31
42
  stallionStateManager.isMounted = true
32
43
  checkPendingDownloads()
33
44
  let currentReleaseHash = stallionStateManager.stallionMeta.getHashAtCurrentProdSlot()
@@ -61,7 +72,9 @@ class Stallion: RCTEventEmitter {
61
72
  @objc func getStallionConfig(_ promise: RCTPromiseResolveBlock, rejecter: RCTPromiseRejectBlock) {
62
73
  do {
63
74
  if let config = stallionStateManager.stallionConfig {
64
- let configJsonData = try JSONSerialization.data(withJSONObject: config.toDictionary(), options: [])
75
+ var configDict = config.toDictionary() as? [String: Any] ?? [:]
76
+ configDict["baseUrl"] = StallionApiBaseUrl.get()
77
+ let configJsonData = try JSONSerialization.data(withJSONObject: configDict, options: [])
65
78
  if let configJsonString = String(data: configJsonData, encoding: .utf8) {
66
79
  promise(configJsonString)
67
80
  } else {
@@ -0,0 +1,51 @@
1
+ //
2
+ // StallionApiBaseUrl.swift
3
+ // react-native-stallion
4
+ //
5
+ // Created for centralized base URL management
6
+ //
7
+
8
+ import Foundation
9
+
10
+ class StallionApiBaseUrl {
11
+ /**
12
+ * Gets the API base URL: custom baseUrl if set, else regional URL from app token.
13
+ */
14
+ static func get() -> String {
15
+ guard let stateManager = StallionStateManager.sharedInstance() else {
16
+ return StallionConstants.REGIONAL_API_BASE_AP
17
+ }
18
+
19
+ return resolve(config: stateManager.stallionConfig)
20
+ }
21
+
22
+ static func resolve(config: StallionConfig) -> String {
23
+ let stored = config.baseUrl ?? ""
24
+ if !stored.isEmpty {
25
+ return stored
26
+ }
27
+
28
+ var region = StallionTokenRegion.parseTokenRegion(config.appToken)
29
+ if region == nil {
30
+ region = StallionTokenRegion.defaultRegion()
31
+ }
32
+ return regionalBaseUrl(region!)
33
+ }
34
+
35
+ static func regionalBaseUrl(_ region: String) -> String {
36
+ if region == "us" {
37
+ return StallionConstants.REGIONAL_API_BASE_US
38
+ }
39
+ return StallionConstants.REGIONAL_API_BASE_AP
40
+ }
41
+
42
+ /**
43
+ * Sets a custom base URL, or clears it when empty.
44
+ */
45
+ static func set(_ baseUrl: String) {
46
+ guard let stateManager = StallionStateManager.sharedInstance() else {
47
+ return
48
+ }
49
+ stateManager.stallionConfig.updateBaseUrl(baseUrl)
50
+ }
51
+ }
@@ -17,11 +17,13 @@
17
17
  @property (nonatomic, copy, readonly) NSString *filesDirectory;
18
18
  @property (nonatomic, copy, readonly) NSString *publicSigningKey;
19
19
  @property (nonatomic, copy) NSString *lastUnverifiedHash;
20
+ @property (nonatomic, copy) NSString *baseUrl;
20
21
 
21
22
  - (instancetype)initWithDefaults:(NSUserDefaults *)defaults;
22
23
 
23
24
  - (void)updateSdkToken:(NSString *)newSdkToken;
24
25
  - (void)updateLastUnverifiedHash:(NSString *)newUnverifiedHash;
26
+ - (void)updateBaseUrl:(NSString *)newBaseUrl;
25
27
  - (NSDictionary *)toDictionary;
26
28
 
27
29
  @end
@@ -7,6 +7,7 @@
7
7
 
8
8
  #import "StallionConfig.h"
9
9
  #import "StallionConfigConstants.h"
10
+ #import "StallionObjConstants.h"
10
11
 
11
12
  @implementation StallionConfig
12
13
 
@@ -20,6 +21,7 @@
20
21
  _filesDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject ?: @"";
21
22
  _publicSigningKey = [[NSBundle mainBundle] objectForInfoDictionaryKey:STALLION_PUBLIC_SIGNING_KEY_IDENTIFIER] ?: @"";
22
23
  _lastUnverifiedHash = [defaults stringForKey:LAST_UNVERIFIED_KEY_IDENTIFIER] ?: @"";
24
+ _baseUrl = [defaults stringForKey:BASE_URL_IDENTIFIER] ?: @"";
23
25
 
24
26
  NSString *cachedUid = [defaults stringForKey:UNIQUE_ID_IDENTIFIER];
25
27
  if (cachedUid && ![cachedUid isEqualToString:@""]) {
@@ -51,6 +53,17 @@
51
53
  [[NSUserDefaults standardUserDefaults] synchronize];
52
54
  }
53
55
 
56
+ - (void)updateBaseUrl:(NSString *)newBaseUrl {
57
+ if (newBaseUrl == nil || [newBaseUrl length] == 0) {
58
+ _baseUrl = @"";
59
+ [[NSUserDefaults standardUserDefaults] removeObjectForKey:BASE_URL_IDENTIFIER];
60
+ } else {
61
+ _baseUrl = newBaseUrl;
62
+ [[NSUserDefaults standardUserDefaults] setObject:_baseUrl forKey:BASE_URL_IDENTIFIER];
63
+ }
64
+ [[NSUserDefaults standardUserDefaults] synchronize];
65
+ }
66
+
54
67
  - (NSDictionary *)toDictionary {
55
68
  @try {
56
69
  return @{
@@ -58,7 +71,8 @@
58
71
  @"projectId": self.projectId ?: @"",
59
72
  @"appToken": self.appToken ?: @"",
60
73
  @"sdkToken": self.sdkToken ?: @"",
61
- @"appVersion": self.appVersion ?: @""
74
+ @"appVersion": self.appVersion ?: @"",
75
+ @"baseUrl": self.baseUrl ?: @""
62
76
  };
63
77
  } @catch (NSException *exception) {
64
78
  NSLog(@"Error in toDictionary: %@", exception.reason);
@@ -32,5 +32,6 @@ extern NSString *const STALLION_META_IDENTIFIER;
32
32
  extern NSString *const STALLION_PUBLIC_SIGNING_KEY_IDENTIFIER;
33
33
 
34
34
  extern NSString *const LAST_UNVERIFIED_KEY_IDENTIFIER;
35
+ extern NSString *const BASE_URL_IDENTIFIER;
35
36
 
36
37
  @end
@@ -32,5 +32,6 @@ NSString *const UNZIP_FOLDER_NAME = @"/build";
32
32
  NSString *const STALLION_PUBLIC_SIGNING_KEY_IDENTIFIER = @"StallionPublicSigningKey";
33
33
 
34
34
  NSString *const LAST_UNVERIFIED_KEY_IDENTIFIER = @"LastUnverifiedHash";
35
+ NSString *const BASE_URL_IDENTIFIER = @"StallionBaseUrl";
35
36
 
36
37
  @end
@@ -45,7 +45,16 @@ class StallionConstants {
45
45
 
46
46
  static let CURRENT_PROD_SLOT_KEY = "stallionProdCurrentSlot"
47
47
  static let CURRENT_STAGE_SLOT_KEY = "stallionStageCurrentSlot"
48
- static let STALLION_API_BASE = "https://api.stalliontech.io"
48
+ // Use utility for base URL (returns custom or default)
49
+ static var STALLION_API_BASE: String {
50
+ return StallionApiBaseUrl.get()
51
+ }
52
+ /// Legacy global API host; used only to detect implicit defaults in prefs.
53
+ static let LEGACY_DEFAULT_STALLION_API_BASE = "https://api.stalliontech.io"
54
+ static let REGIONAL_API_BASE_AP = "https://api-ap.stalliontech.io"
55
+ static let REGIONAL_API_BASE_US = "https://api-us.stalliontech.io"
56
+ /// @deprecated Use LEGACY_DEFAULT_STALLION_API_BASE or StallionApiBaseUrl.get()
57
+ static let DEFAULT_STALLION_API_BASE = LEGACY_DEFAULT_STALLION_API_BASE
49
58
  static let STALLION_INFO_API_PATH = "/api/v1/promoted/get-update-meta"
50
59
  static let STALLION_PROJECT_ID_IDENTIFIER = "StallionProjectId"
51
60
  static let STALLION_APP_TOKEN_IDENTIFIER = "StallionAppToken"
@@ -45,5 +45,6 @@
45
45
  @property (class, nonatomic, readonly) NSString *last_rolled_back_release_hash_key;
46
46
  @property (class, nonatomic, readonly) NSString *auto_rolled_back_prod_event;
47
47
  @property (class, nonatomic, readonly) NSString *is_auto_rollback_key;
48
+ @property (class, nonatomic, readonly) NSString *default_stallion_api_base;
48
49
 
49
50
  @end
@@ -129,4 +129,8 @@
129
129
  return @"LAST_ROLLED_BACK_RELEASE_HASH";
130
130
  }
131
131
 
132
+ + (NSString *)default_stallion_api_base {
133
+ return @"https://api.stalliontech.io";
134
+ }
135
+
132
136
  @end
@@ -0,0 +1,44 @@
1
+ //
2
+ // StallionTokenRegion.swift
3
+ // react-native-stallion
4
+ //
5
+
6
+ import Foundation
7
+
8
+ enum StallionTokenRegion {
9
+ private static let validRegions: Set<String> = ["ap", "us"]
10
+
11
+ /// Parses the region prefix from a Stallion token.
12
+ /// Returns "ap", "us", or nil. Nil means legacy unprefixed token; caller should default to "ap".
13
+ static func parseTokenRegion(_ token: String?) -> String? {
14
+ guard let token = token?.trimmingCharacters(in: .whitespacesAndNewlines), !token.isEmpty else {
15
+ return nil
16
+ }
17
+
18
+ // App token: spb_<region>_<44-char nanoid> → 49 chars
19
+ if token.hasPrefix("spb_"), token.count == 49, token[token.index(token.startIndex, offsetBy: 6)] == "_" {
20
+ return extractRegion(from: token)
21
+ }
22
+
23
+ // CI token: stl_<region>_<36-char nanoid> → 43 chars
24
+ if token.hasPrefix("stl_"), token.count == 43, token[token.index(token.startIndex, offsetBy: 6)] == "_" {
25
+ return extractRegion(from: token)
26
+ }
27
+
28
+ return nil
29
+ }
30
+
31
+ static func defaultRegion() -> String {
32
+ return "ap"
33
+ }
34
+
35
+ private static func extractRegion(from token: String) -> String? {
36
+ let start = token.index(token.startIndex, offsetBy: 4)
37
+ let end = token.index(token.startIndex, offsetBy: 6)
38
+ let code = String(token[start..<end]).lowercased()
39
+ guard code.range(of: "^[a-z]{2}$", options: .regularExpression) != nil else {
40
+ return nil
41
+ }
42
+ return validRegions.contains(code) ? code : nil
43
+ }
44
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-stallion",
3
- "version": "2.4.0-alpha.6",
3
+ "version": "2.4.0-alpha.7",
4
4
  "description": "Offical React Native SDK for Stallion",
5
5
  "main": "index",
6
6
  "types": "types/index.d.ts",
@@ -1 +1 @@
1
- {"version":3,"names":["StyleSheet","View","React","SLOT_STATES","NATIVE_CONSTANTS","STD_MARGIN","COLORS","getSlotColor","slot","DEFAULT_FOLDER_SLOT","STABLE_FOLDER_SLOT","NEW_FOLDER_SLOT","indigo","TEMP_FOLDER_SLOT","green","StallionSlot","_ref","isActive","createElement","style","styles","slotItem","backgroundColor","borderWidth","SlotView","props","currentSlot","tempHash","stableHash","newHash","activeSlot","parentContainer","rowContainer","hash","DEFAULT","STABLE","NEW","create","justifyContent","alignItems","flexDirection","width","paddingRight","paddingVertical","white","flex","height","marginLeft","borderRadius"],"sourceRoot":"../../../../../../../src","sources":["main/components/modules/listing/components/SlotView.tsx"],"mappings":"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"}
1
+ {"version":3,"names":["StyleSheet","View","React","SLOT_STATES","NATIVE_CONSTANTS","STD_MARGIN","COLORS","getSlotColor","slot","DEFAULT_FOLDER_SLOT","STABLE_FOLDER_SLOT","NEW_FOLDER_SLOT","indigo","TEMP_FOLDER_SLOT","green","StallionSlot","_ref","isActive","createElement","style","styles","slotItem","backgroundColor","borderWidth","SlotView","props","currentSlot","tempHash","stableHash","newHash","activeSlot","parentContainer","rowContainer","hash","DEFAULT","STABLE","NEW","create","justifyContent","alignItems","flexDirection","width","paddingRight","paddingVertical","white","flex","height","marginLeft","borderRadius"],"sourceRoot":"../../../../../../../src","sources":["main/components/modules/listing/components/SlotView.tsx"],"mappings":"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"}
@@ -1,4 +1,8 @@
1
- export const API_BASE_URL = 'https://api.stalliontech.io';
1
+ import { DEFAULT_API_BASE_URL } from '../utils/getApiBaseUrl';
2
+
3
+ // Keep for backward compatibility, but mark as deprecated
4
+ /** @deprecated Use getApiBaseUrl() instead */
5
+ export const API_BASE_URL = DEFAULT_API_BASE_URL;
2
6
  export let API_PATHS = /*#__PURE__*/function (API_PATHS) {
3
7
  API_PATHS["LOGIN"] = "/api/v1/sdk/auth/verify-pin";
4
8
  API_PATHS["VERIFY_OTP"] = "/api/v1/auth/verify-otp";
@@ -1 +1 @@
1
- {"version":3,"names":["API_BASE_URL","API_PATHS","BUNDLE_API_PAGE_SIZE"],"sourceRoot":"../../../../src","sources":["main/constants/apiConstants.ts"],"mappings":"AAAA,OAAO,MAAMA,YAAY,GAAG,6BAA6B;AAEzD,WAAYC,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA;AAUrB,OAAO,MAAMC,oBAAoB,GAAG,EAAE"}
1
+ {"version":3,"names":["DEFAULT_API_BASE_URL","API_BASE_URL","API_PATHS","BUNDLE_API_PAGE_SIZE"],"sourceRoot":"../../../../src","sources":["main/constants/apiConstants.ts"],"mappings":"AAAA,SAASA,oBAAoB,QAAQ,wBAAwB;;AAE7D;AACA;AACA,OAAO,MAAMC,YAAY,GAAGD,oBAAoB;AAEhD,WAAYE,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA;AAUrB,OAAO,MAAMC,oBAAoB,GAAG,EAAE"}
@@ -1,11 +1,14 @@
1
1
  import { useCallback, useEffect } from 'react';
2
2
  import { getStallionConfigNative } from '../../utils/StallionNativeUtils';
3
+ import { clearApiBaseUrlCache } from '../../utils/getApiBaseUrl';
3
4
  import { setConfig } from '../actions/configActions';
4
5
  const useConfigActions = dispatch => {
5
6
  const refreshConfig = useCallback(async () => {
6
7
  try {
7
8
  const stallionConfig = await getStallionConfigNative();
8
9
  dispatch(setConfig(stallionConfig));
10
+ // Clear base URL cache when config is refreshed to pick up any baseUrl changes
11
+ clearApiBaseUrlCache();
9
12
  } catch (_) {}
10
13
  }, [dispatch]);
11
14
  useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","getStallionConfigNative","setConfig","useConfigActions","dispatch","refreshConfig","stallionConfig","_"],"sourceRoot":"../../../../../src","sources":["main/state/actionCreators/useConfigActions.ts"],"mappings":"AAAA,SAAgBA,WAAW,EAAEC,SAAS,QAAQ,OAAO;AAErD,SAASC,uBAAuB,QAAQ,iCAAiC;AAGzE,SAASC,SAAS,QAAQ,0BAA0B;AAEpD,MAAMC,gBAAgB,GAAIC,QAAuC,IAAK;EACpE,MAAMC,aAAa,GAAGN,WAAW,CAAC,YAAY;IAC5C,IAAI;MACF,MAAMO,cAAc,GAAG,MAAML,uBAAuB,CAAC,CAAC;MACtDG,QAAQ,CAACF,SAAS,CAACI,cAAc,CAAC,CAAC;IACrC,CAAC,CAAC,OAAOC,CAAC,EAAE,CAAC;EACf,CAAC,EAAE,CAACH,QAAQ,CAAC,CAAC;EAEdJ,SAAS,CAAC,MAAM;IACdK,aAAa,CAAC,CAAC;IACf;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLA;EACF,CAAC;AACH,CAAC;AAED,eAAeF,gBAAgB"}
1
+ {"version":3,"names":["useCallback","useEffect","getStallionConfigNative","clearApiBaseUrlCache","setConfig","useConfigActions","dispatch","refreshConfig","stallionConfig","_"],"sourceRoot":"../../../../../src","sources":["main/state/actionCreators/useConfigActions.ts"],"mappings":"AAAA,SAAgBA,WAAW,EAAEC,SAAS,QAAQ,OAAO;AAErD,SAASC,uBAAuB,QAAQ,iCAAiC;AACzE,SAASC,oBAAoB,QAAQ,2BAA2B;AAGhE,SAASC,SAAS,QAAQ,0BAA0B;AAEpD,MAAMC,gBAAgB,GAAIC,QAAuC,IAAK;EACpE,MAAMC,aAAa,GAAGP,WAAW,CAAC,YAAY;IAC5C,IAAI;MACF,MAAMQ,cAAc,GAAG,MAAMN,uBAAuB,CAAC,CAAC;MACtDI,QAAQ,CAACF,SAAS,CAACI,cAAc,CAAC,CAAC;MACnC;MACAL,oBAAoB,CAAC,CAAC;IACxB,CAAC,CAAC,OAAOM,CAAC,EAAE,CAAC;EACf,CAAC,EAAE,CAACH,QAAQ,CAAC,CAAC;EAEdL,SAAS,CAAC,MAAM;IACdM,aAAa,CAAC,CAAC;IACf;EACF,CAAC,EAAE,EAAE,CAAC;EAEN,OAAO;IACLA;EACF,CAAC;AACH,CAAC;AAED,eAAeF,gBAAgB"}
@@ -8,6 +8,7 @@ import StallionNativeModule from '../../StallionNativeModule';
8
8
  import { useApiClient } from '../utils/useApiClient';
9
9
  import { API_PATHS } from '../constants/apiConstants';
10
10
  import debounce from '../utils/debounce';
11
+ import { clearApiBaseUrlCache } from '../utils/getApiBaseUrl';
11
12
  import { UpdateMetaActionKind } from '../../types/updateMeta.types';
12
13
  const REFRESH_META_EVENTS = {
13
14
  [NativeEventTypesProd.DOWNLOAD_COMPLETE_PROD]: true,
@@ -109,6 +110,7 @@ export const useStallionEvents = (refreshMeta, setProgress, configState, updateM
109
110
  console.warn('React Native Stallion: Skipping onLaunchNative due to JS crash');
110
111
  return;
111
112
  }
113
+ clearApiBaseUrlCache();
112
114
  if (stallionInitParams) {
113
115
  try {
114
116
  onLaunchNative(JSON.stringify(stallionInitParams));
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useCallback","useMemo","NativeEventEmitter","NativeEventTypesProd","STALLION_NATIVE_EVENT","NativeEventTypesStage","DEFAULT_STALLION_PARAMS","stallionEventEmitter","acknowledgeEventsNative","onLaunchNative","popEventsNative","hasCrashOccurredCheck","StallionNativeModule","useApiClient","API_PATHS","debounce","UpdateMetaActionKind","REFRESH_META_EVENTS","DOWNLOAD_COMPLETE_PROD","ROLLED_BACK_PROD","AUTO_ROLLED_BACK_PROD","STABILIZED_PROD","DOWNLOAD_COMPLETE_STAGE","DOWNLOAD_ERROR_STAGE","INSTALLED_STAGE","STALLION_EVENT_DEBOUNCE_INTERVAL","processStallionEvent","eventString","JSON","parse","_","useStallionEvents","refreshMeta","setProgress","configState","updateMetaDispatch","stallionInitParams","getData","syncStallionEvents","stallionEvents","projectId","LOG_EVENTS","eventData","then","res","success","eventIds","map","event","eventId","eventIdString","stringify","popEvents","eventsString","eventsArr","length","requestAnimationFrame","popEventsDebounced","eventEmitter","addListener","nativeEventString","eventType","type","DOWNLOAD_STARTED_PROD","SET_PENDING_RELEASE_HASH","payload","releaseHash","emit","DOWNLOAD_PROGRESS_PROD","DOWNLOAD_ERROR_PROD","INSTALLED_PROD","SYNC_ERROR_PROD","EXCEPTION_PROD","DOWNLOAD_PROGRESS_STAGE","progress","Number","removeAllListeners","setTimeout","console","warn","Error"],"sourceRoot":"../../../../src","sources":["main/state/useStallionEvents.ts"],"mappings":"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"}
1
+ {"version":3,"names":["useEffect","useCallback","useMemo","NativeEventEmitter","NativeEventTypesProd","STALLION_NATIVE_EVENT","NativeEventTypesStage","DEFAULT_STALLION_PARAMS","stallionEventEmitter","acknowledgeEventsNative","onLaunchNative","popEventsNative","hasCrashOccurredCheck","StallionNativeModule","useApiClient","API_PATHS","debounce","clearApiBaseUrlCache","UpdateMetaActionKind","REFRESH_META_EVENTS","DOWNLOAD_COMPLETE_PROD","ROLLED_BACK_PROD","AUTO_ROLLED_BACK_PROD","STABILIZED_PROD","DOWNLOAD_COMPLETE_STAGE","DOWNLOAD_ERROR_STAGE","INSTALLED_STAGE","STALLION_EVENT_DEBOUNCE_INTERVAL","processStallionEvent","eventString","JSON","parse","_","useStallionEvents","refreshMeta","setProgress","configState","updateMetaDispatch","stallionInitParams","getData","syncStallionEvents","stallionEvents","projectId","LOG_EVENTS","eventData","then","res","success","eventIds","map","event","eventId","eventIdString","stringify","popEvents","eventsString","eventsArr","length","requestAnimationFrame","popEventsDebounced","eventEmitter","addListener","nativeEventString","eventType","type","DOWNLOAD_STARTED_PROD","SET_PENDING_RELEASE_HASH","payload","releaseHash","emit","DOWNLOAD_PROGRESS_PROD","DOWNLOAD_ERROR_PROD","INSTALLED_PROD","SYNC_ERROR_PROD","EXCEPTION_PROD","DOWNLOAD_PROGRESS_STAGE","progress","Number","removeAllListeners","setTimeout","console","warn","Error"],"sourceRoot":"../../../../src","sources":["main/state/useStallionEvents.ts"],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { getStallionConfigNative } from './StallionNativeUtils';
2
+ import { AP_ORIGIN, parseTokenRegion, regionalApiBaseUrl } from './parseTokenRegion';
3
+ export const DEFAULT_API_BASE_URL = AP_ORIGIN;
4
+ export const LEGACY_API_BASE_URL = 'https://api.stalliontech.io';
5
+
6
+ // Cache for base URL
7
+ let cachedBaseUrl = null;
8
+
9
+ /**
10
+ * Gets the API base URL from native config or returns regional default
11
+ * @returns Promise<string> - The base URL to use
12
+ */
13
+ export const getApiBaseUrl = async () => {
14
+ if (cachedBaseUrl) {
15
+ return cachedBaseUrl;
16
+ }
17
+ try {
18
+ const config = await getStallionConfigNative();
19
+ if (config.baseUrl) {
20
+ cachedBaseUrl = config.baseUrl;
21
+ return cachedBaseUrl;
22
+ }
23
+ const region = parseTokenRegion(config.appToken);
24
+ cachedBaseUrl = regionalApiBaseUrl(region);
25
+ return cachedBaseUrl;
26
+ } catch {
27
+ return DEFAULT_API_BASE_URL;
28
+ }
29
+ };
30
+
31
+ /**
32
+ * Gets the API base URL synchronously (returns default if not cached)
33
+ * Use this when you need immediate access and can't await
34
+ * @returns string - The base URL (default if not loaded yet)
35
+ */
36
+ export const getApiBaseUrlSync = () => {
37
+ return cachedBaseUrl || DEFAULT_API_BASE_URL;
38
+ };
39
+
40
+ /**
41
+ * Clears the cached base URL (useful for testing or config changes)
42
+ */
43
+ export const clearApiBaseUrlCache = () => {
44
+ cachedBaseUrl = null;
45
+ };
46
+ //# sourceMappingURL=getApiBaseUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["getStallionConfigNative","AP_ORIGIN","parseTokenRegion","regionalApiBaseUrl","DEFAULT_API_BASE_URL","LEGACY_API_BASE_URL","cachedBaseUrl","getApiBaseUrl","config","baseUrl","region","appToken","getApiBaseUrlSync","clearApiBaseUrlCache"],"sourceRoot":"../../../../src","sources":["main/utils/getApiBaseUrl.ts"],"mappings":"AAAA,SAASA,uBAAuB,QAAQ,uBAAuB;AAC/D,SACEC,SAAS,EACTC,gBAAgB,EAChBC,kBAAkB,QACb,oBAAoB;AAE3B,OAAO,MAAMC,oBAAoB,GAAGH,SAAS;AAC7C,OAAO,MAAMI,mBAAmB,GAAG,6BAA6B;;AAEhE;AACA,IAAIC,aAA4B,GAAG,IAAI;;AAEvC;AACA;AACA;AACA;AACA,OAAO,MAAMC,aAAa,GAAG,MAAAA,CAAA,KAA6B;EACxD,IAAID,aAAa,EAAE;IACjB,OAAOA,aAAa;EACtB;EAEA,IAAI;IACF,MAAME,MAAM,GAAG,MAAMR,uBAAuB,CAAC,CAAC;IAC9C,IAAIQ,MAAM,CAACC,OAAO,EAAE;MAClBH,aAAa,GAAGE,MAAM,CAACC,OAAO;MAC9B,OAAOH,aAAa;IACtB;IACA,MAAMI,MAAM,GAAGR,gBAAgB,CAACM,MAAM,CAACG,QAAQ,CAAC;IAChDL,aAAa,GAAGH,kBAAkB,CAACO,MAAM,CAAC;IAC1C,OAAOJ,aAAa;EACtB,CAAC,CAAC,MAAM;IACN,OAAOF,oBAAoB;EAC7B;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMQ,iBAAiB,GAAGA,CAAA,KAAc;EAC7C,OAAON,aAAa,IAAIF,oBAAoB;AAC9C,CAAC;;AAED;AACA;AACA;AACA,OAAO,MAAMS,oBAAoB,GAAGA,CAAA,KAAY;EAC9CP,aAAa,GAAG,IAAI;AACtB,CAAC"}
@@ -0,0 +1,40 @@
1
+ const AP_ORIGIN = 'https://api-ap.stalliontech.io';
2
+ const US_ORIGIN = 'https://api-us.stalliontech.io';
3
+ const VALID_REGIONS = new Set(['ap', 'us']);
4
+ export { AP_ORIGIN, US_ORIGIN, VALID_REGIONS };
5
+
6
+ /**
7
+ * Parse the region prefix from a Stallion token.
8
+ * Returns 'ap' | 'us' | null. Null means legacy unprefixed token; default to 'ap'.
9
+ */
10
+ export function parseTokenRegion(token) {
11
+ if (typeof token !== 'string') {
12
+ return null;
13
+ }
14
+ const trimmed = token.trim();
15
+ if (!trimmed) {
16
+ return null;
17
+ }
18
+
19
+ // App token: spb_<region>_<44-char nanoid> → 49 chars
20
+ if (trimmed.startsWith('spb_') && trimmed.length === 49 && trimmed.charAt(6) === '_') {
21
+ return extractRegion(trimmed);
22
+ }
23
+
24
+ // CI token: stl_<region>_<36-char nanoid> → 43 chars
25
+ if (trimmed.startsWith('stl_') && trimmed.length === 43 && trimmed.charAt(6) === '_') {
26
+ return extractRegion(trimmed);
27
+ }
28
+ return null;
29
+ }
30
+ function extractRegion(token) {
31
+ const code = token.substring(4, 6).toLowerCase();
32
+ if (!/^[a-z]{2}$/.test(code)) {
33
+ return null;
34
+ }
35
+ return VALID_REGIONS.has(code) ? code : null;
36
+ }
37
+ export function regionalApiBaseUrl(region) {
38
+ return region === 'us' ? US_ORIGIN : AP_ORIGIN;
39
+ }
40
+ //# sourceMappingURL=parseTokenRegion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["AP_ORIGIN","US_ORIGIN","VALID_REGIONS","Set","parseTokenRegion","token","trimmed","trim","startsWith","length","charAt","extractRegion","code","substring","toLowerCase","test","has","regionalApiBaseUrl","region"],"sourceRoot":"../../../../src","sources":["main/utils/parseTokenRegion.ts"],"mappings":"AAAA,MAAMA,SAAS,GAAG,gCAAgC;AAClD,MAAMC,SAAS,GAAG,gCAAgC;AAElD,MAAMC,aAAa,GAAG,IAAIC,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAE3C,SAASH,SAAS,EAAEC,SAAS,EAAEC,aAAa;;AAE5C;AACA;AACA;AACA;AACA,OAAO,SAASE,gBAAgBA,CAACC,KAAc,EAAsB;EACnE,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE;IAC7B,OAAO,IAAI;EACb;EAEA,MAAMC,OAAO,GAAGD,KAAK,CAACE,IAAI,CAAC,CAAC;EAC5B,IAAI,CAACD,OAAO,EAAE;IACZ,OAAO,IAAI;EACb;;EAEA;EACA,IACEA,OAAO,CAACE,UAAU,CAAC,MAAM,CAAC,IAC1BF,OAAO,CAACG,MAAM,KAAK,EAAE,IACrBH,OAAO,CAACI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EACzB;IACA,OAAOC,aAAa,CAACL,OAAO,CAAC;EAC/B;;EAEA;EACA,IACEA,OAAO,CAACE,UAAU,CAAC,MAAM,CAAC,IAC1BF,OAAO,CAACG,MAAM,KAAK,EAAE,IACrBH,OAAO,CAACI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EACzB;IACA,OAAOC,aAAa,CAACL,OAAO,CAAC;EAC/B;EAEA,OAAO,IAAI;AACb;AAEA,SAASK,aAAaA,CAACN,KAAa,EAAsB;EACxD,MAAMO,IAAI,GAAGP,KAAK,CAACQ,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;EAChD,IAAI,CAAC,YAAY,CAACC,IAAI,CAACH,IAAI,CAAC,EAAE;IAC5B,OAAO,IAAI;EACb;EACA,OAAOV,aAAa,CAACc,GAAG,CAACJ,IAAI,CAAC,GAAIA,IAAI,GAAmB,IAAI;AAC/D;AAEA,OAAO,SAASK,kBAAkBA,CAACC,MAAqB,EAAU;EAChE,OAAOA,MAAM,KAAK,IAAI,GAAGjB,SAAS,GAAGD,SAAS;AAChD"}
@@ -1,8 +1,14 @@
1
- import { useCallback } from 'react';
2
- import { API_BASE_URL } from '../constants/apiConstants';
1
+ import { useCallback, useState, useEffect } from 'react';
2
+ import { getApiBaseUrl, DEFAULT_API_BASE_URL } from './getApiBaseUrl';
3
3
  export const useApiClient = (configState, authHandler) => {
4
+ const [baseUrl, setBaseUrl] = useState(DEFAULT_API_BASE_URL);
5
+
6
+ // Load base URL on mount
7
+ useEffect(() => {
8
+ getApiBaseUrl().then(setBaseUrl);
9
+ }, []);
4
10
  const getData = useCallback((apiPath, apiBody) => {
5
- const dataRequest = fetch(API_BASE_URL + apiPath, {
11
+ const dataRequest = fetch(baseUrl + apiPath, {
6
12
  method: 'POST',
7
13
  body: JSON.stringify(apiBody),
8
14
  headers: {
@@ -20,7 +26,7 @@ export const useApiClient = (configState, authHandler) => {
20
26
  return res.json();
21
27
  });
22
28
  } else return dataRequest.then(res => res.json());
23
- }, [configState, authHandler]);
29
+ }, [baseUrl, configState, authHandler]);
24
30
  return {
25
31
  getData
26
32
  };
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","API_BASE_URL","useApiClient","configState","authHandler","getData","apiPath","apiBody","dataRequest","fetch","method","body","JSON","stringify","headers","appToken","sdkToken","then","res","status","json"],"sourceRoot":"../../../../src","sources":["main/utils/useApiClient.ts"],"mappings":"AAAA,SAASA,WAAW,QAAQ,OAAO;AACnC,SAASC,YAAY,QAAmB,2BAA2B;AAKnE,OAAO,MAAMC,YAAY,GAAGA,CAC1BC,WAAgC,EAChCC,WAA0B,KACvB;EACH,MAAMC,OAAO,GAAGL,WAAW,CACzB,CAACM,OAAkB,EAAEC,OAAe,KAAmB;IACrD,MAAMC,WAAW,GAAGC,KAAK,CAACR,YAAY,GAAGK,OAAO,EAAE;MAChDI,MAAM,EAAE,MAAM;MACdC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACN,OAAO,CAAC;MAC7BO,OAAO,EAAE;QACP,QAAQ,EAAE,kBAAkB;QAC5B,cAAc,EAAE,kBAAkB;QAClC,aAAa,EAAEX,WAAW,CAACY,QAAQ,IAAI,EAAE;QACzC,wBAAwB,EAAEZ,WAAW,CAACa,QAAQ,IAAI;MACpD;IACF,CAAC,CAAC;IACF,IAAIZ,WAAW,EAAE;MACf,OAAOI,WAAW,CAACS,IAAI,CAAEC,GAAG,IAAK;QAC/B,IAAIA,GAAG,CAACC,MAAM,KAAK,GAAG,EAAE;UACtBf,WAAW,CAAC,IAAI,CAAC;QACnB;QACA,OAAOc,GAAG,CAACE,IAAI,CAAC,CAAC;MACnB,CAAC,CAAC;IACJ,CAAC,MAAM,OAAOZ,WAAW,CAACS,IAAI,CAAEC,GAAG,IAAKA,GAAG,CAACE,IAAI,CAAC,CAAC,CAAC;EACrD,CAAC,EACD,CAACjB,WAAW,EAAEC,WAAW,CAC3B,CAAC;EACD,OAAO;IACLC;EACF,CAAC;AACH,CAAC"}
1
+ {"version":3,"names":["useCallback","useState","useEffect","getApiBaseUrl","DEFAULT_API_BASE_URL","useApiClient","configState","authHandler","baseUrl","setBaseUrl","then","getData","apiPath","apiBody","dataRequest","fetch","method","body","JSON","stringify","headers","appToken","sdkToken","res","status","json"],"sourceRoot":"../../../../src","sources":["main/utils/useApiClient.ts"],"mappings":"AAAA,SAASA,WAAW,EAAEC,QAAQ,EAAEC,SAAS,QAAQ,OAAO;AACxD,SAASC,aAAa,EAAEC,oBAAoB,QAAQ,iBAAiB;AAMrE,OAAO,MAAMC,YAAY,GAAGA,CAC1BC,WAAgC,EAChCC,WAA0B,KACvB;EACH,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGR,QAAQ,CAASG,oBAAoB,CAAC;;EAEpE;EACAF,SAAS,CAAC,MAAM;IACdC,aAAa,CAAC,CAAC,CAACO,IAAI,CAACD,UAAU,CAAC;EAClC,CAAC,EAAE,EAAE,CAAC;EAEN,MAAME,OAAO,GAAGX,WAAW,CACzB,CAACY,OAAkB,EAAEC,OAAe,KAAmB;IACrD,MAAMC,WAAW,GAAGC,KAAK,CAACP,OAAO,GAAGI,OAAO,EAAE;MAC3CI,MAAM,EAAE,MAAM;MACdC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAACN,OAAO,CAAC;MAC7BO,OAAO,EAAE;QACP,QAAQ,EAAE,kBAAkB;QAC5B,cAAc,EAAE,kBAAkB;QAClC,aAAa,EAAEd,WAAW,CAACe,QAAQ,IAAI,EAAE;QACzC,wBAAwB,EAAEf,WAAW,CAACgB,QAAQ,IAAI;MACpD;IACF,CAAC,CAAC;IACF,IAAIf,WAAW,EAAE;MACf,OAAOO,WAAW,CAACJ,IAAI,CAAEa,GAAG,IAAK;QAC/B,IAAIA,GAAG,CAACC,MAAM,KAAK,GAAG,EAAE;UACtBjB,WAAW,CAAC,IAAI,CAAC;QACnB;QACA,OAAOgB,GAAG,CAACE,IAAI,CAAC,CAAC;MACnB,CAAC,CAAC;IACJ,CAAC,MAAM,OAAOX,WAAW,CAACJ,IAAI,CAAEa,GAAG,IAAKA,GAAG,CAACE,IAAI,CAAC,CAAC,CAAC;EACrD,CAAC,EACD,CAACjB,OAAO,EAAEF,WAAW,EAAEC,WAAW,CACpC,CAAC;EACD,OAAO;IACLI;EACF,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"names":["ConfigActionKind"],"sourceRoot":"../../../src","sources":["types/config.types.ts"],"mappings":"AAQA,WAAYA,gBAAgB,0BAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAA,OAAhBA,gBAAgB;AAAA"}
1
+ {"version":3,"names":["ConfigActionKind"],"sourceRoot":"../../../src","sources":["types/config.types.ts"],"mappings":"AASA,WAAYA,gBAAgB,0BAAhBA,gBAAgB;EAAhBA,gBAAgB;EAAA,OAAhBA,gBAAgB;AAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=parseTokenRegion.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseTokenRegion.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/parseTokenRegion.test.ts"],"names":[],"mappings":""}
@@ -1,4 +1,5 @@
1
- export declare const API_BASE_URL = "https://api.stalliontech.io";
1
+ /** @deprecated Use getApiBaseUrl() instead */
2
+ export declare const API_BASE_URL = "https://api-ap.stalliontech.io";
2
3
  export declare enum API_PATHS {
3
4
  LOGIN = "/api/v1/sdk/auth/verify-pin",
4
5
  VERIFY_OTP = "/api/v1/auth/verify-otp",
@@ -1 +1 @@
1
- {"version":3,"file":"apiConstants.d.ts","sourceRoot":"","sources":["../../../../src/main/constants/apiConstants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,gCAAgC,CAAC;AAE1D,oBAAY,SAAS;IACnB,KAAK,gCAAgC;IACrC,UAAU,4BAA4B;IACtC,aAAa,6BAA6B;IAC1C,aAAa,wBAAwB;IACrC,sBAAsB,6BAA6B;IACnD,YAAY,6BAA6B;IACzC,UAAU,sCAAsC;IAChD,kBAAkB,mCAAmC;CACtD;AACD,eAAO,MAAM,oBAAoB,KAAK,CAAC"}
1
+ {"version":3,"file":"apiConstants.d.ts","sourceRoot":"","sources":["../../../../src/main/constants/apiConstants.ts"],"names":[],"mappings":"AAGA,8CAA8C;AAC9C,eAAO,MAAM,YAAY,mCAAuB,CAAC;AAEjD,oBAAY,SAAS;IACnB,KAAK,gCAAgC;IACrC,UAAU,4BAA4B;IACtC,aAAa,6BAA6B;IAC1C,aAAa,wBAAwB;IACrC,sBAAsB,6BAA6B;IACnD,YAAY,6BAA6B;IACzC,UAAU,sCAAsC;IAChD,kBAAkB,mCAAmC;CACtD;AACD,eAAO,MAAM,oBAAoB,KAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useConfigActions.d.ts","sourceRoot":"","sources":["../../../../../src/main/state/actionCreators/useConfigActions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAiC,MAAM,OAAO,CAAC;AAItD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,QAAA,MAAM,gBAAgB,aAAc,MAAM,QAAQ,CAAC,aAAa,CAAC;;CAgBhE,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"useConfigActions.d.ts","sourceRoot":"","sources":["../../../../../src/main/state/actionCreators/useConfigActions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAiC,MAAM,OAAO,CAAC;AAKtD,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAG5D,QAAA,MAAM,gBAAgB,aAAc,MAAM,QAAQ,CAAC,aAAa,CAAC;;CAkBhE,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useStallionEvents.d.ts","sourceRoot":"","sources":["../../../../src/main/state/useStallionEvents.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EAEpB,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AASnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAI/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EACL,iBAAiB,EAElB,MAAM,8BAA8B,CAAC;AActC,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,oBAAoB,GAAG,qBAAqB,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAcD,eAAO,MAAM,iBAAiB,gBACf,MAAM,QAAQ,IAAI,CAAC,6BACL,MAAM,KAAK,IAAI,eAC7B,mBAAmB,sBACZ,MAAM,QAAQ,CAAC,iBAAiB,CAAC,uBAChC,mBAAmB,SAkHzC,CAAC"}
1
+ {"version":3,"file":"useStallionEvents.d.ts","sourceRoot":"","sources":["../../../../src/main/state/useStallionEvents.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,oBAAoB,EAEpB,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AASnC,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAI/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EACL,iBAAiB,EAElB,MAAM,8BAA8B,CAAC;AActC,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,oBAAoB,GAAG,qBAAqB,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAcD,eAAO,MAAM,iBAAiB,gBACf,MAAM,QAAQ,IAAI,CAAC,6BACL,MAAM,KAAK,IAAI,eAC7B,mBAAmB,sBACZ,MAAM,QAAQ,CAAC,iBAAiB,CAAC,uBAChC,mBAAmB,SAmHzC,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare const DEFAULT_API_BASE_URL = "https://api-ap.stalliontech.io";
2
+ export declare const LEGACY_API_BASE_URL = "https://api.stalliontech.io";
3
+ /**
4
+ * Gets the API base URL from native config or returns regional default
5
+ * @returns Promise<string> - The base URL to use
6
+ */
7
+ export declare const getApiBaseUrl: () => Promise<string>;
8
+ /**
9
+ * Gets the API base URL synchronously (returns default if not cached)
10
+ * Use this when you need immediate access and can't await
11
+ * @returns string - The base URL (default if not loaded yet)
12
+ */
13
+ export declare const getApiBaseUrlSync: () => string;
14
+ /**
15
+ * Clears the cached base URL (useful for testing or config changes)
16
+ */
17
+ export declare const clearApiBaseUrlCache: () => void;
18
+ //# sourceMappingURL=getApiBaseUrl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getApiBaseUrl.d.ts","sourceRoot":"","sources":["../../../../src/main/utils/getApiBaseUrl.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,oBAAoB,mCAAY,CAAC;AAC9C,eAAO,MAAM,mBAAmB,gCAAgC,CAAC;AAKjE;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAa,QAAQ,MAAM,CAiBpD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAEpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,QAAO,IAEvC,CAAC"}
@@ -0,0 +1,11 @@
1
+ declare const AP_ORIGIN = "https://api-ap.stalliontech.io";
2
+ declare const US_ORIGIN = "https://api-us.stalliontech.io";
3
+ declare const VALID_REGIONS: Set<string>;
4
+ export { AP_ORIGIN, US_ORIGIN, VALID_REGIONS };
5
+ /**
6
+ * Parse the region prefix from a Stallion token.
7
+ * Returns 'ap' | 'us' | null. Null means legacy unprefixed token; default to 'ap'.
8
+ */
9
+ export declare function parseTokenRegion(token: unknown): 'ap' | 'us' | null;
10
+ export declare function regionalApiBaseUrl(region: string | null): string;
11
+ //# sourceMappingURL=parseTokenRegion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseTokenRegion.d.ts","sourceRoot":"","sources":["../../../../src/main/utils/parseTokenRegion.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,SAAS,mCAAmC,CAAC;AACnD,QAAA,MAAM,SAAS,mCAAmC,CAAC;AAEnD,QAAA,MAAM,aAAa,aAAwB,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CA6BnE;AAUD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAEhE"}
@@ -1 +1 @@
1
- {"version":3,"file":"useApiClient.d.ts","sourceRoot":"","sources":["../../../../src/main/utils/useApiClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,KAAK,YAAY,GAAG,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;AAErD,eAAO,MAAM,YAAY,gBACV,mBAAmB,gBAClB,YAAY;uBAGd,SAAS,WAAW,MAAM,KAAG,QAAQ,GAAG,CAAC;CAyBtD,CAAC"}
1
+ {"version":3,"file":"useApiClient.d.ts","sourceRoot":"","sources":["../../../../src/main/utils/useApiClient.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,KAAK,YAAY,GAAG,CAAC,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;AAErD,eAAO,MAAM,YAAY,gBACV,mBAAmB,gBAClB,YAAY;uBAUd,SAAS,WAAW,MAAM,KAAG,QAAQ,GAAG,CAAC;CAyBtD,CAAC"}
@@ -4,6 +4,7 @@ export interface IStallionConfigJson {
4
4
  appToken: string;
5
5
  sdkToken: string;
6
6
  appVersion: string;
7
+ baseUrl?: string;
7
8
  }
8
9
  export declare enum ConfigActionKind {
9
10
  SET_CONFIG = "SET_CONFIG"
@@ -1 +1 @@
1
- {"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../src/types/config.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,oBAAY,gBAAgB;IAC1B,UAAU,eAAe;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,gBAAgB,CAAC,UAAU,CAAC;IAClC,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC"}
1
+ {"version":3,"file":"config.types.d.ts","sourceRoot":"","sources":["../../../src/types/config.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,oBAAY,gBAAgB;IAC1B,UAAU,eAAe;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,gBAAgB,CAAC,UAAU,CAAC;IAClC,OAAO,EAAE,mBAAmB,CAAC;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC"}
@@ -8,6 +8,7 @@ interface IBundleInfo {
8
8
  hash: string;
9
9
  }
10
10
  export interface IStallionInitParams {
11
+ baseUrl?: string;
11
12
  }
12
13
  export type IWithStallion = (BaseComponent: React.ComponentType, initPrams?: IStallionInitParams) => React.ComponentType;
13
14
  export interface IStallionConfig {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.types.d.ts","sourceRoot":"","sources":["../../../src/types/utils.types.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,WAAW;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;CAAG;AAEvC,MAAM,MAAM,aAAa,GAAG,CAC1B,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,SAAS,CAAC,EAAE,mBAAmB,KAC5B,KAAK,CAAC,aAAa,CAAC;AAEzB,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,MAAM,mBAAmB,GAC7B,oBAAoB,CAAC,wBAAwB,CAAC,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEvE,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;AAElE,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAE1E,MAAM,MAAM,2BAA2B,GAAG,CACxC,WAAW,EAAE,aAAa,KACvB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,MAAM,qBAAqB,GAAG,CAClC,UAAU,EAAE,WAAW,KACpB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,MAAM,qBAAqB,GAAG,CAAC,kBAAkB,EAAE,MAAM,KAAK,IAAI,CAAC;AAEzE,MAAM,MAAM,2BAA2B,GAAG,MAAM,MAAM,GAAG,IAAI,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sBAAsB,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3C,gBAAgB,EAAE,WAAW,GAAG,IAAI,CAAC;CACtC"}
1
+ {"version":3,"file":"utils.types.d.ts","sourceRoot":"","sources":["../../../src/types/utils.types.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAErD,UAAU,WAAW;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,aAAa,GAAG,CAC1B,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,SAAS,CAAC,EAAE,mBAAmB,KAC5B,KAAK,CAAC,aAAa,CAAC;AAEzB,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,MAAM,mBAAmB,GAC7B,oBAAoB,CAAC,wBAAwB,CAAC,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;AAEvE,MAAM,MAAM,sBAAsB,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,CAAC;AAElE,MAAM,MAAM,wBAAwB,GAAG,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAE1E,MAAM,MAAM,2BAA2B,GAAG,CACxC,WAAW,EAAE,aAAa,KACvB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,MAAM,qBAAqB,GAAG,CAClC,UAAU,EAAE,WAAW,KACpB,OAAO,CAAC,MAAM,CAAC,CAAC;AAErB,MAAM,MAAM,qBAAqB,GAAG,CAAC,kBAAkB,EAAE,MAAM,KAAK,IAAI,CAAC;AAEzE,MAAM,MAAM,2BAA2B,GAAG,MAAM,MAAM,GAAG,IAAI,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sBAAsB,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3C,gBAAgB,EAAE,WAAW,GAAG,IAAI,CAAC;CACtC"}