@@ -24,6 +24,8 @@ export interface ResolvedConfig {
2424 mrtProject ?: string ;
2525 /** MRT environment name (e.g., staging, production) */
2626 mrtEnvironment ?: string ;
27+ /** MRT API origin URL override */
28+ mrtOrigin ?: string ;
2729 instanceName ?: string ;
2830 /** Allowed authentication methods (in priority order). If not set, all methods are allowed. */
2931 authMethods ?: AuthMethod [ ] ;
@@ -185,6 +187,7 @@ function mergeConfigs(
185187 mrtApiKey : flags . mrtApiKey ,
186188 mrtProject : flags . mrtProject || dwJson . mrtProject ,
187189 mrtEnvironment : flags . mrtEnvironment || dwJson . mrtEnvironment ,
190+ mrtOrigin : flags . mrtOrigin ,
188191 instanceName : dwJson . instanceName || options . instance ,
189192 authMethods : flags . authMethods || dwJson . authMethods ,
190193 } ;
@@ -228,16 +231,34 @@ export interface MobifyConfigResult {
228231 * }
229232 * ```
230233 *
234+ * When a cloudOrigin is provided, looks for ~/.mobify--[cloudOrigin] instead.
235+ * For example, if cloudOrigin is "https://cloud-staging.mobify.com", the file
236+ * would be ~/.mobify--cloud-staging.mobify.com
237+ *
238+ * @param cloudOrigin - Optional cloud origin URL to determine which config file to read
231239 * @returns The API key and username if found, undefined otherwise
232240 */
233- export function loadMobifyConfig ( ) : MobifyConfigResult {
241+ export function loadMobifyConfig ( cloudOrigin ?: string ) : MobifyConfigResult {
234242 const logger = getLogger ( ) ;
235- const mobifyPath = path . join ( os . homedir ( ) , '.mobify' ) ;
236243
237- logger . trace ( { path : mobifyPath } , '[Config] Checking for ~/.mobify' ) ;
244+ let mobifyPath : string ;
245+ if ( cloudOrigin ) {
246+ // Extract hostname from origin URL for the config file suffix
247+ try {
248+ const url = new URL ( cloudOrigin ) ;
249+ mobifyPath = path . join ( os . homedir ( ) , `.mobify--${ url . hostname } ` ) ;
250+ } catch {
251+ // If URL parsing fails, use the origin as-is
252+ mobifyPath = path . join ( os . homedir ( ) , `.mobify--${ cloudOrigin } ` ) ;
253+ }
254+ } else {
255+ mobifyPath = path . join ( os . homedir ( ) , '.mobify' ) ;
256+ }
257+
258+ logger . trace ( { path : mobifyPath } , '[Config] Checking for mobify config' ) ;
238259
239260 if ( ! fs . existsSync ( mobifyPath ) ) {
240- logger . trace ( '[Config] No ~/. mobify found' ) ;
261+ logger . trace ( { path : mobifyPath } , '[Config] No mobify config found' ) ;
241262 return { } ;
242263 }
243264
@@ -246,14 +267,14 @@ export function loadMobifyConfig(): MobifyConfigResult {
246267 const config = JSON . parse ( content ) as MobifyConfig ;
247268
248269 const hasApiKey = Boolean ( config . api_key ) ;
249- logger . trace ( { path : mobifyPath , hasApiKey, username : config . username } , '[Config] Loaded ~/. mobify' ) ;
270+ logger . trace ( { path : mobifyPath , hasApiKey, username : config . username } , '[Config] Loaded mobify config ' ) ;
250271
251272 return {
252273 apiKey : config . api_key ,
253274 username : config . username ,
254275 } ;
255276 } catch ( error ) {
256- logger . trace ( { path : mobifyPath , error} , '[Config] Failed to parse ~/. mobify' ) ;
277+ logger . trace ( { path : mobifyPath , error} , '[Config] Failed to parse mobify config ' ) ;
257278 return { } ;
258279 }
259280}
0 commit comments