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": { |   "jsc": { | ||||||
|  |     "baseUrl": "./src", | ||||||
|     "loose": true, |     "loose": true, | ||||||
|     "target": "es2018", |     "target": "es2018", | ||||||
|     "parser": { |     "parser": { | ||||||
|   | |||||||
| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "react-native-update-cli", |   "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)", |   "description": "command line tool for react-native-update (remote updates for react native)", | ||||||
|   "main": "index.js", |   "main": "index.js", | ||||||
|   "bin": { |   "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 type { Package, Session } from './types'; | ||||||
| import { | import { | ||||||
|   credentialFile, |   credentialFile, | ||||||
|   defaultEndpoint, |  | ||||||
|   pricingPageUrl, |   pricingPageUrl, | ||||||
| } from './utils/constants'; | } from './utils/constants'; | ||||||
| import { t } from './utils/i18n'; | import { t } from './utils/i18n'; | ||||||
|  | import { getBaseUrl } from 'utils/http-helper'; | ||||||
|  |  | ||||||
| const tcpPing = util.promisify(tcpp.ping); | const tcpPing = util.promisify(tcpp.ping); | ||||||
|  |  | ||||||
| let session: Session | undefined; | let session: Session | undefined; | ||||||
| let savedSession: 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}`; | const userAgent = `react-native-update-cli/${packageJson.version}`; | ||||||
|  |  | ||||||
| @@ -64,7 +62,9 @@ export const closeSession = () => { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| async function query(url: string, options: fetch.RequestInit) { | 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(); |   const text = await resp.text(); | ||||||
|   let json: any; |   let json: any; | ||||||
|   try { |   try { | ||||||
| @@ -83,7 +83,7 @@ async function query(url: string, options: fetch.RequestInit) { | |||||||
|  |  | ||||||
| function queryWithoutBody(method: string) { | function queryWithoutBody(method: string) { | ||||||
|   return (api: string) => |   return (api: string) => | ||||||
|     query(host + api, { |     query(api, { | ||||||
|       method, |       method, | ||||||
|       headers: { |       headers: { | ||||||
|         'User-Agent': userAgent, |         'User-Agent': userAgent, | ||||||
| @@ -94,7 +94,7 @@ function queryWithoutBody(method: string) { | |||||||
|  |  | ||||||
| function queryWithBody(method: string) { | function queryWithBody(method: string) { | ||||||
|   return (api: string, body?: Record<string, any>) => |   return (api: string, body?: Record<string, any>) => | ||||||
|     query(host + api, { |     query(api, { | ||||||
|       method, |       method, | ||||||
|       headers: { |       headers: { | ||||||
|         'User-Agent': userAgent, |         'User-Agent': userAgent, | ||||||
| @@ -116,6 +116,7 @@ export async function uploadFile(fn: string, key?: string) { | |||||||
|   }); |   }); | ||||||
|   let realUrl = url; |   let realUrl = url; | ||||||
|   if (backupUrl) { |   if (backupUrl) { | ||||||
|  |     // @ts-ignore | ||||||
|     if (global.USE_ACC_OSS) { |     if (global.USE_ACC_OSS) { | ||||||
|       realUrl = backupUrl; |       realUrl = backupUrl; | ||||||
|     } else { |     } else { | ||||||
|   | |||||||
| @@ -10,6 +10,6 @@ export const pricingPageUrl = IS_CRESC | |||||||
|   ? 'https://cresc.dev/pricing' |   ? 'https://cresc.dev/pricing' | ||||||
|   : 'https://pushy.reactnative.cn/pricing.html'; |   : 'https://pushy.reactnative.cn/pricing.html'; | ||||||
|  |  | ||||||
| export const defaultEndpoint = IS_CRESC | export const defaultEndpoints = IS_CRESC | ||||||
|   ? 'https://api.cresc.dev' |   ? ['https://api.cresc.dev', 'https://api.cresc.app'] | ||||||
|   : 'https://update.reactnative.cn/api'; |   : ['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