mirror of
				https://gitcode.com/github-mirrors/react-native-update-cli.git
				synced 2025-10-31 06:43:10 +08:00 
			
		
		
		
	Update version to 2.1.3 in package.json; set baseUrl in .swcrc; refactor API query logic to use dynamic base URL and update defaultEndpoints in constants.ts
This commit is contained in:
		
							
								
								
									
										1
									
								
								.swcrc
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								.swcrc
									
									
									
									
									
								
							| @@ -1,5 +1,6 @@ | ||||
| { | ||||
|   "jsc": { | ||||
|     "baseUrl": "./src", | ||||
|     "loose": true, | ||||
|     "target": "es2018", | ||||
|     "parser": { | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "react-native-update-cli", | ||||
|   "version": "2.1.2", | ||||
|   "version": "2.1.3", | ||||
|   "description": "command line tool for react-native-update (remote updates for react native)", | ||||
|   "main": "index.js", | ||||
|   "bin": { | ||||
|   | ||||
							
								
								
									
										13
									
								
								src/api.ts
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								src/api.ts
									
									
									
									
									
								
							| @@ -10,18 +10,16 @@ import packageJson from '../package.json'; | ||||
| import type { Package, Session } from './types'; | ||||
| import { | ||||
|   credentialFile, | ||||
|   defaultEndpoint, | ||||
|   pricingPageUrl, | ||||
| } from './utils/constants'; | ||||
| import { t } from './utils/i18n'; | ||||
| import { getBaseUrl } from 'utils/http-helper'; | ||||
|  | ||||
| const tcpPing = util.promisify(tcpp.ping); | ||||
|  | ||||
| let session: Session | undefined; | ||||
| let savedSession: Session | undefined; | ||||
|  | ||||
| const host = | ||||
|   process.env.PUSHY_REGISTRY || process.env.RNU_API || defaultEndpoint; | ||||
|  | ||||
| const userAgent = `react-native-update-cli/${packageJson.version}`; | ||||
|  | ||||
| @@ -64,7 +62,9 @@ export const closeSession = () => { | ||||
| }; | ||||
|  | ||||
| async function query(url: string, options: fetch.RequestInit) { | ||||
|   const resp = await fetch(url, options); | ||||
|   const baseUrl = await getBaseUrl; | ||||
|   const fullUrl = `${baseUrl}${url}`; | ||||
|   const resp = await fetch(fullUrl, options); | ||||
|   const text = await resp.text(); | ||||
|   let json: any; | ||||
|   try { | ||||
| @@ -83,7 +83,7 @@ async function query(url: string, options: fetch.RequestInit) { | ||||
|  | ||||
| function queryWithoutBody(method: string) { | ||||
|   return (api: string) => | ||||
|     query(host + api, { | ||||
|     query(api, { | ||||
|       method, | ||||
|       headers: { | ||||
|         'User-Agent': userAgent, | ||||
| @@ -94,7 +94,7 @@ function queryWithoutBody(method: string) { | ||||
|  | ||||
| function queryWithBody(method: string) { | ||||
|   return (api: string, body?: Record<string, any>) => | ||||
|     query(host + api, { | ||||
|     query(api, { | ||||
|       method, | ||||
|       headers: { | ||||
|         'User-Agent': userAgent, | ||||
| @@ -116,6 +116,7 @@ export async function uploadFile(fn: string, key?: string) { | ||||
|   }); | ||||
|   let realUrl = url; | ||||
|   if (backupUrl) { | ||||
|     // @ts-ignore | ||||
|     if (global.USE_ACC_OSS) { | ||||
|       realUrl = backupUrl; | ||||
|     } else { | ||||
|   | ||||
| @@ -10,6 +10,6 @@ export const pricingPageUrl = IS_CRESC | ||||
|   ? 'https://cresc.dev/pricing' | ||||
|   : 'https://pushy.reactnative.cn/pricing.html'; | ||||
|  | ||||
| export const defaultEndpoint = IS_CRESC | ||||
|   ? 'https://api.cresc.dev' | ||||
|   : 'https://update.reactnative.cn/api'; | ||||
| export const defaultEndpoints = IS_CRESC | ||||
|   ? ['https://api.cresc.dev', 'https://api.cresc.app'] | ||||
|   : ['https://update.reactnative.cn/api', 'https://update.react-native.cn/api']; | ||||
|   | ||||
							
								
								
									
										83
									
								
								src/utils/http-helper.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								src/utils/http-helper.ts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,83 @@ | ||||
| import { defaultEndpoints } from './constants'; | ||||
|  | ||||
| // const baseUrl = `http://localhost:9000`; | ||||
| // let baseUrl = SERVER.main[0]; | ||||
| // const baseUrl = `https://p.reactnative.cn/api`; | ||||
|  | ||||
| export function promiseAny<T>(promises: Promise<T>[]) { | ||||
|   return new Promise<T>((resolve, reject) => { | ||||
|     let count = 0; | ||||
|  | ||||
|     for (const promise of promises) { | ||||
|       Promise.resolve(promise) | ||||
|         .then(resolve) | ||||
|         .catch(() => { | ||||
|           count++; | ||||
|           if (count === promises.length) { | ||||
|             reject(new Error('All promises were rejected')); | ||||
|           } | ||||
|         }); | ||||
|     } | ||||
|   }); | ||||
| } | ||||
|  | ||||
| export const ping = async (url: string) => { | ||||
|   let pingFinished = false; | ||||
|   return Promise.race([ | ||||
|     fetch(url, { | ||||
|       method: 'HEAD', | ||||
|     }) | ||||
|       .then(({ status, statusText }) => { | ||||
|         pingFinished = true; | ||||
|         if (status === 200) { | ||||
|           // console.log('ping success', url); | ||||
|           return url; | ||||
|         } | ||||
|         // console.log('ping failed', url, status, statusText); | ||||
|         throw new Error('ping failed'); | ||||
|       }) | ||||
|       .catch((e) => { | ||||
|         pingFinished = true; | ||||
|         // console.log('ping error', url, e); | ||||
|         throw new Error('ping error'); | ||||
|       }), | ||||
|     new Promise((_, reject) => | ||||
|       setTimeout(() => { | ||||
|         reject(new Error('ping timeout')); | ||||
|         if (!pingFinished) { | ||||
|           // console.log('ping timeout', url); | ||||
|         } | ||||
|       }, 2000), | ||||
|     ), | ||||
|   ]) as Promise<string | null>; | ||||
| }; | ||||
|  | ||||
| export const testUrls = async (urls?: string[]) => { | ||||
|   if (!urls?.length) { | ||||
|     return null; | ||||
|   } | ||||
|   const ret = await promiseAny(urls.map(ping)); | ||||
|   if (ret) { | ||||
|     return ret; | ||||
|   } | ||||
|   // console.log('all ping failed, use first url:', urls[0]); | ||||
|   return urls[0]; | ||||
| }; | ||||
|  | ||||
| export const getBaseUrl = (async () => { | ||||
|   const testEndpoint = process.env.PUSHY_REGISTRY || process.env.RNU_API; | ||||
|   if (testEndpoint) { | ||||
|     return testEndpoint; | ||||
|   } | ||||
|   return testUrls(defaultEndpoints.map((url) => `${url}/status`)).then( | ||||
|     (ret) => { | ||||
|       let baseUrl = defaultEndpoints[0]; | ||||
|       if (ret) { | ||||
|         // remove /status | ||||
|         baseUrl = ret.replace('/status', ''); | ||||
|       } | ||||
|       // console.log('baseUrl', baseUrl); | ||||
|       return baseUrl; | ||||
|     }, | ||||
|   ); | ||||
| })(); | ||||
		Reference in New Issue
	
	Block a user
	 sunnylqm
					sunnylqm